数据库基础之认识 sql 并学习数据库的基础操作

    选择打赏方式


学习环境

目标数据库 Oracle 12c


学习记录

一、什么是关系型和非关系型数据库,两者都包含哪些种类的数据库

    1. 关系数据库:是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。简单说来就是关系型数据库用了选择、投影、连接、并、交、差、除、增删查改等数学方法来实现对数据的存储和查询。可以用SQL语句方便的在一个表及其多个表之间做非常复杂的数据查询。安全性高。

     关系数据库包含OracleDB2PostgreSQLMicrosoft SQL ServerMicrosoft AccessMySQL、浪潮K-DB

 

    2. 非关系型数据库:简称NOSQL,是基于键值对的对应关系,并且不需要经过SQL层的解析,所以性能非常高。但是不适合用在多表联合查询和一些较复杂的查询中。NoSQL用于超大规模数据的存储。

    非关系型数据库包含NoSqlCloudantMongoDBredisHBase

 

两种数据库之间的区别:

对于关系型数据库

 

关系型数据库的特性

    1、关系型数据库,是指采用了关系模型来组织数据的数据库;

    2、关系型数据库的最大特点就是事务的一致性;

    3、简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。

 

关系型数据库的优点

    1、容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解;

    2、使用方便:通用的SQL语言使得操作关系型数据库非常方便;

    3、易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率;

    4、支持SQL,可用于复杂的查询。

 

关系型数据库的缺点

    1、为了维护一致性所付出的巨大代价就是其读写性能比较差;

    2、固定的表结构;

    3、高并发读写需求;

    4、海量数据的高效率读写;

---------------------------------------------------------------------

对于非关系型数据库

 

非关系型数据库的特性

    1、使用键值对存储数据;

    2、分布式;

    3、一般不支持ACID特性;

    4、非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

 

非关系型数据库的优点

    1、无需经过sql层的解析,读写性能很高;

    2、基于键值对,数据没有耦合性,容易扩展;

    3、存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,而关系型数据库则只支持基础类型。

 

非关系型数据库的缺点

    1、不提供sql支持,学习和使用成本较高;

    2、无事务处理,附加功能bi和报表等支持也不好;

 

二、学习数据库中的字段类型并创建库和用户表,需要包含所有字段类型

1、创建表空间:

格式:

create tablespace 表间名 datafile '数据文件名' size 表空间大小

 

具有命令如下:

 

mkdir /data/oracle/

#创建数据库物理文件位置  之前有/data 这个目录 不需要mkdir /data

mkdir /data/oracle/test               #创建数据库物理文件位置

chown -R oracle:dba /data/oracle/     #更改/data/oracle/ 目录所有者

sqlplus "/as sysdba"                  #sysdba用户登录

 

:

sys     --系统管理员,拥有最高权限

system --本地管理员,次高权限

scott  --普通用户,密码默认为tiger,默认未解锁

sys     --系统管理员,拥有最高权限

system --本地管理员,次高权限

scott  --普通用户,密码默认为tiger,默认未解锁

 

sqlplus / as sysdba; --登陆sys帐户

sqlplus sys as sysdba;   -- 登陆sys帐户

sqlplus scott/tiger;     --登陆普通用户scott

sqlplus / as sysdba; --登陆sys帐户

sqlplus sys as sysdba;   -- 登陆sys帐户

sqlplus scott/tiger;     --登陆普通用户scott

 

create tablespace zuoer datafile '/data/oracle/test/zuoer.dbf' SIZE 200M AUTOEXTEND ON EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;


 

:

AUTOEXTEND ON EXTENT设置表空间自动扩展

MANAGEMENT LOCAL本地管理表空间

SEGMENT SPACE MANAGEMENT AUTO 自动段空间管理

 

2、创建用户

create user 用户名 identified by 密码 default tablespace 表空间表;

例如:create user u_zuoer identified by 123456 default tablespace zuoer;


3、授权给新用户

:

1) 系统权限分类:

DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。

RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。

CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。

 

对于普通用户:授予connect, resource权限。

对于DBA管理用户:授予connectresource, dba权限。

 

2) 系统权限传递:

 

增加WITH ADMIN OPTION选项,则得到的权限可以传递。

grant connect,resorce to u_zuoer with admin option;  --可以传递所获权限。

 

3) 系统权限回收:

系统权限只能由DBA用户回收

命令:SQL> Revoke connect,resource from u_zuoer;

 

4) 查看所用用户对表的权限

select * from user_sys_privs;--查看当前用户所有权限

select * from user_tab_privs;--查看所用用户对表的权限

select * from user_sys_privs;--查看当前用户所有权限

select * from user_tab_privs;--查看所用用户对表的权限

 

5)角色

角色即权限的集合,可以把一个角色授予给用户

create role myrole;      --创建角色

grant create session to myrole;   --将创建session的权限授予myrole

grant myrole to zhangsan;    --授予zhangsan用户myrole的角色

drop role myrole;            --删除角色

--但是有些权限是不能授予给角色的,比如unlimited tablespaceany关键字

 

6)、赋予表操作权限

grant select,update,insert,delete on TABLENAME to USER;

例如:grant select,update,insert,delete on t_zuoer to u_zuoer;

 

开始操作

1) connect,resourc权限授予u_zuoer用户

grant connect,resource to u_zuoer;


或者

grant dba to study;

#表示把 dba权限授予给 u_zuoer

 

2) u_zuoer空间分配权限

alter user u_zuoer quota 50M on zuoer;

 

4、创建数据表

conn u_zuoer/123456@localhost/orcl:1521; #切换用户


create table t_zuoer(

  UUID VARCHAR2(99)   primary key,

  Z_CHAR CHAR(20) not null,

  Z_NCHAR NCHAR(20)  default '1' check(Z_NCHAR in('1','2')),

  Z_NVARCHAR2 NVARCHAR2(20) not null,

  Z_LONG LONG not null,

  Z_NUMBER NUMBER(20) not null,

  Z_DATE DATE not null,

  Z_RAW RAW(20) not null,

  Z_LONG_RAW RAW(200) not null,

  Z_BLOB BLOB not null,

  Z_CLOB CLOB not null,

  Z_NCLOB NCLOB not null,

  Z_BFILE BFILE not null

);

#这个表创建很艰难,


我一直以为是括号的事,半角和全角的问题,我还关机了,我都以为我CPU坏了呢,后来无意间发现多了一个逗号。


5.创建一个学生表实现增删改查,扩展回滚。

1.创建学生表

create table student(

       xh number(4),

       xm varchar(20),

       sex char(2),

       birthday date,

       sal number(7,2)

);

 

2.对表结构的扩展

alter table student add (classid number(2)); --添加一个字段

alter table student modify(xm varchar(30));  --修改字段的类型、长度或者是名字(不能有数据)

alter table student drop column sal;         --删除字段

rename student to stu;                       --修改表名字

create table student as select * from stu;   --复制表结构及其数据

create table s as select * from stu where 1=2;--复制表结构不复制数据

drop table stu;                          --删除表

 

 

3.对数据进行操作

insert into student values(1,'zuoer','',to_date('1888-08-08','yyyy-mm-dd'),2);

--添加数据

update student set sex='' where xh=1;                  --修改数据

savepoint aa;                                            --创建保存点

delete from student where xh=1;                       --删除数据

rollback to aa;                                          --回滚

select * from student;

SQL> delete from student where xh=1;

1 row deleted.

SQL> select * from student;

no rows selected

SQL> rollback to aa;

Rollback complete.

SQL> select * from student;

    XH XM                  SEX       BIRTHDAY CLASSID

---------- ------------------------------ --------- --------- ----------

     1 zuoer               08-AUG-88           2

 

 

三、读写文件以及系统库和表

1.读写文件

1) 创建目录

create or replace directory TESTFILE as '/data/oracle/test';

2) 给读写权限

grant read,write on directory TESTFILE to u_zuoer;

3) 写文件

conn u_zuoer/123456@localhost/orcl:1521; #切换用户

 

DECLARE

filehandle utl_file.file_type; --句柄

begin

filehandle := utl_file.fopen('TESTFILE','hello.txt','w'); --打开文件

utl_file.put_line(filehandle,'Hello Oracle!');--写入一行记录

utl_file.put_line(filehandle,'Hello World!');

utl_file.put_line(filehandle,'zuoer');

utl_file.fclose(filehandle);--关闭句柄

end;

/

 

4) 读文件

set serveroutput on;  --打开输出功能

 

declare

filehandle utl_file.file_type;

fp_buffer varchar2(4000);

begin

filehandle:= utl_file.fopen ('TESTFILE','hello.txt', 'R');

utl_file.get_line (filehandle, fp_buffer );

dbms_output.put_line(fp_buffer );

utl_file.get_line (filehandle, fp_buffer );

dbms_output.put_line(fp_buffer );

utl_file.fclose(filehandle);

end;

/


 

 

2.系统表

1)常用查询

select username,password from dba_users; --查看用户名和密码

select * from role_sys_privs;      --查看当前用户的权限

select * from v$pwfile_users;      --查看哪些用户有sysdba权限

select * from all_tables;           --获取所有用户及创建的表

select * from user_tables;          --获取用户的表对象

select * from dba_sys_privs;       --用户的系统权限信息

select * from dba_tab_privs         --用户具有的对象权限信息

select * from dba_col_privs         --用户具有的列对象权限信息

select * from user_sys_privs       --当前用户的系统权限信息

select * from user_tab_privs       --当前用户的对象权限信息

select * from user_col_privs       --当前用户的表列权限信息

select * from user_role_privs      --当前用户的角色权限信息

select * from session_privs        --会话的权限信息

select * from v$instance           --数据库实例信息

select * from v$database           --数据库信息

select * from v$datafile           --数据文件信息

select * from v$controlfile        --控制文件信息

 

2dba

dba_users         数据库用户信息

dba_segments      表段信息

dba_extents       数据区信息

dba_objects       数据库对象信息

dba_tablespaces   数据库表空间信息

dba_data_files    数据文件设置信息

dba_temp_files    临时数据文件信息

dba_rollback_segs回滚段信息

dba_ts_quotas     用户表空间配额信息

dba_free_space    数据库空闲空间信息

dba_profiles      数据库用户资源限制信息

dba_sys_privs     用户的系统权限信息

dba_tab_privs     用户具有的对象权限信息

dba_col_privs     用户具有的列对象权限信息

dba_role_privs    用户具有的角色信息

dba_audit_trail   审计跟踪记录信息

dba_stmt_audit_opts  审计设置信息

dba_audit_object     对象审计结果信息

dba_audit_session    会话审计结果信息

dba_indexes          用户模式的索引信息

 

3user

user_objects         用户对象信息

user_source          数据库用户的所有资源对象信息

user_segments        用户的表段信息

user_tables          用户的表对象信息

user_tab_columns     用户的表列信息

user_constraints     用户的对象约束信息

user_sys_privs       当前用户的系统权限信息

user_tab_privs       当前用户的对象权限信息

user_col_privs       当前用户的表列权限信息

user_role_privs      当前用户的角色权限信息

user_indexes         用户的索引信息

user_ind_columns     用户的索引对应的表列信息

user_cons_columns    用户的约束对应的表列信息

user_clusters        用户的所有簇信息

user_clu_columns     用户的簇所包含的内容信息

user_cluster_hash_expressions   散列簇的信息

 

4v$

v$database           数据库信息

v$datafile           数据文件信息

v$controlfile        控制文件信息

v$logfile            重做日志信息

v$instance           数据库实例信息

v$log                日志组信息

v$loghist            日志历史信息

v$sga                数据库SGA信息

v$parameter          初始化参数信息

v$process            数据库服务器进程信息

v$bgprocess          数据库后台进程信息

v$controlfile_record_section  控制文件记载的各部分信息

v$thread             线程信息

v$datafile_header    数据文件头所记载的信息

v$archived_log       归档日志信息

v$archive_dest       归档日志的设置信息

v$logmnr_contents    归档日志分析的DML DDL结果信息

v$logmnr_dictionary  日志分析的字典文件信息

v$logmnr_logs        日志分析的日志列表信息

v$tablespace         表空间信息

v$tempfile           临时文件信息

v$filestat           数据文件的I/O统计信息

v$undostat           Undo数据信息

v$rollname           在线回滚段信息

v$session            会话信息

v$transaction        事务信息

v$rollstat           回滚段统计信息

v$pwfile_users       特权用户信息

v$sqlarea            当前查询过的sql语句访问过的资源及相关的信息

v$sqlv$sqlarea    基本相同的相关信息

v$sysstat            数据库系统状态信息

 

5)其他

all_users            数据库所有用户的信息

all_objects          数据库所有的对象的信息

all_def_audit_opts   所有默认的审计设置信息

all_tables           所有的用户及创建的表

all_indexes          所有的数据库对象索引的信息

session_roles        会话的角色信息

session_privs        会话的权限信息

index_stats          索引的设置和存储信息

dual                 系统伪列表信息


版权声明:若无特殊注明,本文皆为《 zuoer 》原创,转载请保留文章出处。
本文链接:数据库基础之认识 sql 并学习数据库的基础操作 https://www.zuoer.xin/?post=105
正文到此结束

热门推荐

管理员已关闭本篇文章评论!