[MySQL]MySQL表的约束

这篇具有很好参考价值的文章主要介绍了[MySQL]MySQL表的约束。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

[MySQL]表的约束

1. 约束的概念

数据库通过技术手段限制数据的插入,使得插入的数据一定是符合规则的。

  • 约束是在创建表的时候定义的。

从程序员角度, 约束使得程序员必须得往数据库中插入符合条件的数据。

从数据库角度, 凡是插入进来的数据都是符合预期的。

其实数据类型就是一种约束,举个例子,将属性列的属性设定成无符号tinyint类型,能够插入该列的数据一定是在-128~127的这个范围内的。

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

约束的最终目标:保证数据的完整性和可预期性。

2. 空属性(null/not null)

数据库中null的含义是没有数据。not null的含义是不能没有数据。

  • 没有显示定义时,默认的约束是属性列可以为空(null)。

  • 可以显示定义属性列的数据不能为空(not null)。

  • 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。

空属性约束示例:

案例:

创建一个班级表,包含班级名和班级所在的教室。

站在正常的业务逻辑中:

如果班级没有名字,你不知道你在哪个班级 。

如果教室名字可以为空,就不知道在哪上课。

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

3. 默认值(default)

默认值是某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候, 用户可以选择性的使用默认值。默认值的使用类似于编程语言中的缺省值。

  • 默认值的生效:数据在插入的时候不给该字段赋值,就使用默认值。
  • 数据在插入的时候不给该字段赋值,并且表定义时没给默认值,无法直接插入。
  • 设定默认值不代表数据不可能为空,用户可能指定插入空值。
  • 系统默认的默认值为null。
  • 设定not null就没有系统默认值。

默认值约束示例:

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

非空属性和默认值的关系:

非空属性和默认值是相互补充的,非空属性约束的是用户不能插入空值,默认值约束的是用户忽略该列时插入什么数据(没设置会报错)。

4. 列描述(comment)

列描述没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA 来进行了解。

  • 列描述是给程序员看的。
  • 列描述不是硬性的约束,不会实际限制插入的数据。

列属性示例:

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

5. 填充零(zerofill)

填充零约束的作用是如果宽度小于设定的宽度,自动填充0。

  • zerofill的约束对象为数值类型。

  • zerofill只是对数据显示做了约束,不影响数据的存储。

zerofill示例:

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

6. 主键(primary key)

主键用来唯一的约束该字段里面的数据。主键所在的列通常是整数类型。

主键的作用是唯一确定表中的一条记录,就像使用身份证号这一属性就能确定姓名、性别、年龄等属性。

  • 主键不能为空。
  • 主键不能重复。
  • 一张表中最多只能有一个主键。
  • 可以在创建表时加主键约束,也可以在创建表后加主键约束。
  • 给表加主键约束最好在表使用前加主键约束。

主键约束示例:

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

复合主键:将表中的多个属性设为主键。

  • 复合主键是将多个属性组成的整体称为主键。

  • 复合主键中的属性只要有一个不是重复的,就不产生冲突。

复合主键约束示例:

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

7. 自增长(auto_increment)

自增长是对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值 +1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。

  • 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)。
  • 自增长字段必须是整数 。
  • 张表最多只能有一个自增长。
  • last_insert_id()函数(select last_insert_id())可以查看上次插入的 AUTO_INCREMENT 的值。
  • 自增长的默认初始值为1,也可以自行设置。

索引:

在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结 构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。 数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得 更快,可快速访问数据库表中的特定信息。

自增长约束示例 :

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

8. 唯一键(unique)

唯一键用于解决表中有多个字段需要唯一性约束的问题。

  • 唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。
  • 一张表中可以有多个唯一键。

**主键和唯一键的区别:**主键的作用是确定表中唯一一条记录,如果主键不是唯一的,通过主键就会查找到多个记录,因此主键必须唯一,如果主键为空,空和空无法比较,有多个空主键也就会无法确定唯一一条记录,因此主键不能为空。唯一键的作用是让某些属性在表中不重复,是为了满足某些数据需要唯一的要求,因此唯一键属性可以为空,因为没有实质数据做比较。实际上,主键只是在众多唯一键中选择出来的,然后加上了非空的限定,因为唯一键的属性非空就可以满足确定唯一一条记录的要求。举个例子,每个人有身份证号、姓名、年龄、电话号码(假设每个人一个电话号)等属性,每个人的身份证号是唯一的,电话号码是唯一的,使用表记录时身份证号、电话号码是不可以重复的,因为这是错误的记录,需要设置成唯一键,在此选中身份证号、电话号为主键都可以,因为如果它们非空的话都通过它们任一一个属性都能唯一确定一条记录,只不过我们一般选择身份证号为主键而已。

唯一键约束示例:

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

9. 外键(foreign key)

外键用于定义主表和从表之间的关系, 外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

  • 从表外键数据来源于主表的键。
  • 删除主表中某一个键所在的记录,需要从表中没有该键做的外键。
  • 外键使得表之间产生联系。
  • 外键使得表互相约束。

为了更好的了解外键在表与表之间的作用,我们看下面的案例:

有以下两个表用于统计信息,一个是学生信息表包含学号、姓名、所在班级号的属性,另一个是班级表包含班级号、班级名的属性,

一个学生属于一个班级。

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

这样的两个表可能会出现两种问题,学校表中所在班级是不存在的:

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

还有一种问题是,某个班级别去掉了,但是学生记录的班级是被去掉的班级:

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

没有外键的情况下,这两个表只是逻辑上有联系,实际上在数据库没有联系。

有了外键约束就能解决上面的问题,让学生表作为从表,班级表作为主表,学生表中的class_id作为外键数据来源于班级表的id:

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

设置这样的外键后,学生表中插入的记录中班级号一定来自于班级表,就不会出现学生所在班级不存在,删除班级表中的班级只能在学生表中没有学生在对应班级的情况下删除。两个表真正产生了联系,并且两个表相互约束。

外键约束示例:

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云

[MySQL]MySQL表的约束,MySQL,mysql,数据库,linux,centos,阿里云文章来源地址https://www.toymoban.com/news/detail-538818.html

到了这里,关于[MySQL]MySQL表的约束的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • MySQL数据库 12:约束

    MySQL数据库 12:约束

    在MySQL中, 约束是一种限制数据表中列值的规定 。保证数据库中的数据正确,有效性和完整性。MySQL中的约束有以下几种: 1. 主键约束(Primary Key Constraint) :主键是用于唯一标识表中每行记录的列。主键约束要求 每个主键列的值都是唯一的,且不能为NULL 。一个表只能有一

    2024年02月08日
    浏览(8)
  • MySQL:数据库的约束

    MySQL:数据库的约束

    目录 1.数据库约束 1.1 非空:not null 1.2 唯一:unique         ​​​​​​​ 1.3 默认值:default 1.4 列描述:comment 1.5 主键约束:primary key 1.6 外键约束 1.7 综合案例 2.插入查询结果 3.聚合函数 4.group by(分组查询) 关系型数据库的一个重要功能,就是需要保证数据的完整性

    2024年02月05日
    浏览(7)
  • 【MySQL】数据库的约束

    【MySQL】数据库的约束

    哈喽,大家好!我是保护小周ღ,本期为大家带来的是 MySQL 数据库中对表的约束, 主要有null (空约束),unique(唯一约束),primary key(主键约束),default(默认值约束), forelgn key(外键约束),check(检查约束),超多实例讲解,通俗易懂。 更多相关知识敬请期待:保护小周ღ *★,°*:

    2023年04月09日
    浏览(13)
  • [Linux][CentOs][Mysql]基于Linux-CentOs7.9系统安装并配置开机自启Mysql-8.0.28数据库

    [Linux][CentOs][Mysql]基于Linux-CentOs7.9系统安装并配置开机自启Mysql-8.0.28数据库

    目录 一、准备工作:获取安装包和相应工具 (一)所需安装包 (二)安装包下载链接 (三)在服务器上创建文件夹并上传安装包 二、安装MySql (一)删除系统自带的mariadb (二)安装MySQL依赖包libaio (三)创建MySQL组和用户并设置密码 (四)将MySQL目录的权限授给MySQL用户

    2024年03月25日
    浏览(12)
  • 【MySQL数据库 | 第十二篇】:约束

    【MySQL数据库 | 第十二篇】:约束

    在MySQL中, 约束是一种限制数据表中列值的规定 。保证数据库中的数据正确,有效性和完整性。MySQL中的约束有以下几种: 1. 主键约束(Primary Key Constraint) :主键是用于唯一标识表中每行记录的列。主键约束要求 每个主键列的值都是唯一的,且不能为NULL 。一个表只能有一

    2024年02月08日
    浏览(10)
  • MySQL数据库:数据库的约束以及数据的聚合、联合查询

    MySQL数据库:数据库的约束以及数据的聚合、联合查询

    目录 一.关系模型的简要概述 二.数据库的约束  2.1约束类型         2.2NULL约束 2.3 UNIQUE:唯一约束 2.4 默认约束 2.5 PRIMARY KEY:主键约束 2.6 FOREIGN KEY:外键约束 2.7 CHECK约束 三.高效率查询 3.1高效率查询的分类 3.2聚合查询 3.2.1聚合函数 3.2.2 GROUP BY子句 3.2.3HAVING 3.3.联合查询

    2024年02月10日
    浏览(31)
  • MySQL数据库基础(九):SQL约束

    MySQL数据库基础(九):SQL约束

    文章目录 SQL约束 一、主键约束 二、非空约束 三、唯一约束 四、默认值约束 五、外键约束(了解) 六、总结 PRIMARY KEY 约束唯一标识数据库表中的每条记录。 主键必须包含唯一的值。 主键列不能包含 NULL 值。 每个表都应该有一个主键,并且每个表只能有一个主键。 遵循原

    2024年02月19日
    浏览(15)
  • 【数据库】MySQL数据约束和表关系详解

    【数据库】MySQL数据约束和表关系详解

    目录 1.数据库约束 1.1约束类型 1.2NULL约束 1.3UNIQUE:唯一约束 1.4DEFAULT:默认值约束 1.5PRIMARY:主键约束 1.6FOREIGH KEY:外键约束 2.表的关系 2.1一对一 2.2一对多 2.3多对多 数据库中的数据保存在数据表中,在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候

    2024年02月04日
    浏览(12)
  • 【MySQL】一文带你了解数据库约束

    【MySQL】一文带你了解数据库约束

    作用: 数据库约束是用于限制数据输入或数据更新的规则。数据库约束确保在表中只能插入符合规则的数据,以确保数据的完整性和一致性。 常见的数据库约束包括: 主键约束:用于唯一标识表中的每一行数据,确保数据唯一性和完整性。 外键约束:用于确保表之间数据的

    2024年02月08日
    浏览(45)
  • MySQL数据库 - 表的操作

    MySQL数据库 - 表的操作

    目录 一、创建表 二、创建表案例 1、显示当前使用的数据库名 2、创建表  2.1 MyISAM存储引擎表 2.2 InnoDB存储引擎表 三、查看表结构  四、修改表 1、新增列   2、修改列类型 3、修改列名 4、修改表名  5、删除列   五、删除表 表的操作至少会涉及如下两类SQL语句: • DDL(

    2024年02月13日
    浏览(11)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包