四、DDL(数据库定义语言)
*DDL(data defination language):数据库定义语言(创建、修改、删除) create、alert、drop
※※※注:本章可略过,表的相关处理基本都是手操※※※
※※※注:sql语句内的所有AS均可省略※※※
1、约束
-
对表的限制(5种)
- 非空约束:not null(不能存储null)
- 唯一约束:unique(不可以重复,但可以存储无数个null)
- 主键约束:primary key(不可以重复,也不能为null)
- 外键约束:foreign key(顾名思义,就是关联表的主键,当然这里可以随便存null)
检查约束:check(注意:目前MySQL不支持、Oracle支持!)
-
添加约束
-
-- 建表时使用 constraint 约束名 约束(列名) constraint 约束名 check(条件) -- 不取名可直接简写 check(条件) -- 栗子一枚 CREATE TABLE emptest( empno NUMBER(4), ename VARCHAR2(10) NOT NULL, -- 你总得有个名字吧 deptno NUMBER(2), email varchar(20) unique, -- 邮箱也不能重复哈 CONSTRAINT pk123 PRIMARY KEY (empno), -- 添加个主键约束很合理吧 CONSTRAINT fk123 FOREIGN KEY (deptno) -- 在添加个外键约束也不过分吧 -- 指定外键是哪个表的并绑定级联删除也很有理吧 REFERENCES dept0630(deptno) ON DELETE CASCADE );
- REFERENCES:引用【引用关联表的字段(主键)到主表】
- ON DELETE:级联删除
- cascade:当主表数据被删除,从表数据也会随之被删除(dept中部门20被删,emp中deptno也随之删除)
- no action:不采取操作(dept中部门20被删,emp中deptno不变)
- set null:被删除影响到的数据,设置为null(dept中部门20被删,emp中deptno变成null)
检查约束:如果不起名字,系统会自定义
-
-- 建表后使用 alter table 表名 modify(列名 约束); -- 栗子一枚 ALTER TABLE emp0630 MODIFY(ename NOT NULL); -- 表内数据必须满足约束条件才能追加成功 -- 添加约束 alter table 表名 add constraint 自定义约束名字 foreign key(关联表字段名) REFERENCES 关联表名(关联表字段名);
-
-
删除约束
-
-- 格式 alter table 表名 drop constraint 约束名; -- 栗子一枚 -- 如果被其他表引用,删除会失败;但手动编辑表时可以删除 ALTER TABLE dept0630 DROP CONSTRAINT pkdept0630;
-
-
约束无效化
-
-- 格式 alter table 表名 disable constraint 约束名; -- 栗子一枚 -- 如果约束对象变灰,可以鼠标操作,右键约束,选择允许/禁止 ALTER TABLE Employee DISABLE CONSTRAINT bnnnn;
-
2、create
表命名规则:以字母开头,1-30字符之间,可以用数字/字母/_/$
例:mst_type taccount …
-
正常创建一张表
-
-- 格式 create table 表名 ( 列名 数据类型, 列名 数据类型… ); -- 举个栗子: CREATE TABLE test20220604( testid NUMBER(2), testdate DATE, testmemo VARCHAR(20) );
-
-
复制并创建一张表
-
-- ※注意:约束不会复制过去 CREATE TABLE emps AS SELECT * FROM emp WHERE deptno=10;
-
-
复制一张空表
-
-- ※注意:约束不会复制过去 CREATE TABLE emps AS SELECT * FROM emp WHERE 1=2;
-
3、alter
-
追加一列
-
-- 格式 alter table 表名 add(列); -- 举个栗子: ALTER TABLE test0603 ADD(testadd VARCHAR(20));
-
-
删除一列
-
-- 格式 alter table test0603 drop column 列名; -- 举个栗子: ALTER TABLE test0603 DROP COLUMN testadd;
-
-
表的重命名
-
-- 格式 rename 表名 to 新表名; -- 举个栗子: RENAME test0603 TO test0603new;
-
-
列的重命名
-
-- 格式 alter table 表名 rename column 列名 to 新列名; -- 举个栗子: ALTER TABLE test0603new RENAME COLUMN testname TO tname;
-
4、drop、truncate、delete
-
数据和表对象全部删除:drop
-
-- 格式 drop table 表名; -- 举个栗子: DROP TABLE test0603;
-
-
只清空表内全部数据(不能回滚):truncate
-
-- 格式 truncate table 表名; -- 举个栗子: TRUNCATE TABLE test0603;
-
-
只清空表内全部数据(不能回滚):delete
-
-- 格式 delete from 表名; -- 举个栗子: DELETE FROM test0603;
-