约束条件(constraint)「建议收藏」

约束条件(constraint)「建议收藏」1.为啥使用约束条件:约束条件也叫完整性约束条件,当对表中的数据做DML操作时会验证数据是否违反约束条件.如果违反了DML操作会失败.约束条件可以应用于表中的一列或几列,应用于整个表或几个表之间.约束条件分类:非空(NOTNULL),唯一(UNIQUE),主键(PRIMARYKEY),外键(FOREIGNKEY),检查(CHECK).其中NOTNULL只能应用于列.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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的同时把其对应的外键约束也删除了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182548.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数仓拉链表[通俗易懂]

    数仓拉链表[通俗易懂]拉链表一丶什么是拉链表拉链表是一种数据模型,主要是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。拉链表可以避免按每一天存储所有记录造成的海量存储问题,同时也是处理缓慢变化数据的一种常见方式。百度百科的解释:拉链表是维护历史状态,以及最新状态数据的一种表,拉链表根据拉链粒度的不同,实际上相当于快照,只不过做了优化,去除了一部分不变的记录,通过拉链表可以很方便的还原出拉链时点的客户记录。二丶拉链表的产生背景在数据仓库的

    2022年10月16日
    0
  • JAVA数据库连接池_java与数据库的连接怎么实现

    JAVA数据库连接池_java与数据库的连接怎么实现一般来说,Java应用程序访问数据库的过程是:  ①装载数据库驱动程序;  ②通过jdbc建立数据库连接;  ③访问数据库,执行sql语句;  ④断开数据库连接。publicclassDBConnection{ privateConnectioncon; //定义数据库连接类对象 privatePreparedStatementpstm; pr

    2022年9月17日
    0
  • String数组的创建

    String数组的创建string数组的定义有三种写法:String[]arr=newString[10];//创建一个长度为10的String类型数组。Stringarr[]=newString[10];Stringarr[]={“张三”,”李四”};前面两种写法是一样的,可以互换,但是建议使用前者String[]arr因为java是强类型语言,声明…

    2022年6月7日
    114
  • linux内存不足导致tomcat宕机

    linux内存不足导致tomcat宕机情况,正常运行的服务器,突然tomcat不能访问了因为服务器的内存是2g的,所以就怀疑是内存不够了,所导致开始排查ps-ef|greptomcat[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TTLyQ5EC-1585835537446)(E:\Workspaces\Markdown\linux\记一次内存不够的情况.assets\image-…

    2022年7月23日
    6
  • Unity | Cinemachine ClearShot Camera[通俗易懂]

    Unity | Cinemachine ClearShot Camera[通俗易懂]ClearShotCamera可以管理一组子虚拟相机,这些虚拟相机需要具有CinemachineCollider组件,ClearShotCamera可以实现角色被障碍物挡住时,虚拟摄像机的自动切换效果,如下所示,角色与Cam2被BoxCollider挡住时,虚拟相机由Cam2自动切换到Cam3。ClearShotCamera上有一个CinemachineClearShot组件,VirtualCameraChildren管理虚拟相机。CinemachineCollider既可以挂在所

    2022年5月28日
    29
  • MATLAB画折线图时自定义颜色

    MATLAB画折线图时自定义颜色有很多种数据的时候,MATLAB提供的颜色不够用,这里有一个可以自定义线条颜色并配置不同图例的MATLAB示例clear;clc;closeall;x=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21];y1=rand(1,21);y2=rand(1,21);y3=rand(1,21);y4=rand(1,21);y5=rand(1,21);y6=rand(1,21);y7=

    2022年6月8日
    155

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号