建完整表的相关操作

建表的相关操作流程

1.创建表结构
创建表的主键
表的索引
表的注释
— 1 要保存成一个单独的 .SQL的文件

2. 表的授权
GRANT SELECT ANY TABLE TO CONNECT ;
— 2 要保存成一个单独的 .SQL的文件

3.表的同义词
SELECT * FROM scott.emp
— 3 要保存成一个单独的 .SQL的文件

上面是增量脚本

** 针对写的所有的增量脚本,要准备对应的回滚脚本。**
1. 删除表
删除表,会删除表中的数据,表结构,表的主键,表的索引

2. 权限的回收

3.删除同义词

以上三步要保存成三个独立的.SQL文件.



操作流程如下:

第一步:

1.创建表结构

CREATE TABLE EMP3(
empno  NUMBER(4),--员工编号
ename  VARCHAR2(10),--员工名字
sal    NUMBER(7,2),--工资
hiredate DATE --入职时间
);

2.给表添加主键

语法:

ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY(列名1 [,列名2...] )

ag:

ALTER TABLE EMP3 ADD CONSTRAINT PK_EMP1_NO PRIMARY KEY(EMPNO);
表中需要创建主键,因为建表要遵循三范式(3NF)原则:
1NF  表中的数据要拆分到不可拆分的最细粒度。 (按照需求或者需要的统计的小粒度)
2NF  表中需要有主键,并且表中其他列要跟主键之间有关联。
3NF  满足第二范式的基础上,要求,主键必须和其他所有的列是之间有关联的,不能是间接相关.

3.给表添加索引

语法:

CREATE [UNIQUE] INDEX index_name ON table_name(column_name[,column_name…])

ag:

CREATE UNIQUE INDEX IDX_EMP1_NAME  ON EMP3(ENAME);

4.给表添加注释

COMMENT ON TABLE empno  IS '员工表';--表名

COMMENT ON COLUMN EMP3.empno IS '员工编号';
COMMENT ON COLUMN EMP3.ename IS '员工姓名';
COMMENT ON COLUMN EMP3.sal IS '工资';
COMMENT ON COLUMN EMP3.hiredate IS '员工入职时间';

第二步:

1.表的授权

授权角色 可以操作表

 语法: grant  权限   to  角色[/用户]。
 语法: GRANT  角色 TO  用户;
GRANT  SELECT  ANY TABLE     TO  CONNECT ;--给用户授权连接权限

第三步:

1.给表创建同义词

语法:

CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema.]synonym_name
FOR [schema.]object_name

ag:

CREATE OR REPLACE PUBLIC SYNONYM EMP3 FOR SCOTT.EMP3;
创建公共同义词需要有权限。可以通过管理员账号授权
授权:GRANT CREATE PUBLIC SYNONYM ,
     DROP PUBLIC SYNONYM  TO SCOTT; --管理用户授权创建/删除同义词权限给用户
取消授权:revoke CREATE PUBLIC SYNONYM , DROP PUBLIC SYNONYM  from  SCOTT;


-------------------------------- 增量脚本对应回滚脚本 -----------------------------------------------
删除表 EMP3

DROP TABLE EMP3;

取消授权

REVOKE   SELECT  ANY TABLE    FROM   CONNECT ;

删除同义词

DROP PUBLIC SYNONYM EMP3 ;

以上这三行代码,分别保存成3个 .sql 的文件.


DROP ,DELETE 和TRUNCATE用法和区别

DROP : 可以删除所有的对象,DROP表的话,会删除表结构和表中数据.
DELETE :条件删除,如果要删除全部数据 DELETE FROMWHERE 1 = 1; 
        删除后需要commit,并且可以rollbackTRUNCATE :删除表中的全部数据,保留表结构,会隐式提交,无法rollback; 
		 但是删除的效率很高。

序列

序列 ,调用序列可以自动获得一个序号

1.创建序列

CREATE SEQUENCE SEQ_TEST1
START WITH 1
INCREMENT BY 1
MAXVALUE 999999999999999999
MINVALUE 1
NOCYCLE
CACHE 20;

2.删除序列

DROP SEQUENCE SEQ_TEST1;

3.从序列中取值

SELECT SEQ_TEST1.nextval  FROM DUAL;
发布了22 篇原创文章 · 获赞 3 · 访问量 5071

猜你喜欢

转载自blog.csdn.net/ferlylao/article/details/104084131