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 表名
4、通过缓存,恢复刚删除的表:
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 表名

posted @ 2022-12-20 17:14  在博客做笔记的路人甲  阅读(238)  评论(0编辑  收藏  举报