约束(constraint)

目录

一:约束的概述

1.1 为什么需要约束:

1.2 什么是约束:

1.3 约束的分类:

1.3 如何添加/删除约束:

1.4 查看某个表已有的约束:

二:非空约束

2.1 作用:

2.2 关键字 :

2.3 特点:

2.4 添加非空约束:

2.5 删除非空约束:

三:唯一性约束

3.1 作用:

3.2 关键字 :

3.3 特点:

3.4 添加唯一约束:

3.5 关于复合唯一约束:

3.5 删除唯一约束:

四:PRIMARY KEY 约束

4.1 作用:

4.2 关键字:

4.3 特点:

4.5 关于复合主键:

4.6 删除主键约束:(开发时不需要删除主键约束)

五:自增列:AUTO_INCREMENT

5.1 作用:

5.2 关键词:

5.3 特点和要求:

5.4 如何指定自增约束 : 

5.5 如何删除自增约束 :

5.6 MySQL 8.0新特性—自增变量的持久化:


一:约束的概述

1.1 为什么需要约束:

数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。

为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。从以下四个方面考虑:

  • 实体完整性(Entity Integrity) :例如,同一个表中,不能存在两条完全相同无法区分的记录
  • 域完整性(Domain Integrity) :例如:年龄范围0-120,性别范围“男/女”
  • 引用完整性(Referential Integrity) :例如:员工所在部门,在部门表中要能找到这个部门
  • 用户自定义完整性(User-defined Integrity) :例如:用户名唯一、密码不能为空等,本部门经理的工资不得高于本部门职工的平均工资的5倍。

1.2 什么是约束:

约束是表级的强制规定。
可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后通过 ALTER TABLE 语句规定约束。

1.3 约束的分类:

1.3.1 根据约束数据列的限制,约束可分为:

  • 单列约束:每个约束只约束一列
  • 多列约束:每个约束可约束多列数据

1.3.2 根据约束的作用范围,约束可分为:

  • 列级约束:只能作用在一个列上,跟在列的定义后面
  • 表级约束:可以作用在多个列上,不与列一起,而是单独定义

1.3.3 根据约束起的作用,约束可分为:

  • NOT NULL 非空约束,规定某个字段不能为空
  • UNIQUE 唯一性约束,规定某个字段在整个表中是唯一的
  • PRIMARY KEY 主键(非空且唯一)约束
  • FOREIGN KEY 外键约束
  • CHECK 检查约束
  • DEFAULT 默认值约束 

注意: MySQL不支持check约束,但可以使用check约束,而没有任何效果

1.3 如何添加/删除约束:

create table时添加约束

alter table时增加约束、删除约束

1.4 查看某个表已有的约束:

#information_schema数据库名(系统库)
#table_constraints表名称(专门存储各个表的约束)
SELECT * FROM information_schema.table_constraints 
WHERE table_name = '表名称';

二:非空约束

2.1 作用:

2.2 关键字 :

not null

2.3 特点:

  • 默认,所有的类型的值都可以是NULL,包括INT、FLOAT等数据类型
  • 非空约束只能出现在表对象的列上,只能某个列单独限定非空,不能组合非空
  • 一个表可以有很多列都分别限定了非空
  • 空字符串''不等于NULL,0也不等于NULL

2.4 添加非空约束:

(1)建表时:

CREATE TABLE 表名称(
 字段名 数据类型,
   字段名 数据类型 NOT NULL,  
   字段名 数据类型 NOT NULL
);

CREATE TABLE student(
 sid int,
   sname varchar(20) not null,
   tel char(11) ,
   cardid char(18) not null
);

(2)建表后:

alter table 表名称 modify 字段名 数据类型 not null;

alter table student modify sname varchar(20) not null;

alter table 表名称
modify 字段名 varchar(20) not null;

alter table test_notnull
modify salary varchar(20) not null;

2.5 删除非空约束:

alter table 表名称 modify 字段名 数据类型 NULL;#去掉not null,
相当于修改某个非注解字段,该字段允许为空
或 
alter table 表名称 modify 字段名 数据类型;#去掉not null,
相当于修改某个非注解字段,该字段允许为空

ALTER TABLE emp
MODIFY NAME VARCHAR(15) DEFAULT 'abc' NULL;

三:唯一性约束

3.1 作用:

用来限制某个字段/某列的值不能重复。

3.2 关键字 :

unique

3.3 特点:

  • 同一个表可以有多个唯一约束
  • 唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。(不包括null)
  • 唯一性约束允许列值为空
  • 在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同。
  • MySQL会给唯一约束的列上默认创建一个唯一索引。
     

3.4 添加唯一约束:

(1)建表时:

create table 表名称(
 字段名 数据类型,
   字段名 数据类型  unique,  
   字段名 数据类型  unique key,
   字段名 数据类型
);
create table 表名称(
 字段名 数据类型,
   字段名 数据类型,  
   字段名 数据类型,
   [constraint 约束名] unique key(字段名)
);

CREATE TABLE USER(
 id INT NOT NULL,
 NAME VARCHAR(25),
 PASSWORD VARCHAR(16),
 -- 使用表级约束语法
 CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD)
);

复合的唯一性约束:CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD)

注意:表示用户名和密码组合不能重复

(2)建表后指定唯一键约束:

#字段列表中如果是一个字段,表示该列的值唯一。如果是两个或更多个字段,那么复合唯一,即多个字段的组合是唯一的
#方式1:
alter table 表名称 add unique key(字段列表); 
#方式2:
alter table 表名称 modify 字段名 字段类型 unique;

alter table test_unique
add constraint test_unique_sal unique(salary);

alter table test_unique
modify last_name varchar(15) unique;

alter table test_unique
add constraint test_unique_il unique(id,last_name);

3.5 关于复合唯一约束:

create table 表名称(
 字段名 数据类型,
   字段名 数据类型,  
   字段名 数据类型,
    unique key(字段列表) #字段列表中写的是多个字段名,多个字段名用逗号分隔,表示那么是复合唯一,即多
个字段的组合是唯一的
);
#学生表
create table student(
 sid int, #学号
   sname varchar(20), #姓名
   tel char(11) unique key,  #电话
   cardid char(18) unique key #身份证号
);
#课程表
create table course(
 cid int,  #课程编号
   cname varchar(20)     #课程名称
);
#选课表
create table student_course(
   id int,
 sid int,
   cid int,
   score int,
    unique key(sid,cid)  #复合唯一
);

3.5 删除唯一约束:

  • 添加唯一性约束的列上也会自动创建唯一索引。
  • 删除唯一约束只能通过删除唯一索引的方式删除。
  • 删除时需要指定唯一索引名,唯一索引名就和唯一约束名一样。
  • 如果创建唯一约束时未指定名称,如果是单列,就默认和列名相同;如果是组合列,那么默认和()中排在第一个的列名相同。也可以自定义唯一性约束名。
#查看都有哪些约束
SELECT * FROM information_schema.table_constraints WHERE table_name = '表名'; 

ALTER TABLE USER 
DROP INDEX uk_name_pwd;

注意:可以通过 show index from 表名称; 查看表的索引

四:PRIMARY KEY 约束

4.1 作用:

用来唯一标识表中的一行记录。

4.2 关键字:

primary key

4.3 特点:

  • 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值。
  • 一个表最多只能有一个主键约束,建立主键约束可以在列级别创建,也可以在表级别上创建。
  • 主键约束对应着表中的一列或者多列(复合主键)
  • 如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
  • MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没用。
  • 当创建主键约束时,系统默认会在所在的列或列组合上建立对应的主键索引(能够根据主键查询的,就根据主键查询,效率更高)。如果删除主键约束了,主键约束对应的索引就自动删除了。
  • 需要注意的一点是,不要修改主键字段的值。因为主键是数据记录的唯一标识,如果修改了主键的值,就有可能会破坏数据的完整性。

(一)建表时添加约束: 

create table 表名称(
 字段名 数据类型  primary key, #列级模式
   字段名 数据类型,  
   字段名 数据类型  
);
create table 表名称(
 字段名 数据类型,
   字段名 数据类型,  
   字段名 数据类型,
   [constraint 约束名] primary key(字段名) #表级模式
);


insert into temp values(1,'张三');#失败
ERROR 1062 (23000): Duplicate(重复) entry(键入,输入) '1' for key 'PRIMARY'
insert into temp values(1,'王五');#失败
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
insert into temp values(3,'张三');#成功

列级约束:

CREATE TABLE emp4(
id INT PRIMARY KEY AUTO_INCREMENT ,
NAME VARCHAR(20)
);

表级约束:

CREATE TABLE emp5(
id INT NOT NULL AUTO_INCREMENT,
NAME VARCHAR(20),
pwd VARCHAR(15),
CONSTRAINT emp5_id_pk PRIMARY KEY(id)
);

(二)建表后添加约束:

ALTER TABLE 表名称 ADD PRIMARY KEY(字段列表);
 #字段列表可以是一个字段,也可以是多个字段,如果是多个字段的话,是复合主键

ALTER TABLE emp5 ADD PRIMARY KEY(NAME,pwd);

4.5 关于复合主键:

create table 表名称(
 字段名 数据类型,
   字段名 数据类型,  
   字段名 数据类型,
    primary key(字段名1,字段名2)  #表示字段1和字段2的组合是唯一的,也可以有更多个字段
);

#选课表
create table student_course(
 sid int,
   cid int,
   score int,
    primary key(sid,cid)  #复合主键
);

4.6 删除主键约束:(开发时不需要删除主键约束)

alter table 表名称 drop primary key;

ALTER TABLE student DROP PRIMARY KEY;

说明:删除主键约束,不需要指定主键名,因为一个表只有一个主键,删除主键约束后,非空还存在。

五:自增列:AUTO_INCREMENT

5.1 作用:

某个字段的值自增

5.2 关键词:

auto_increment

5.3 特点和要求:

  • (1)一个表最多只能有一个自增长列
  • (2)当需要产生唯一标识符或顺序值时,可设置自增长
  • (3)自增长列约束的列必须是键列(主键列,唯一键列)
  • (4)自增约束的列的数据类型必须是整数类型
  • (5)如果自增列指定了 0 null,会在当前最大值的基础上自增;如果自增列手动指定了具体值,直接 赋值为具体值。

5.4 如何指定自增约束 : 

(一)建表时:

create table 表名称(
 字段名 数据类型  primary key auto_increment,
   字段名 数据类型  unique key not null,  
   字段名 数据类型  unique key,
   字段名 数据类型  not null default 默认值, 
);
create table 表名称(
 字段名 数据类型 default 默认值 ,
   字段名 数据类型 unique key auto_increment,  
   字段名 数据类型 not null default 默认值,,
    primary key(字段名)
);

(二)建表后:

alter table 表名称 modify 字段名 数据类型 auto_increment;

5.5 如何删除自增约束 :

#alter table 表名称 modify 字段名 数据类型 auto_increment;#给这个字段增加自增约束
alter table 表名称 modify 字段名 数据类型; #去掉auto_increment相当于删除

5.6 MySQL 8.0新特性—自增变量的持久化:

  • 在MySQL 8.0之前,自增主键AUTO_INCREMENT的值如果大于max(primary key)+1,在MySQL重启后,会重置AUTO_INCREMENT=max(primary key)+1,这种现象在某些情况下会导致业务主键冲突或者其他难以发现的问题。 
  • MySQL 8.0将自增主键的计数器持久化到 重做日志 中。每次计数器发生改变,都会将其写入重做日志中。如果数据库重启,InnoDB会根据重做日志中的信息来初始化计数器的内存值。

大数据阿嘉
关注 关注
  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL数据库笔记6——约束Constraint
weixin_44384631的博客
05-26 1394
1.什么是约束Constraint)       在创建表的时候,可以给表的字段添加相应的约束,添加约束的目的是为了保证表中数据的合法性、有效性、完整性。 2.常见的约束 非空约束(not null):约束的字段不能为NULL。 唯一约束(unique):约束的字段不能重复。 主键约束(primary key,PK):约束的字段既不能为NULL,也不能重复。 外键约束(foreign key,FK) 检查约束(check):Oracle数据库有c
mysql基础之约束
cxyYeChen的博客
01-14 1364
mysql基础之约束概述非空约束(not null)作用和特点添加非空约束删除非空约束唯一约束(unique)作用和特点添加唯一约束复合唯一约束删除唯一约束主键约束(primary key)作用和特点添加主键约束复合主键约束删除主键约束自增列(AUTO_INCREMENT)作用和特点指定自增长列删除自增约束MySQL8新特性—自增变量的持久化外键约束(FOREIGN KEY)作用和特点添加外键约束删除外键约束检查约束(check)作用添加检查约束举例默认值约束(default)作用添加默认约束删除默认值约束
MySQL——约束(constraint)详解
热门推荐
浅然的专栏
03-22 17万+
该博客说说关于数据库中一个重要的知识点——约束 一、什么是约束 约束英文:constraint 约束实际上就是表中数据的限制条件 二、约束作用 表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效 比如name字段中要让其用户名不重复,这就需要添加约束。或者必须注册的时候需要添加邮箱等 三、约束种类 非空约束(not...
MySQL约束那些事(超级详细,附带代码解析)
haust_允谦的博客
02-10 1882
约束 1、约束概述 1.1 为什么需要约束 数据完整性是指数据的精确性和可靠性。它是防止数据库中存在不符合语义规定的数据和防止错误信息的输入输出造成无效操作或错误信息而提出的。 为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。从以下四个方面考虑: 实体完整性:例如,同一个表中,不能存在两条完全相同无法区分的记录 域完整性:例如,年龄范围是0~120,性别范围是男/女 引用完整性:例如:员工所在部门,在部门表中要能找到这个部门 用户自定义完整性:例如:用户名唯一、密码不能为空等,本部
约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏
叶绿体不忘呼吸
11-28 4323
文章目录1. 约束(constraint)概述2. 非空约束3. 唯一性约束4. PRIMARY KEY 约束5. 自增列:AUTO_INCREMENT6. FOREIGN KEY 约束7. CHECK 约束8. DEFAULT约束9. 面试 1. 约束(constraint)概述 1.1 为什么需要约束 数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息
代码添加约束constraint Demo
04-12
本示例"代码添加约束constraint Demo"专注于讲解如何在iOS项目中通过代码实现`Auto Layout`的约束,特别是利用`constraint 2.0`的优化进行高效布局。 首先,我们了解`Auto Layout`的基本概念。`Auto Layout`是Apple...
System Verilog的约束constraint
u010491580的博客
03-01 1万+
约束编程是system verilog中一个很强大的编程方法,它让我们创建的对象可以很轻松扩展功能或约束对象实现指定的功能
StstemVerilog中的约束 constraint
lc_2418059806的博客
01-12 5389
1)关键字:extends 2)constraint_mode() 3)soft 约束有冲突的话,不报错,加soft的约束优先级变低,以另一个为准 4)对pre_randomize() 方法的集成 5)rand_mode(0),关闭某个变量的随机,会保持初始值0. 6)inside关键字 7) constraint -> ,相当于if前置条件
约束(constraint)
weixin_73757147的博客
10-16 3154
若有两个表A、B,id是A的主键,而B中也有id字段,则id就是表B的外键,外键约束主要用来维护两个表之间数据的一致性。A为基本表,B为信息表。
查询表约束情况
wen_demon的专栏
06-25 804
如果要查看某个表定义的约束情况,可以使用以下语句
数据库常见约束
09-03
数据库在创建表的时候的一些常见约束,主要是主键与外键的语法规则
constraint用法总结 I
lengyue的专栏
08-23 5万+
Oracle中的约束简单介绍 约束   Including Constraints     在数据库中使用约束(constraints)是为了在该数据库中实施所谓的"业务规则"其实就是防止非法信息进入数据库,满足管理员和应用开发人员所定义的规则集.     ORACLE使用
mysql如何查看表约束,MySQL查看表中的约束
weixin_30209121的博客
03-18 2871
在 MySQL 中可以使用 SHOW CREATE TABLE 语句来查看表中的约束。查看数据表中的约束语法格式如下:SHOW CREATE TABLE ;【实例】创建数据表 测试_08 并指定 id 为主键约束,name 为唯一约束,deptId 为非空约束和外键约束,然后查看表中的约束,输入SQL语句运行结果如下。mysql> CREATE TABLE 测试_08(id INT(11) ...
mysql表的约束
最新发布
weixin_62870380的博客
09-05 815
mysql表的约束条件,以及边建表边限制约束条件,先建表在写约束条件,建完表后建立约束条件。
CONSTRAINT的用法举例
csnd32068的博客
04-02 230
当我们在建表时,我们会考虑的表的一些约束,下面简述几种约束的用法: SQL> select * from v$version where rownum<2; BANNER ---------------...
数据库【7】--- 数据完整性(constraint - 约束
樂小伍
08-19 1111
数据库【7】— 数据完整性(constraint - 约束) 文章目录数据库【7】--- 数据完整性(constraint - 约束)1. 非空约束 not null2. 唯一约束3. 检查约束4. 主键约束5. 外键约束插入:先主后从删除:先从后主一对多:一 的一方为主表-------------多 的一方为从表,通常在多的一方建 外键,去关联主键 数据添加、删除、修改到表之前对数据做检查,确保...
数据库约束的一些用法总结(constraint
weixin_44121790的博客
08-08 3889
数据库约束constraint
sql_constraint
zwk_9的专栏
10-22 3797
<br />约束种类<br />每一种约束的作用的了解演示。<br />   <br />   非空约束<br />   唯一性约束<br />   检查约束<br />   主键约束 --  每个表要有主键,唯一的标识一行数据,主键的特点非空并且唯一<br />   外键约束    外键引用的列一定是主键或有unique约束的列<br />   <br />     脚本(SCRIPT)<br />     列级约束并且非空约束(非空约束的特点是不能为null)<br />        create t
systemverilog中constraint中条件约束
07-12
在SystemVerilog中,constraint约束)用于定义信号或变量的取值范围或关系。它们通常用于验证设计的某些行为或属性。在constraint语句中,您可以使用条件来限制信号或变量的取值条件。 以下是一些常见的条件约束...
写文章

热门文章

  • 解决找不到依赖项的问题(根源直接解决) 30515
  • 二叉树(Java实现) 16714
  • 解决创建maven工程时,产生“找不到插件的错误” 10933
  • 解决Redis启动:未找到命令的问题 7651
  • Java学习笔记(一) 7402

最新评论

  • 使用clash等第三方代理工具后无法连接校园网络解决办法

    entiti: 你好 请问如果我已经和你一样在没有关闭代理的情况下卸载了clash 但我还从来没连接过校园网 那如果我不依照你的解决办法 之后能顺利连接校园网吗

  • 解决找不到依赖项的问题(根源直接解决)

    m0_64873548: 搞了半天最后是ali的仓库地址失效了 气死

  • 解决创建maven工程时,产生“找不到插件的错误”

    一只烤焦的热狗: 依赖插件版本过时,咋办

  • 数仓开发之DIM层

    爱喝咖啡的Tomcat: 文章写的真好,有个人可能也是借鉴别人的东西,反手就是vip文章 付费看,这种人真有意思

  • Flink中Table Api和SQL(二)

    指尖1993: 入表了,如何去掉前面的那个值呢、

最新文章

  • 使用clash等第三方代理工具后无法连接校园网络解决办法
  • SSM之Spring(二)
  • SSM之Spring(一)
2024年1篇
2022年128篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家小店玻璃钢雕塑厂家艺术商场美陈销售朝弘玻璃钢雕塑玻璃钢仿铜理发师雕塑民权玻璃钢雕塑价格成都玻璃钢雕塑订制玻璃钢古铜人物雕塑商场中庭美陈吊饰3d模型泰安商场美陈道具深圳走廊商场美陈厂家直销上海红色杯形玻璃钢花盆衢州景区玻璃钢雕塑制作保定批发玻璃钢雕塑性价比出众石家庄玻璃钢人物雕塑厂家许昌市玻璃钢雕塑红色玻璃钢人物雕塑费用宣城大型玻璃钢雕塑供应商黑龙江玻璃钢农耕雕塑阳江玻璃钢动物雕塑代理商玻璃钢雕塑如何制作贵阳水果玻璃钢雕塑价位淮南多彩玻璃钢雕塑六安公园玻璃钢雕塑销售电话鹰潭玻璃钢雕塑定做新乡玻璃钢浮雕雕塑定制多少钱江苏室内商场美陈哪里买大冶玻璃钢运动雕塑即墨玻璃钢卡通雕塑呼市商场室外美陈哪家好大连专业定做沈阳玻璃钢花盆香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化