【⑪MySQL | 约束(一)】概念 | 非空 | 唯一 | 主键 | 自增长约束

这篇具有很好参考价值的文章主要介绍了【⑪MySQL | 约束(一)】概念 | 非空 | 唯一 | 主键 | 自增长约束。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL约束的概念 | 非空约束 | 唯一约束 | 主键约束 | 自增长约束的分享


1. 约束(Constraint)概念

1.1 为什么需要约束

对于已经创建好的表,虽然字段的数据类型决定了所能存储的数据类型,但是表中所存储的数据是否合法并没有进行检查。在具体使用MySQL 软件时,如果想针对表中的数据做一些完整性检查操作,可以通过表的约束来完成。

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

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

  • 实体完整性(Entity Integrity)如:同一张表中,不能存在两条完全相同无法区分的记录
  • 域完整性(Domain Integrity)如:年龄范围0-120,性别范围 “男/女”
  • 引用完整性(Referential Integrity)如:员工所在部门,必须要在部门表中存在
  • 用户自定义完整性(User-defined Integrity)如:用户名唯一、密码不能为空等

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. 非空约束(NK)

2.1 概念

当数据库表中的某个字段上的内容不希望设置为NULL时,则可以使用NK约束进行设置。即NK约束在创建数据库表时为某些字段加上“NOT NULL”约束条件,保证所有记录中该字段都有值。如果用户插入的记录中,该字段为空值,则数据库管理系统会报错。

2.2 特点

  • 默认情况下,所有类型的值都可以是NULL
  • 一个表可以有很多字段指定非空约束
  • 空串" "不等于NULL,0也不等于NULL,NULL也不等于NULL

2.3 添加非空约束

  1. 创建表时
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;

【⑪MySQL | 约束(一)】概念 | 非空 | 唯一 | 主键 | 自增长约束,# MySQL,mysql,数据库

Tips1:如果我们现在执行下面这条语句将会报错(Field ‘name’ doesn’t have a default value)
,这是因为默认值为NULL,而我们又指定了该字段不能为空

INSERT INTO student(id,score) VALUES(3,79.5);

  1. 创建之后添加
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. 唯一约束(UK)

3.1 概念

当数据库表中的某个字段上的内容不允许重复时,则可以使用UK约束进行设置。即UK约束在创建数据库表时为某些字段加上“UNIQUE”约束条件,保证所有记录中该字段上的值不重复。如果用户插入的记录中,该字段上的值与其他记录里该字段上的值重复,则数据库管理系统会报错。

3.2 特点

  • 同一个表可以有多个唯一约束
  • 唯一约束允许值为NULL
  • 在创建唯一约束的时候,如果不给唯一约束命名,那么约束名就和字段名相同

3.3 添加唯一约束

  1. 创建表时添加
CREATE TABLE table_name(
	字段名 数据类型 UNIQUE KEY,
    ...
);
  1. 创建表后添加
  • 方法一
ALTER TABLE <表名> MODIFY 字段名 数据类型 UNIQUE;
  • 方法二
ALTER TABLE <表名> ADD [CONSTRAINT 约束名] UNIQUE [KEY](字段名);

3.4 删除唯一约束

  • 添加唯一约束的列上会自动创建唯一索引
  • 删除唯一约束只能通过删除唯一索引的方式删除
  • 删除时需要指定唯一索引名,唯一索引名和唯一约束名相同。
  • 如果创建唯一约束时未指定名称,如果是单列,就默认和列名相同;如果是组合列,那么默认和()中第一个列名相同。
ALTER TABLE <表名> DROP INDEX <索引名>;

4. 主键约束(PK)

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添加主键约束
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. 设置字段值自动增加(AUTO_INCREMENT)

5.1 概念

AUTO_INCREMENT是 MySQL 唯一扩展的完整性约束,当为数据库表中插入新记录时,字段上的值会自动生成唯一的ID。在具体设置AUTO_INCREMENT约束时,一个数据库表中只能有一个字段使用该约束,该字段的数据类型必须是整数类型。由于设置AUTO_INCREMENT约束后的字段会生成唯一的ID,所以该字段也经常会设置成PK主键。

5.2 特点

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

5.3 指定自增约束

  1. 方法一:创建表是指定
CREATE TABLE table_name(
	字段名 数据类型 PRIMARY KEY|UNIQUE AUTO_INCREMENT,
    ...
);
  1. 方法二:通过ALTER TABLE添加
ALTER TABLE <表名> MODIFY 字段名 数据类型 AUTO_INCREMENT;

5.4 删除自增约束

ALTER TABLE <表名> MODIFY 字段名 数据类型;

TIPS:如下图,删除empno等于3的数据,再插入一条数据,empno不是3而是4

【⑪MySQL | 约束(一)】概念 | 非空 | 唯一 | 主键 | 自增长约束,# MySQL,mysql,数据库

6. 总结赠书:Python深度学习“四大名著”之一全新PyTorch版

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
近年来,机器学习方法凭借其理解海量数据和自主决策的能力,已在医疗保健、 机器人、生物学、物理学、大众消费和互联网服务等行业得到了广泛的应用。
《Python机器学习:基于PyTorch和Scikit-Learn》这本书的定位是把机器学习理论和工程实践结合起来,从而降低读者的阅读门槛。从数据驱动方法的基础知识到最新的深度学习框架,本书每一章都提供了机器学习代码示例,用于解决实际应用中的机器学习问题。

【⑪MySQL | 约束(一)】概念 | 非空 | 唯一 | 主键 | 自增长约束,# MySQL,mysql,数据库

这是一本全面介绍在PyTorch环境下学习机器学习和深度学习的综合指南,可以作为初学者的入门教程,也可以作为读者开发机器学习项目时的参考书。
深入介绍了机器学习方法的基础知识,不仅提供了构建机器学习模型的说明,而且提供了构建机器学习模型和解决实际问题的基本准则。无论是机器学习入门新手,还是计划跟踪机器学习进展的研发人员,都可以将本书作为使用Python进行机器学习的不二之选。

感兴趣的小伙伴可以自行阅读购买
当当网购买链接:Python深度学习“四大名著”之一全新PyTorch版

✨✨本次送书两本,评论区抽两位小伙伴送书✨✨
活动时间:截止到2023-07-22 20:00:00
抽奖方式:利用程序进行抽奖。
参与方式:关注博主、点赞、收藏,评论区发布高质量评论(单账号最多评论三次)
中奖名单:
溜达的大象
杭电码农-NEO文章来源地址https://www.toymoban.com/news/detail-591673.html

到了这里,关于【⑪MySQL | 约束(一)】概念 | 非空 | 唯一 | 主键 | 自增长约束的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据库——MySQL AUTO_INCREMENT:主键自增长

    在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。 通过给字段添加  AUTO_INCREMENT  属性来实现主键自增长。语法格式如下: 默认情况下,AUTO_INCREMENT 的初

    2024年02月11日
    浏览(37)
  • 【postgresql 基础入门】表的约束(二) 唯一unique、非空not null、check、exclusion约束,原理机制以及多列组合约束

    ​ 专栏内容 : postgresql内核源码分析 手写数据库toadb 并发编程 个人主页 :我的主页 管理社区 :开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 在数据库中,数据类型可以限制数据存储的大小,也能在一定程度上限制存储的数据种类,但是对于数

    2024年04月08日
    浏览(58)
  • Mysql列的完整性约束详解(设置表字段的非空约束(NOT NULL, NK))

    文章目录 系列文章目录 一、设置表字段的非空约束(NOT NULL, NK) 1.简介 2.语句格式 总结 一、 设置表字段的非空约束(NOT NULL, NK)         当数据库表中的某个字段上的内容不希望设置为NULL时,可以使用NK约束进行设置。NK约束在创建数据库表时为某些字段上加上“NOT

    2023年04月26日
    浏览(50)
  • 【后端面经】MySQL主键、唯一索引、联合索引的区别和作用

    目录 0. 简介 1. 主键 2. 唯一索引 3. 联合索引 4. 索引对数据库操作的影响 5. 其他索引 5.1 普通索引 5.2 全文索引 5.3 前缀索引 6. 总结 7. 参考资料 索引是一类特殊的 文件 ,用来存储检索信息,使数据库查找更加快速。 主键是一类特殊的唯一索引,选择某一列元素作为主键,用

    2024年02月09日
    浏览(48)
  • Mysql-InnoDB索引:普通索引、主键索引、唯一索引、组合索引

    事务方面 InnoDB支持事务,MyISAM不支持事务。这是Mysql将默认存储引擎从MyISAM变成InnoDB的重要原因之一 外键方面 InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MyISAM会失败 索引层面 InnoDB是聚集(聚簇)索引,MyISAM是非聚集(非聚簇)索引。 MyISAM 支持 FULLTEXT 类型

    2024年02月03日
    浏览(54)
  • 【面试】Mysql主键索引普通索引索引和唯一索引的区别是什么?

    在 MySQL 中, 索引是在存储引擎层实现的, 所以并没有统⼀的索引标准, 由于 InnoDB 存储引擎在 MySQL数据库中使⽤最为⼴泛, 下⾯以 InnoDB 为例来分析⼀下其中的索引模型.在 InnoDB 中, 表都是根据主键顺序以索引的形式存放的, InnoDB 使⽤了 B+ 树索引模型,所以数据都是存储在 B+ 树

    2023年04月17日
    浏览(56)
  • Mysql 索引(三)—— 不同索引的创建方式(主键索引、普通索引、唯一键索引)

    了解了主键索引的底层原理,主键索引其实就是 根据主键字段建立相关的数据结构 (B+树),此后在 使用主键字段作为条件查询时,会直接根据主键查找B+树的叶子结点。 除了 主键索引外,普通索引和唯一键索引也是如此,只不过普通索引要稍微绕一点,下面会具体介绍。

    2024年02月03日
    浏览(40)
  • 一文彻底搞清楚MySQL的主键、外键、约束和各种索引

    主键用于唯一标识表中每一行数据,外键用于建立表与表之间关联关系,约束用于限制表中数据的规则,索引用于加速查询。 主键是一种用于唯一标识表中每一行数据的标识符。在Mysql中,主键可以是一个或多个列的组合,但是必须满足以下条件: 主键列的值必须唯一,不能

    2024年02月08日
    浏览(51)
  • 软件测试|MySQL主键约束详解:保障数据完整性与性能优化

    简介 主键(PRIMARY KEY)的完整称呼是“主键约束”,是 MySQL 中使用最为频繁的约束。一般情况下,为了便于 DBMS 更快的查找到表中的记录,都会在表中设置一个主键。 MySQL是一种广泛使用的开源关系型数据库管理系统,其支持多种数据约束,其中主键约束是其中最重要的之一

    2024年02月02日
    浏览(48)
  • 软件测试/测试开发/全日制|MySQL主键约束详解:保障数据完整性与性能优化

    简介 主键(PRIMARY KEY)的完整称呼是“主键约束”,是 MySQL 中使用最为频繁的约束。一般情况下,为了便于 DBMS 更快的查找到表中的记录,都会在表中设置一个主键。 MySQL是一种广泛使用的开源关系型数据库管理系统,其支持多种数据约束,其中主键约束是其中最重要的之一

    2024年02月19日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包