MySQL基础_10.约束

2024-06-09 02:36
文章标签 mysql 约束 基础 database

本文主要是介绍MySQL基础_10.约束,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 第一章、约束
    • 1.1 约束的定义
    • 1.2 非空约束
    • 1.3 唯一性约束
    • 1.4 主键约束
    • 1.5 自增列
    • 1.6 外键约束
    • 1.7 CHECK约束
    • 1.8 DEFAULT约束

第一章、约束

1.1 约束的定义

约束是对表中字段的限制。

约束按照作用范围可以分为:列级约束和表级约束
列级约束:声明在对应字段的后面
表级约束:在表中所有字段都声明完,在所有字段的后面声明

1.2 非空约束

1.作用
限定某个字段/列的值不为空

2.关键字

NOT NULL

3.特点

  • 所有类型的值都可以为NULL,包括INTFLOAT等数据类型
  • 非空约束只能出现在表对象的列上,只能某个列单独限制为非空,不能组合非空
  • ‘’空字符串不等同于NULL,0也不是NULL

1.3 唯一性约束

1.作用
限制某个字段/列的值不能重复,允许出现多个空值:NULL

2.关键字

UNIQUE

3.特点

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

4.举例

CREATE TABLE user(id INT,user_name VARCHAR(15),user_password VARCHAR(25),// 表级约束,复合的唯一索引CONSTRAINT uk_user_name_password UNIQUE(user_name,user_password)

1.4 主键约束

1.作用
用来唯一标识表中的一行记录

2.关键字

PRIMARY KEY

3.特点

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

1.5 自增列

1.作用
某个字段的值自增

2.关键字

AUTO_INCREMENT

3.特点和要求

  • 一个表最多只能有一个自增列
  • 当需要产生唯一标志或顺序值时,可设置自增长
  • 自增长列约束的列必须是键列(主键或唯一键列)
  • 自增约束的列的数据类型必须是整数类型

4.新特性

CREATE TABLE test(id INT PRIMARY KEY AUTO_INCREMENT
);INSERT INTO test(id)
VALUES(0),(0);SELECT * FROM test;DELETE FROM test WHERE id = 2;INSERT INTO test(id)
VALUES(0);

在这里插入图片描述

此时再将id=3的记录删除,重启服务器,在MySQL5.7版本中再新增数据,id将从2开始,而MySQL8.0版本将从4开始。

  • 在MySQL5.7系统中,对于自增主键的分配规则,是由InnoDB数据字典内部一个计数器来决定的,而该计数器只在内存中维护,并不会持久化到磁盘中。当数据库重启时,该计数器会被初始化。
  • MySQL8.0将自增主键的计数器持久化到重做日志中。每次计数器发生变化,都会将其写入到重做日志中,如果数据库重启,InnoDB会根据日志中的信息来初始化计数器的内存值。

1.6 外键约束

1.作用
限定某个表的某个字段的引用完整性。
比如:员工表的员工所在部门的选择,必须在部门表能找到对应部分。
在这里插入图片描述

2.关键字

FOREIGN KEY

3 .主表和从表/父表和子表
主表(父表)︰被引用的表,被参考的表
从表(子表)︰引用别人的表,参考别人的表

4.特点

  • 从表的外键列,必须引用/参考主表的主键列或唯一约束列,因为被依赖/参考的值必须是唯一的
  • 在从表中指定外键约束,并且一个表可以建立多个外键约束
  • 从表的外键列与主表被参照的列名字可以不相同,但是数据类型必须一样,逻辑意义必须一致
  • 当创建外键约束时,系统默认会在所在列上建立对应的普通索引(根据外键查询效率很高)

5.使用示例

create table 主表名称(字段1 数据类型 primary key,字段2 数据类型 
);create table 从表名称(字段1 数据类型 primary key,字段2 数据类型,CONSTRAINT 外键约束名 FOREIGN KEY(从表的某个字段) references 主表名(被参考字段) 
);

6.注意事项

在MysQL里,外键约束是有成本的,需要消耗系统资源。对强大并发的SQL操作,有可能会不适合。比如大型网站的中央数据库,可能会因为外键约束的系统开销而变得非常慢。所以,MySQL允许你不使用系统自带的外键约束,在应用层面完成检查数据一致性的逻辑。也就是说,即使你不用外键约束,也要想办法通过应用层面的附加逻辑,来实现外键约束的功能,确保数据的一致性。

7.阿里开发规范

【强制】不得使用外键与级联,一切外键概念必须在应用层解决。

说明:(概念解释)学生表中的student_id是主键,那么成绩表中的student_id则为外键。如果更新学生表中的studrnt_id,同时触发成绩表中的student_id更新,即为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群﹔级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。

1.7 CHECK约束

1.作用
检查某个字段的值是否符合xx要求,一般指的是值的范围(比如salary > 2000 )。
2.关键字

CHECK

3.说明
MySQL5.7 可以使用check约束,但是check约束对数据验证没有任何作用。添加数据时,没有任何错误或警告,但是MySQL8.0 可以使用check约束。

1.8 DEFAULT约束

1.作用
给某个字段/列指定默认值,一旦设置默认值,在插入数据时,如果此字段没有显式赋值,则赋值为默认值。

2.关键字

DEFAULT

3.说明
为什么建表时,加not null default''default 0?
答:不想让表中出现null值。

  • 不好比较,null是一种特殊值,比较时只能用专门的is null和is not null来比较。碰到运算符,通常返回null;
  • 效率不高。影响提高索引效果;

这篇关于MySQL基础_10.约束的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1044019

相关文章

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

mysql索引四(组合索引)

单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引;组合索引,即一个索引包含多个列。 因为有事,下面内容全部转自:https://www.cnblogs.com/farmer-cabbage/p/5793589.html 为了形象地对比单列索引和组合索引,为表添加多个字段:    CREATE TABLE mytable( ID INT NOT NULL, use

mysql索引三(全文索引)

前面分别介绍了mysql索引一(普通索引)、mysql索引二(唯一索引)。 本文学习mysql全文索引。 全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用【分词技术】等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。 在MySql中,创建全文索引相对比较简单。例如:我们有一个文章表(article),其中有主键ID(

mysql索引二(唯一索引)

前文中介绍了MySQL中普通索引用法,和没有索引的区别。mysql索引一(普通索引) 下面学习一下唯一索引。 创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复。唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE,把它定义为一个唯一索引。 添加数据库唯一索引的几种

mysql索引一(普通索引)

mysql的索引分为两大类,聚簇索引、非聚簇索引。聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引则不同。聚簇索引能够提高多行检索的速度、非聚簇索引则对单行检索的速度很快。         在这两大类的索引类型下,还可以降索引分为4个小类型:         1,普通索引:最基本的索引,没有任何限制,是我们经常使用到的索引。         2,唯一索引:与普通索引

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)

ps基础入门

1.基础      1.1新建文件      1.2创建指定形状      1.4移动工具          1.41移动画布中的任意元素          1.42移动画布          1.43修改画布大小          1.44修改图像大小      1.5框选工具      1.6矩形工具      1.7图层          1.71图层颜色修改          1

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE