SQL_10_数据库对象操作(用户、表、约束、视图、序列、索引)
Oracle中的对象包括对象包括了表、用户、视图、索引......等。
使用DDL语句来操作对象。
一、DDL语句
DDL指数据定义语言,用来操作数据库中的对象。
DDL属于隐式事务,执行即提交事务,对于数据库的改变是永久的。
创建对象:create
删除对象:drop
修改对象:alter
重命名对象:rename
二、用户(User)
只要system或者sys账户,或者其它拥有操作账户权限的用户可以进行账户管理。
1、创建:
create user 用户名 identified by 密码
2、维护:
Oracle:
--赋予用户登录的权限 grant connect to 用户名; --赋予用户操作资源的权限 grant resoure to 用户名; --赋予角色的权限给用户 grant 角色名 to 用户名;
--撤销用户的权限 revoke 权限名/角色名 from 用户名
MySQL:
grant 权限 on 数据库.表 to '用户名' @'登录主机' identified by '密码' --登录主机:
%,表示所有主机。
localhost,不会进行解析,直接通过UNIXsoket连接。
127.0.0.1,会通过tcp/ip协议连接。
其它指定ip地址,则只能在指定ip地址登录。
3、删除:
drop user 用户名;
4、忘记密码:
1、cmd窗口下输入:sqlplus /nolog 2、输入: conn /as sysdba 3、输入:alter user 用户名 identified by 新密码
三、表(Table)
分类:
用户表:由用户创建和维护的集合,包含用户信息。
数据字典:由数据库系统创建和维护的集合,包含数据库信息。
Oracle中常用的数据字典:
user_tables,包含本用户拥有的所有的表的信息。
user_objects,包含本用户拥有的所有的数据类型的信息。
user_catalog,包含本用户拥有的表、视图、同义词、序列的信息。
1、创建:
--指定列名列属性创建表 creat table 表名(列名1 数据类型1,列名2 数据类型2.......) --通过结果集创建表 --可以使用这种方式备份表(tablebak),但是备份表中只存字段名和数据,不会有约束。 creat table 表名 as 查询语句
2、维护:
--增加列 alter table 表名 add(列名 数据类型) --修改列 alter table 表名 modify(列名 数据类型 default 默认值) --删除列 alter table 表名 drop column 列名 --改列名 alter table 表名 rename column 原列名 to 新列名
--改表名 rename 原表名 to 新表名
--截断表,把表中所有数据删除。 truncate table 表名
3、删除:
--删除表 drop table 表名
flashback table 表名 to before drop;
四、约束(Constraint)
对于字段储存的数据进行约束。
主键约束(Primay Key):值唯一,且非空。
唯一约束(Unique):值唯一,可以有一个空。
检查约束(Check):自定义约束,对值进行限制。
非空约束(Not null):值不为空。
外键约束(Foregin Key):值必须为其它表已经存在的数据。
1、创建:
--创建表的时候,创建约束 --可在列后面直接指定约束 creat table 表名(列名 数据类型 constraint 约束名 约束,....) --除了非空约束,可以在列定义完后,定义约束 creat table 表名 (列名 数据类型,......, constraint 约束名 约束(列名)) --非空约束可以结合检查约束,实现在最后定义 creat table 表名 (列名 数据类型,......, constraint 约束名 check(列名 is not null)) --外键约束 --在定义列时定义约束 creat table 表名(列名 数据类型 constraint 约束名 references 参照表名(参照列名),....) --在列定义完后定义外键,注意外键参照的表和列都必须已经存在 create table 表名(列名 数据类型,..... constraint 约束名 foreign key(列名) references 参照表名(参照列名)) --在外键约束的后面使用关键字 on update cascade ,可以让值被修改的时候,关联的数据同时被修改 --在外键约束的后面使用关键字 on delete cascade ,可以让值被删的时候,关联的数据同时被删除 --在外键约束的后面使用关键字 on delete set null,可以让值被删的时候,关联的数据值被置为空
--在表创建后,给字段添加约束
--方式一 alter table 表名 add(列名 constraint 约束名 约束,.....) --方式二 alter table 表名 add constraint 约束名 约束(列名)
2、维护:
--修改字段的约束 alter table 表名 modify (列名 constraint 约束名 约束,.....)
3、删除
alter table 表名 drop constraint 约束名
4、查看约束:
--查看约束 --使用数据字典可以查约束。Oracle中查看指定表的所有约束: select constraint_name,constraint_type,search_condition from user_constraints where table_name = 表名
5、启用与禁用:
--禁用约束 --注意:当此字段为另一个表的外键时,需要在结尾加cascade关键字,它声明与此列相关的约束全部禁用。 alter table 表名 disable constraint 约束名 cascade
--启用约束 alter table 表名 enable constraint 约束名
五、视图(View)
视图是根据需求保存的一个结果集,可以对字段进行DML操作。
对视图DML操作,实际上是操作数据源的表。
作用:
保护真实表,隐藏核心数据。
分类:
简单视图:数据来源一个表,列为单独列,无分组,可以进行DML操作。
复杂视图:数据来源多个表,列中可以有函数值、表达式,可以是分组结果,不能进行DML操作。
内建视图:每一个子查询获得的结果集都是一个内建视图,可以通过取别名来引用它的列。(在from子句中使用的子查询)
不能DML操作的列:
函数列,表达式列,通过distinct获得的列。
1、创建:
--视图的列名省略时,默认使用查询语句中的列名 creat view 视图名(列名1,列名2,...) as 查询语句
在结尾加上 with read only ,声明视图为只读视图,需要dba权限才能创建视图。
2、删除:
drop view 视图名
六、序列(Sequence)
序列是一个数据库对象,它会产生一个唯一的整数,且自增。
常用来做表的主键,同一个序列可以被多个表使用。
1、创建:
create sequence 序列名字 minvalue 序列最大值 maxvalue 序列最小值 start with 序列开始值 increment by 增长系数 cache 缓存值个数 <--若不指定,默认缓存20个--> cycle; <--若不指定,默认不循环-->
2、查看:
Oracle中使用用户字典查看当前用户下的所有序列
select sequence_name,increment_by,max_value,min_value,last_number from user_sequences
3、使用:
通过nextval获取下一个值,通过currval获取当前值。
例子:查看当前序列值并使序列增加到下一个值。
--获取序列当前值,值增一 select temp.currval,temp.nextval from dual; --使用序列作为主键 create table students( id number(10) Primay Key, name varchar(20) ) insert into students(序列名.nextval,'张三')
4、修改:
alter sequence 序列名 minvalue 序列最大值 maxvalue 序列最小值 start with 序列开始值 increment by 增长系数 cache 缓存值个数 cycle;
5、删除:
drop sequence 序列名
七、索引(Index)
通过索引查找速率,速度快。显式创建,隐式执行。
表的主键会被系统设置为索引。
1、创建:
create index 索引名 on 表名(字段名)
2、删除:
drop index 索引名
3、查看:
Oracle通过数据词典查看某个表的索引:select * from user_indexes where table_name =upper ( '表名' );
MySQL查看某个表的索引:show index from 表名