MySQL 约束(Constraint)
一.约束的概述
1.为什么要有约束?
为了保证数据的完整性
数据完整性(Date Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability).它是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出而造成无效操作或错误信息而提出的
数据完整性的具体内容:
实体完整性(Entity Integerity) 例如: 同一个表中,不能同时存在两条完全相同的记录
域完整性(Domain Integerity) 例如: 年龄范围为0~120,性别范围为:"男/女"
引用完整性(Referential Integerity) 例如: 员工所在的部门,在部门表中需要能找到这个部门
用户自定义完整性(User_defined_Integrity): 例如: 用户名唯一,密码不能为空
2.什么是约束?
约束是表级的强制规定,即对字段的限制
可在创建表时规定约束(通过CREATE TABLE语句),或在表创建之后通过AlTER TABLE语句规定约束
3.根据约束起的作用分为:
NOT NULL 非空约束,规定某个字段不能为空
UNIQUE 唯一约束,规定某个字段在表中是唯一的
PRIMARY KEY 主键约束,非空且唯一
FOREIGN KEY 外键约束
CHECH 检查约束
MYSQL中不支持CHECK约束,但可以使用而无任何作用
DEFAULT 默认值约束
4.如何查看表中的约束?
SELECT *
FROM infomation_schema.table_constraints
WHERE table_name = `表名称`
二.对约束的具体介绍
1.非空约束(NOT NULL)
作用: 限制某个字段/某个列的值不允许为空
特点:
默认所有类型的值都可以为NULL
非空约束只能出现在表对象上,只能某个列单独限制非空,不能组合使用
一个表可以由多个列分别限制非空
空字符串不等于NULL,0也不等于NULL
添加非空约束:
创建表时添加
CREATE TABLE test1(id INT NOT NULL,name VARCHAR(5) NOT NULL )
创建表后添加
ALTER TABLE test1 MODIFY email VARCHAR(10) NOT NULL
2.唯一性约束(UNIQUE)
作用: 用来限制某个字段/某列的值不能重复 允许出现多个空值: NULL
特点:
同一个表中可有多个唯一性约束
唯一约束可以是某一个列的值唯一,也可以是多个列的值唯一
唯一性约束允许值为空
在创建唯一性约束时,如果不给唯一约束命名,就会默认和列名相同
MySQL会给唯一约束的列上默认创建一个唯一索引
添加唯一性约束:
方式一:
ALTEER TABLE test2 ADD CONSRTAINT test_sal UNIQUE(salary);
方式二:
ALTER TABLE test2 MODIFY last_name VARCHAR(15) UNIQUE;
重复的唯一性约束
CREATE TABLE( #表级约束CONSTRAINT ur_user UNIQUE(name,password) )
4.主键约束(PRIMARY KEY)
作用: 用来唯一标识表中的一行记录
特点:
主键约束相当于"唯一约束 + 非空约束的组合",添加了主键约束的列不允许重复,也不能为空
一个表只能有一个主键约束
主键约束对应着表中的一列或多列
当创建主键约束时,系统会默认在所在的列或列的组合上建立对应的主键约束(能够根据主键查询,效率更高)
添加主键约束
删除主键约束:
ALTER TABLE 表名称 DROP PRIMARY KEY
删除主键约束,不需要指定主键名,因为一个表只有一个主键,删除主键约束后,非空还存在
5.自增列约束(AUTO_INCREMENT)
作用: 用于某个字段的值自增
特点:
一个表中最多只能有一个自增长列
自增长列约束的列必须是链列
自增约束列的数据类型必须为整数类型
如果自增列制定了0和NUll,会在当前最大指的基础上自增 如果自增列手动指定了具体值,直接赋值为具体值
添加自增类约束
CREATE TABLE test5(id INT PRIMARY KEY AUTO_INCREMENT,last_name VARCHAR(15) )
6.外键约束(FOREIGN KEY)
作用: 限定某个表中某个字段的引用完整性
主表和从表:
主表(父表): 被引用的表
从表(子表): 引用别的表
特点:
从表的外键列,必须引用主表的主键或唯一约束的键 因为被依赖的值必须是唯一的
在创建外键约束时,如果不给外键约束命名,默认不是列名,而是自动产生一个外键名
创建时先从后主,删除时先主后从
当主表中记录被从表参照时,主表的记录将不允许被删除,要删除先删除从表
在从表中指定外键约束,且一个表可以建立多个外键约束
当创建约束时,系统会默认在所在的列上建立对应的普通索引
删除约束后,必须手动删除对应的索引
添加外键约束:
#1.先创建主表
CREATE TABLE teams(NO INT PRIMARY KEY AUTO_INCREMENT COMMENT '球队编号', NAME VARCHAR(10) NOT NULL COMMENT '球队名称',address VARCHAR(10) NOT NULL COMMENT '所在地' );
#2.再创建从表CREATE TABLE players(id INT PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR(15),birthday DATE,high INT,wei INT,play CHAR(5) );
#3.添加外键约束
ALTER TABLE players ADD CONSTRAINT fk_players_id FOREIGN KEY (team_no) REFERENCES teams(NO);
注意:
在MySQL中,外键约束是有成本的,需要消耗系统资源,对于大并发的SQL操作,有可能会不适合,如大型网络的中央数据库,可能会因为外键约束的系统开销而变得非常慢
MySQL中允许不使用系统自带的外键约束,在应用层面完成检查数据一致性的逻辑.
MySQL 约束(Constraint)相关推荐
- [MySQL]约束(constraint)
文章目录 1. 约束 1.1 数据的完整性 1.2 约束 1.3 约束的分类 2. 查看表中的约束 3. 非空约束(NOT NULL) 3.1 作用 3.2 特点 3.3 添加非空约束 3.3.1 建 ...
- MySQL——约束(constraint)详解
该博客说说关于数据库中一个重要的知识点--约束 一.什么是约束 约束英文:constraint 约束实际上就是表中数据的限制条件 二.约束作用 表在设计的时候加入约束的目的就是为了保证表中的记录完整和 ...
- MySQL 约束类型
# MySQL 约束类型 约束实际上就是表中数据的限制条件,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性.比如name字段中要让其用户名不重复,这就需要添加约束.或者必须注册的时候 ...
- mysql 约束 域_MySQL-约束
约束是对表的强制规定 数据完成性:实体完整性.域完整性.参照完整性 实体完整性:保证表中的每一行数据在表中是唯一的 域完整性:数据库中的列必须满足某种特定的数据类型或约束.约束又分为强制域完整性越苏. ...
- 约束,MySQL约束,非空默认值,主键外键唯一自增,完整详细可收藏
文章目录 1. 约束(constraint)概述 2. 非空约束 3. 唯一性约束 4. PRIMARY KEY 约束 5. 自增列:AUTO_INCREMENT 6. FOREIGN KEY 约束 ...
- 常见的6种MySQL约束
摘要:一篇文章带你彻底了解MySQL各种约束 MySQL约束 <1> 概念 是一种限制,它是对表的行和列的数据做出约束,确保表中数据的完整性和唯一性. <2> 使用场景 创建表 ...
- MySQL约束那些事(超级详细,附带代码解析)
约束 1.约束概述 1.1 为什么需要约束 数据完整性是指数据的精确性和可靠性.它是防止数据库中存在不符合语义规定的数据和防止错误信息的输入输出造成无效操作或错误信息而提出的. 为了保证数据的完整性, ...
- 黑马程序员 JAVA WEB 第三节 MYSQL 约束
这是阿锃总结的第三节黑马程序员JAVA WEB视频的MYSQL约束部分的笔记.希望可以帮助跟我一样正在学习Java web的同学们.我们一起进步. b_d 若果有同学也想学习黑马程序员Java w ...
- JavaEE Day03 MySQL约束
MySQL约束--今日内容 1. SQL-(DDL,DML,DQL),讲完DQL查询语句的使用 排序查询 聚合函数 分组查询 分页查询 2. 约束 3. 多表之间的关系 4. 范式(用于更好地设计表, ...
最新文章
- 2014江苏省职称计算机,2014年江苏省职称计算机office多选题.doc
- 什么是物理层接口?—Vecloud 微云
- UVA 11100 The Trip, 2007
- 论文浅尝 - ACL2020 | 通过集成知识转换进行多语言知识图谱补全
- 《scikit-learn》交叉验证
- 婚宴座位图html5,婚礼小知识,婚宴座位怎么安排才不得罪人(主桌)
- cognos报表导出excel_17个新增功能点,让报表更惊艳!
- 转载“用USBOOT制作DOS启动盘”
- 最全勒索病毒解密工具
- 现金流量表编制(经典总结)
- shiro集成jwt
- vue中清除路由缓存
- [4G5G专题-44]:物理层-物理层信道编码与交织加扰以及LDPC码与Polar码比较
- 基于element-ui 搭建管理后台
- 如何评估项目的开发时间
- python实现双人版坦克大战游戏
- 美国 25 大高薪职业 11 为技术岗位
- OpenCV中文手册,非常实用,物有所值
- BUAA(2021秋)计算机硬件基础(软件学院计组)P4——用Logisim实现流水线CPU(含测试数据供自测)
- 设python中有模块m、如果希望同时导入m中的所有成员_python基础入门——深蓝学院课后习题(三)...