1.创建表
1) 直接建表:CREATE TABLE [schema.] 表名 ( id int PRIMARY KEY,..... ); schema 为方案,默认为用户名
2) 子查询建表:CREATE TABLE table [(col1,col2...)]
AS SELECT * FROM emp;新建表后面的字段列表,如果有的话字段的数目必须等于子查询所选的字段数目,如果没有则新建表的字段名使用子查询的字段名 通过子查询创建表完整性约束不会传递到新表 但是字段的数据类型会被引用
字段的约束:
1)约束分类:非空约束 默认值约束 主键约束 (不可以为空) 唯一约束 (可以为空) 外键约束 check 约束 等
2)添加约束:约束可以在创建表的时候定义 ,也可以是在创建表之后定义(ALTER)
语法:ALTER TABLE 表名 ADD[CONSTRAINT 约束名] type(column) ----------------建议命名约束
例如添加check约束:
ALTER TABLE 表名 ADD CONSTRAINT emp_salary_min CHECK(salary >0);
3)外键约束实现:( 外键的值必须匹配一个在父表中存在的值,同时在父表中不能删除这样的行,该行的主键正在被子表所引用)
一对多关系: 一个表存放另一个表的主键
一对一关系: 在外键表对存放的主键加一个唯一约束
多对多关系: 通过建立一个第三个表存放两个表的主键
4)删除约束
ALTER TABLE 表名 DROP PRIMARY KEY | UNIQUE(column)| CONSTRAINT cname [CASCADE]
--CASCADE表示与其依赖的约束也被删除
5)启用禁用约束
启用:ALTER TABLE 表名 DISABLE CONSTRAINT cname[CASCADE]
禁用:ALTER TABLE 表名 ENABLE CONSTRAINT cname
2.修改表
修改表名 RENAME old_name TO new _name
1)添加字段
ALTER TABEL tabel ADD (列名 类型 默认值)
--添加字段age 默认1
ALTER TABLE t_emp ADD(age NUMBER DEFAULT 1);
2)修改字段
修改字段名字 ALTER TABLE 表名 RENAME COLUMN 原名 TO 新名
修改字段类型 ALTER TABEL 表名 MODIFY(列名 varchar(20))
--修改字段名 age 改为 newAge
ALTER TABLE t_emp RENAME COLUMN age TO newage;
--修改字段 age类型 为varchar
ALTER TABLE t_emp MODIFY(age varchar2(100));
3)删除字段
ALTER TABLE 表名 DROP(列名)
--删除age这一列
ALTER TABLE t_emp DROP (age);
3.删除表
删除表:DROP TABLE 表名
DELETE(不带WHERE) DROP TRUNCATE 的区别:
相同点: truncate和不带where子句的delete, 以及drop都会删除表内的数据
不同点:
- drop语句将删除表的结构被依赖的约束、触发器、索引;依赖于该表的存储过程/函数将保留,但是变为invalid状态.
truncate和delete只删除数据不删除表的结构(定义) - truncate,drop是ddl,操作立即生效不能回滚,delete是dml,可以回滚,因此小心使用drop 和 truncate
- delete可以返回被删除的记录数,可以和WHERE一起使用,而TRUNCATE TABLE返回的是0。
- 速度,一般来说: drop> truncate > delete
4.恢复表
-----------从flash back里查询被删除的表
SELECT * FROM RECYCLEBIN;
-------执行表的恢复,同时恢复数据
FLASHBACK TABLE t_emp TO BEFORE DROP;