建表的相关操作流程
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 FROM 表 WHERE 1 = 1;
删除后需要commit,并且可以rollback;
TRUNCATE :删除表中的全部数据,保留表结构,会隐式提交,无法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;