大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
1.为啥使用约束条件:
约束条件也叫完整性约束条件,当对表中的数据做DML操作时会验证数据是否违反约束条件.如果违反了DML操作会失败.约束条件可以应用于表中的一列或几列,应用于整个表或几个表之间.
约束条件分类:非空(NOT NULL),唯一(UNIQUE),主键(PRIMARY KEY),外键(FOREIGN KEY),检查(CHECK).
其中NOT NULL只能应用于列.假如要应用于表的话那么那个表就没啥用处了,所以自然是不行.约束条件跟其他数据库对象一样会有名字,可由用户自定指定.如果没指定则系统默认生成.格式为SYS_cXXX.其中XXX代表一些随机数字.
2.创建约束条件语法:
1.在创建表时指定约束条件:
CREATE TABLE [schema.]table_name(
column_name datatype[DEFAULT expr] [column_constraint],[,…],
[table_constraint]
);
其中column_constraint = [CONSTRAINT constraint_name] constraint_tyep;
table_constraint =[CONSTRAINT constraint_name] constraint_tyep(column,…)];
2.表创建完之后再指定约束条件:
ALTER TABLE table_name ADD [CONSTRAINT constraint_name] constraint_type(column,…);
3.非空约束(NOT NULL):
建表时约束并指定名字:CREATE TABLE arwen(ename char(10),eno int CONSTRAINT arwen_eno_nn NOT NULL).
建表时约束不指定名字:CREATE TABLE arwen(ename char(10),eno int NOT NULL).
建表后约束:CREATE TABLE arwen(ename char(10),eno int );
ALTER TABLE arwen MODIFY(eno int NOT NULL). —只有NOT NULL用MODIFY其他用ADD
创建约束后使用:
INSERT INTO arwen(ename) VALUES(‘good’);会出错,提示无法插入NULL.
4.唯一约束(UNIQUE):
建表时约束并指定名字:CREATE TABLE arwen(ename char(10),eno int CONSTRAINT arwen_eno_uk UNIQUE)或者
CREATE TABLE arwen(eno int ,ename char(10),CONSTRAINT arwen_eno_uk UNIQUE(eno))
建表时约束不指定名字:CREATE TABLE arwen(ename char(10),eno int UNIQUE).
建表后约束:CREATE TABLE arwen(ename char(10),eno int );
ALTER TABLE arwen ADD UNIQUE(eno)或者
ALTER TABLE arwen ADD CONSTRAINT arwen_eno_un UNIQUE(eno);
创建约束后使用:
INSERT INTO arwen VALUES(‘good’,12);连续执行两次,第二次会出错.
如果INSERT INTO arwen VALUES(‘good’,NULL);无论重复多少次都不会出错
5.检查(CHECK):
建表时约束并指定名字:CREATE TABLE arwen(ename char(10),eno int ,CONSTRAINT arwen_eno_check CHECK(eno>10))
建表时约束不指定名字:CREATE TABLE arwen(ename char(10),eno int ,CHECK(eno>10))
建表后约束:CREATE TABLE arwen(ename char(10),eno int );
ALTER TABLE arwen ADD CHECK(eno>10)或者
ALTER TABLE arwen ADD CONSTRAINT arwen_eno_check CHECK(eno>10)
创建约束后使用:
INSERT INTO arwen VALUES(‘good’,3);会出错.
如果INSERT INTO arwen VALUES(‘good’,13);正确
6.主键(PRIMARY):
建表时约束并指定名字:CREATE TABLE arwen(ename char(10),eno int ,CONSTRAINT arwen_eno_pk PRIMARY KEY(eno))
建表时约束不指定名字:CREATE TABLE arwen(ename char(10),eno int PRIMARY KEY)
建表后约束:CREATE TABLE arwen(ename char(10),eno int );
ALTER TABLE arwen ADD PRIMARY KEY(eno)或者
ALTER TABLE arwen ADD CONSTRAINT arwen_eno_pk PRIMARY KEY(eno)
创建约束后使用:
INSERT INTO arwen VALUES(‘good’,12);连续执行两次,第二次会出错.
如果INSERT INTO arwen VALUES(‘good’,NULL);连续执行两次,第二次会出错.
7.外键(FOREIGN KEY):
假如有表arwen(ename,eno)和表info(eno,location).在表info中eno是主键.则在表arwen中eno为外键.当insert数据到arwen中时.eno值必须是表info中的eno值.这有点像其他编程语言中的枚举类型了.你只能用里面的某一个,不能用别的.不过此处不同的是还可以插入NULL到arwen中的eno列
注意:arwen中的eno同时也能为主键.即某一列可同时为主键和外键.
CREATE TABLE info(location char(10),eno int PRIMARY KEY);
建表时约束并指定名字:CREATE TABLE arwen(ename char(10),eno int ,CONSTRAINT arwen_eno_fk FOREIGN KEY(eno) REFERENCES(info(eno))
建表时约束不指定名字:CREATE TABLE arwen(ename char(10),eno int FOREIGN KEYREFERENCES(info(eno))
建表后约束:CREATE TABLE arwen(ename char(10),eno int );
ALTER TABLE arwen ADDFOREIGN KEY(eno) REFERENCES(info(eno))或者
ALTER TABLE arwen ADD CONSTRAINT arwen_eno_fk FOREIGN KEY(eno) REFERENCES(info(eno))
创建约束后使用:
INSERT INTO info VALUES(‘hunan’,12);
INSERT INTO arwen VALUES(‘good’,13);–此处会出错.如果把13改成12就正确.
补充:表arwen中的eno同时为主键和外键,则就这样建表.
CREATE TABLE arwen(ename char(10),eno int PRIMARY KEY ,FOREIGN KEY(eno) REFERENCES(info(eno))
8.禁用和启用约束条件:
语法:
ALTER TABLE table_name
DISABLE | ENABLE CONSTRAINT constraint_name [CASCADE];
这里需要用到constraint_name如果你没有手动去命名,系统会默认生成,你需要去数据字典中查找才知道它是多少.
比如在查找表arwen上的约束条件:
SELECT constraint_name,constraint_type FROM user_constraints WHERE table_name = ‘ARWEN’;–记得加引号,而且arwen必须大写.
此处CASCADE用处:如果写上它的话表示你禁用主键约束也会同时禁用对应的外键约束,但重启主键约束时不会自动去重启外键约束,需单独去启动外键约束.
如果不写CASCADE.禁用主键约束时如果它有对应的外键约束则会出错.必须先删除或禁用对应的外键约束后才能再禁用主键约束.
9.修改,删除约束条件名称
假如你开始没给约束命名,在禁用和启动约束时又得去查数据字典,这多麻烦啊.这会你就后悔开始偷懒没命名了.不过幸好有改约束名字的方法,可以亡羊补牢啊.
语法:
ALTER TABLE table_name RENAME CONSTRAINT old_name TO new_name;
假如之前表arwen中某个约束条件系统生成的名字为SYS_C001234
想改成arwen_ename_pk
ALTER TABLE arwen RENAME CONSTRAINT SYS_C001234 TO arwen_ename_pk
语法:
ALTER TABLE table_name
DROP CONSTRAINT constraint_name [CASCADE];
例如:ALTER TABLE arwen DROP CONSTRAINT arwen_ename_pk;
如果是主键约束并且存在对应的外键约束.按上面的方法删除主键约束会出错.除非先删除外键约束.另外可以用如下方法.
例如:ALTER TABLE arwen DROP CONSTRAINT arwen_ename_pk CASCADE这样删除主键约束时把外键约束也同时删除了.
补充:不权是删除约束条件,删除表也是这样.如果存在外键约束.必须用CASCADE CONSTRAINT.
例如删除表arwen:
DROP TABLE arwen CASCADE CONSTRAINT;–删除表arwen的同时把其对应的外键约束也删除了
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182548.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...