一. 用户管理
1. 用户创建
关键字:user
语法: create user 用户 identified by 密码
[default tablespace 表空间名
temporary tablespace 临时表空间]
[account lock|unlock]
" [] " 内的内容为可选项
例如:create user xiaoming identified by 123456 account lock;
注意:在创建用户的时候如果没有指定表空间,默认用户保存到系统表空间中:SYSTEM。
在创建用户的时候如果没有指定临时表空间,系统如果有需要会创建一个TEMP临时表空间。
lock|unlock:设置账户的锁定状态,如果账户被锁定则不能正常使用。
2. 修改用户
(1) 解锁|锁定 账户:
语法:alter user 用户名 account unlock|lock;
alter user xiaobai account unlock;
(2) 修改用户密码:
语法:alter user 用户名 identified by 新密码;
alter user xiaobai identified by 123444;
(3) 删除用户:
语法:drop user 用户名 [cascade];
注意:cascade:级联删除,如果用户没有任何数据库对象则不需要指定 cascade,用户下面有很多数据库对象则必须指定 cascade。
二. 权限管理
一个用户创建出来时没有任何权限,所以不能进行数据库的登录以及其他操作,因此该用户想要操作数据库则必须赋予相应的权限。
1. 系统权限:执行系统级别操作的一些权限。
例如:登录数据库(create session),创建表(create table)等
2. 对象权限:用户是否可以操作该用户下面的数据库对象中的数据的权限。
例如:select,delete,update,insert...
3. 执行语句
(1)系统权限的授予:
语法:grant 权限1,权限2,... to 用户名 [with admin option];
with admin option:给予管理员权限,可以将管理员授予的权限授予给其他用户。
例如:grant create session to xiaobai;(授予 xiaobai 登录的权限)
grant connect,resource to xiaobai;(授予 xiaobai 连接的权限,connect 和 resource 为当前用户拥有的角色)
(2)对象权限的授予:
语法:grant 权限1,权限2,... on 用户名.对象名 to 用户名;
例如:grant select on scott.emp to xiaobai; (授予xiaobai 查询 scott 用户中的 emp 表的权限)
(3)系统权限回收:
语法:revoke 权限1,权限2,... from 用户名;
例如:revoke connect,resource from xiaobai;
(4)对象权限回收:
语法:revoke 权限1,权限2,... on 用户名.对象名 from 用户名;
例如:revoke select on scott.emp from xiaobai;
4. 查询系统中的所有系统权限:
数据字典:dba_sys_privs:可以查询系统中授予给用户的所有对象。
数据字段:dba_tab_privs:可以查询系统中的对象授予的对象权限。
select * from dba_sys_privs;
select * from dba_tab_privs;
三. 角色管理
1. 角色可以理解为一组权限的集合,也就是说可以将多个权限进行打包,定义一个角色。
数据字典:role_sys_privs:可以查询当前用户所拥有的角色
select * from role_sys_privs;
常见的角色:
DBA:拥有所有的权限
connect:登录数据库的权限
resource:拥有常见数据库对象创建的权限
2. 创建角色
语法:create role 角色名;
例如:create role role_test;
注意:刚创建出来的角色是没有任何权限的,如果要使用该角色则需授予权限。
例如:grant create session,create sequence,create table to role_test;
将创建的角色授予给用户:grant role_test to xiaobai;
3. 删除角色
语法:drop role 角色名;
注意:角色授予给用户之后也是可以删除的,如果角色删除了,拥有这个角色的用户也失去相应的权限。
四. 数据表管理
在创建表的时候需要设置以下信息:
(1)设置表名;
(2)设置属性名;
(3)规定属性的数据类型;
(4)设置一些约束条件。
1. 创建数据库表
语法:create table 表名(
列名 数据类型[(长度)] [约束条件],
列名 数据类型[(长度)] [约束条件],
......
);
Oracle 数据库中的数据类型:
(1)数值型
number[(长度)],默认为11
number(3):最大可以保存999的整数
number(5,2):可以保存两位小数的浮点数字
(2)字符串型
char(长度):固定长度的字符串,如果存入的数据长度小于规定的长度,则剩下会使用空格填充。
如果实际保存的长度大于规定的长度数据库报错。
varchar2(长度):可变长度的字符串,如果存入的数据长度小于规定的长度,则自动将长度设置为实际长度
如果实际保存的长度大于规定的长度同样会报错。
(3)时间类型
date:时间类型
timestamp: 时间戳类型
(4)LOB类型
BLOB:主要用来保存一些二进制,未被结构化的数据文件。
CLOB:主要用来保存一些字符格式的文件。
BFILE:主要用来保存一些二进制文件,但是并不会保存文件本身,只是保存文件的物理地址。
该类字段是只读字段,只能由系统进行维护,用户只能看不能修改
(5)rowId类型(伪列类型):
主要用来保存表中的每一行数据的保存的物理地址
2. 数据表的维护
(1)新增字段
alter table student_t add (字段名 数据类型,........);
(2)删除字段
alter table student_t drop column 字段名;
alter table student_t drop (字段名,......);
(3)修改字段
alter table student_t modify (字段名 数据类型,......);
alter table student_t rename column 旧的列名 to 新的列名
3. 数据表的操作
(1)修改表名
alter table 表名 rename to 新的表名;
(2)删除表
drop table 表名 [cascade constraints];
如果在删除的时候设置了cascade constraints,则会一起删除和该表相关联的约束条件
(3)复制一张表
create table 新表名 as select * from 旧表名
只复制结构
create table 新表名 as select * from 旧表名 where 1=2
五. 约束条件
(1)非空约束:not null,不为空
(2)唯一性约束:unique,不重复,为空时不限定
(3)主键约束:primary key,主键,非空且唯一
(4)外键约束:foreign key,外键
(5)检查约束:check 用来限定字段的取值范围
(6)默认值约束:default 添加数据时字段数据为空则设置为默认值
设置方式:
1. 在创建表的时候添加约束
非空约束,唯一性约束,主键约束——> 字段名 数据类型 约束条件
外键约束——> 字段名 数据类型 foreign key references 关联表名 (关联表的列名)
检查约束——> 字段名 数据类型 check between 开始 and 结束
默认值约束——> 字段名 数据类型 default 默认值
2. 修改表数据类型的时候添加约束
添加非空约束:alter table 表名 modify (列名 not null)
添加默认值约束:alter table 表名 modify(列名 default 默认值)
3. 修改表的方式添加约束
添加非空,唯一性,主键约束:alter table 表名 add constraint 约束名 约束条件 (列名)
添加外键约束:alter table 表名 add constraint 约束名 foreign key (列名)references 关联表名 (关联表的列名)
添加检查约束:alter table 表名 add constraint 约束名 check (列名 between 开始 and 结束)
添加默认值约束:alter table 表名 add constraint 约束名 default 默认值
4. 如果表中有外键约束要删除数据则需要设置级联删除方式
no action:不做任何处理,也就是在删除的时候如果有关联的数据则不允许删除。
cascade:级联删除,在删除数据的时候会将另外一张表中所关联的所有数据都删除
set null:允许删除,在删除之后会将另一张表所关联的数据设置为空
5. 约束条件操作
禁用和激活
alter table 表名 disable constraint 约束名
alter table 表名 able constraint 约束名
删除
drop table constraint 约束名