✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL约束的概念 | 非空约束 | 唯一约束 | 主键约束 | 自增长约束的分享✨
1.1 为什么需要约束
对于已经创建好的表,虽然字段的数据类型决定了所能存储的数据类型,但是表中所存储的数据是否合法并没有进行检查。在具体使用MySQL 软件时,如果想针对表中的数据做一些完整性检查操作,可以通过表的约束来完成。
数据完整性(Data Intergrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。他是防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出来的。
为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制,主要从以下四个方面考虑:
1.2 什么是约束
约束是表级的强制规定。
可以在创建表时规定约束(通过``CREATE TABLE语句),或者在表创建之后通过ALTER T ABLE`语句规定约束。
1.3 约束分类
1.3.1 根据约束的字段分类
1.3.2 根据约束的作用范围分类
区别
① 位置不同 :列级约束是写在列的后面,标记约束时写在所有字段的最后面
② 支持的约束类型不同:列级约束可以支持所有的约束类型,表级约束不能支持非空和默认
③ 列级约束不可以起约束名,表记约束可以起约束名(主键除外,主键使用的PRIMARY KEY)
1.3.3 根据约束的作用分类
完整性约束关键字 | 说明 |
---|---|
NOT NULL(NK) | 约束字段的值不能为空 |
DEFAULT | 设置字段的默认值 |
UNIQUE KEY(UK) | 约束字段的值是唯一(同一列不能出现相同的值) |
PRIMARAY KEY(PK) | 约束字段为表的主键,可以作为该表记录的唯一标识 |
AUTO_INCREMENT | 约束字段的值为自动增加 |
FOREIGN KEY(FK) | 约束字段为表的外键 |
CHECK() |
查看某个表已有的约束
SELECT * FROM information_schema.TABLE_CONSTRAINTS WHERE table_name='emp';
2.1 概念
当数据库表中的某个字段上的内容不希望设置为NULL时,则可以使用NK约束进行设置。即NK约束在创建数据库表时为某些字段加上“NOT NULL”约束条件,保证所有记录中该字段都有值。如果用户插入的记录中,该字段为空值,则数据库管理系统会报错。
2.2 特点
2.3 添加非空约束
CREATE TABLE table_name( 字段名 数据类型 NOT NULL, ... );
CREATE TABLE IF NOT EXISTS student ( id INT NOT NULL, name VARCHAR(10) NOT NULL, score DECIMAL(4,1) ) DESC student;
Tips1:如果我们现在执行下面这条语句将会报错(Field ‘name’ doesn’t have a default value)
,这是因为默认值为NULL,而我们又指定了该字段不能为空
INSERT INTO student(id,score) VALUES(3,79.5);
ALTER TABLE <表名> MODIFY 字段名 数据类型 约束;
Tips2:如果我们现在执行下面这条语句将会报错(Invalid use of NULL value),这是因为score字段中现在已经有空值了
ALTER TABLE student MODIFY score DECIMAL(4,1) NOT NULL;
2.4 删除非空约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 NULL; #或 ALTER TABLE 表名 MODIFY 字段名 数据类型;
3.1 概念
当数据库表中的某个字段上的内容不允许重复时,则可以使用UK约束进行设置。即UK约束在创建数据库表时为某些字段加上“UNIQUE”约束条件,保证所有记录中该字段上的值不重复。如果用户插入的记录中,该字段上的值与其他记录里该字段上的值重复,则数据库管理系统会报错。
3.2 特点
3.3 添加唯一约束
CREATE TABLE table_name( 字段名 数据类型 UNIQUE KEY, ... );
ALTER TABLE <表名> MODIFY 字段名 数据类型 UNIQUE;
ALTER TABLE <表名> ADD [CONSTRAINT 约束名] UNIQUE [KEY](字段名);
3.4 删除唯一约束
ALTER TABLE <表名> DROP INDEX <索引名>;
4.1 概念
当想用数据库表中的某个字段来唯一标识所有记录时,则可以使用PK约束进行设置。即 PK约束在创建数据库表时为某些字段加上“PRIMARY KEY”约束条件,则该字段可以唯一地标示所有记录。
在数据库表中之所以设置主键,是为了便于数据库管理系统快速地查找到表中的记录。在具体设置主键约束时,必须要满足主键字段的值是唯一、非空的。由于主键可以是单一字段,也可以是多个字段,因此分为单字段主键和多字段主键。
4.2 特点
主键约束相当于 唯一约束+非空约束,意味着不允许重复和NULL值
主键约束对应着表中的一列或者多列(复合主键)
如果是多列组合的复合主键约束,那么这些列都不允许为NULL值,并且组合的值不允许重复
MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没用
当创建主键约束时,系统默认会在所在的列或组合上建立对应的主键索引(能够根据主键查询的,就根据主键查询,效率更高),如果删除主键约束,主键约束对应的索引就自动删除了
需要注意一点的是,不要修改主键字段的值。因为主键是数据记录的唯一标识,如果修改了主键的值,就有可能会破坏数据的完整性。
4.3 单字段主键
CREATE TABLE table_name( 字段名 数据类型 PRIMARY KEY, ... );
Tips:如果我们现在执行下面这条语句将会报错(Multiple primary key defined)
CREATE TABLE IF NOT EXISTS test2 ( empno INT PRIMARY KEY, # 列级约束 ename VARCHAR(10) PRIMARY KEY, sal DECIMAL(7,1) )
只允许有一个!!!
ALTER TABLE <表名> ADD PRIMARY KEY(字段名);
4.4 多字段主键(复合主键)
当主键有多个字段组合而成时,需要通过SQL语句CONSTRAINT来实现,语法形式如下:
CREATE TABLE table_name( 字段名 数据类型, ... [CONSTRAINT 约束名] PRIMARY KEY(字段1,字段2...) );
在上述语句中,在字段定义完之后统一设置主键,PRIMARY KEY关键字括号中的字段可以有多个,需要通过逗号分割,用来实现设置多字段主键。
4.5 删除主键
ALTER TABLE <表名> DROP PRIMARY KEY;
5.1 概念
AUTO_INCREMENT是 MySQL 唯一扩展的完整性约束,当为数据库表中插入新记录时,字段上的值会自动生成唯一的ID。在具体设置AUTO_INCREMENT约束时,一个数据库表中只能有一个字段使用该约束,该字段的数据类型必须是整数类型。由于设置AUTO_INCREMENT约束后的字段会生成唯一的ID,所以该字段也经常会设置成PK主键。
5.2 特点
5.3 指定自增约束
CREATE TABLE table_name( 字段名 数据类型 PRIMARY KEY|UNIQUE AUTO_INCREMENT, ... );
ALTER TABLE <表名> MODIFY 字段名 数据类型 AUTO_INCREMENT;
5.4 删除自增约束
ALTER TABLE <表名> MODIFY 字段名 数据类型;
TIPS:如下图,删除empno等于3的数据,再插入一条数据,empno不是3而是4
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
近年来,机器学习方法凭借其理解海量数据和自主决策的能力,已在医疗保健、 机器人、生物学、物理学、大众消费和互联网服务等行业得到了广泛的应用。
《Python机器学习:基于PyTorch和Scikit-Learn》这本书的定位是把机器学习理论和工程实践结合起来,从而降低读者的阅读门槛。从数据驱动方法的基础知识到最新的深度学习框架,本书每一章都提供了机器学习代码示例,用于解决实际应用中的机器学习问题。
这是一本全面介绍在PyTorch环境下学习机器学习和深度学习的综合指南,可以作为初学者的入门教程,也可以作为读者开发机器学习项目时的参考书。
深入介绍了机器学习方法的基础知识,不仅提供了构建机器学习模型的说明,而且提供了构建机器学习模型和解决实际问题的基本准则。无论是机器学习入门新手,还是计划跟踪机器学习进展的研发人员,都可以将本书作为使用Python进行机器学习的不二之选。
感兴趣的小伙伴可以自行阅读购买
当当网购买链接:Python深度学习“四大名著”之一全新PyTorch版
✨✨本次送书两本,评论区抽两位小伙伴送书✨✨
活动时间:截止到2023-07-22 20:00:00
抽奖方式:利用程序进行抽奖。
参与方式:关注博主、点赞、收藏,评论区发布高质量评论(单账号最多评论三次)
中奖名单:
溜达的大象
杭电码农-NEO