详解MySQL完整性约束

2024-06-08 20:12

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

完整性约束条件是对字段进行限制,要求用户对该属性进行的操作符合特定的要求。如果不满足完整性约束条件,数据库系统将不再执行用户的操作。MySQL 完整性约束常用的操作有六大操作:

  1. 主键约束
  2. 唯一约束 unique
  3. 非空 not null
  4. 默认值约束(default)
  5. 自动增长约束(auto_increment)
  6. 外键约束(foreign key)

下面我们一一介绍一下:

主键约束 primary key

主键是表的一个特殊字段,能唯一标识该表中的每条信息。主键和记录的关系,如同身份证和人的关系。主键用来标识每个记录,每个记录的主键值都不同。身份证用来表明人的身份,每个人都具有唯一的身份证号。设置表的主键是指在创建表时设置表的某个字段为该表的主键。

主键的主要目的是帮助数据库管理系统以最快的速度查找到表的某一条信息。主键必须满足的条件就是主键必须是唯一的,表中任意两条记录的主键字段的值不能相同,并且是非空值。主键可以是单一的字段,也可以是多个字段的组合。

特点:

  • 唯一且不为空
  • 主键可以由一个字段组成,也可以由多个字段组成
  • 如果主键可以由一个字段组成既可以添加到列级也可以添加到表级,但是如果由多个字段组成只能添加到表级

使用:

单字段主键添加可以定义的时候跟在后面,也可以在定义完成以后跟在最后:

CREATE TABLE user(id INT PRIMARY KEY, ......
);CREATE TABLE user(id INT , ......
PRIMARY KEY(id)
);

多字段主键

CREATE TABLE user( id INT ,name VARCHAR(50) ,......                    
[CONSTRAINT id_name]PRIMARY KEY(id, name)
);

给已有表添加主键

语法:alter table 表名 add [constraint 主键约束名] primary key(字段名);

CREATE TABLE user(id INT,name VARCHAR(50),.....
);ALTER TABLE user ADD CONSTRAINT constraint  PRIMARY KEY(id);

自增键约束 auto_increment

AUTO_INCREMENT是MySQL唯一扩展的完整性约束,当向数据库表中插入新记录时,字段上的值会自动生成唯一的ID。

特点:

  • 当向数据库表中插入新记录时,字段上的值会自动生成唯一的ID,自动增长默认的初始值1,每增加一条记录,该字段的值会增加1;
  • 一个数据库表中只能有一个字段使用该约束;
  • 配合主键一起使用,该字段的数据类型必须是整数类型。
  • 由于设置AUTO_INCREMENT约束后的字段会生成唯一的ID,因此该字段也经常会同时设置成PK主键。
  • mysql8 中,AUTO_INCREMENT 必须设为键(主键、外键和唯一键均可)! 否则会报错!

使用:

CREATE TABLE user(id INT NOT NULL AUTO_INCREMENT, ......
);

给已有表添加自动增长约束

语法:alter table 表名 modify 字段名 字段类型 auto_increment;

删除自增长约束

语法:alter table 表名 modify 字段名 字段类型;

唯一键约束 unique

特点:

  • 可以取空值
  • 不能重复
  • 一个表里可以有多个唯一键。

使用:

一个唯一键:

CREATE TABLE user( id INT ,name VARCHAR(50) UNIQUE ,......                    
);

多个唯一键:

create table user(id int(8),name varchar(20),age int(2),sex varchar(1),constraint uk_user_id_name unique(id,name)
);

给已有表添加唯一约束

语法:alter table 表名 add [constraint 唯一约束名] unique(字段1,字段2...);

删除唯一约束

语法:alter table 表名 drop index 唯一约束名;

非空约束 not null

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

使用:

CREATE TABLE user(id INT NOT NULL , ......
);

默认值约束 default

当为数据库表中插入一条新记录时,如果没有为某个字段赋值,数据库系统就会自动为这个字段插入默认值。为了达到这种效果,可通过SQL语句关键字DEFAULT来设置。

使用:

CREATE TABLE user(tickname VARCHAR(50) DEFAULT ‘小美’, ......
);

给已有表添加默认值约束

语法:alter table 表名 modify 字段名 字段类型 default value;

删除默认值约束

语法:alter table 表名 modify 字段名 字段类型;

特点:

  1. 只能使用列级约束。
  2. 对于使用默认值约束,如果插入的数据为 “null”,则不会使用默认值,只有没有插入数据时候,才会使用默认值。

外键约束 foreign key

外键是表的一个特殊字段,外键约束是为了保证多个表(通常为两个表)之间的参照完整性,即构建两个表的字段之间的参照关系。

设置外键约束的两个表之间具有父子关系,即子表中某个字段的取值范围由父表决定。例如,两张表有关联关系,例如学生信息表(父表),考试信息表(子表);里面子表里面有张三的考试信息,它关联到了父表里面,要删除要一起删除,否则会有脏数据。

使用:

CREATE TABLE user( id INT ,name VARCHAR(50) ,......                    
[CONSTRAINT fk_name] FOREIGN KEY(id) REFERENCES formation(score)
);

其中,user参数是要设置外键的表名,id参数是要设置外键的字段,formation是父表的名称,score是父表中设置主键约束的字段名。

注意:目前外键,存储函数,存储过程,触发器…这些在后台开发过程中基本是不用的,因为这些限制逻辑或者代码逻辑是由mysql本身控制的,一个后端服务器的性能首先到瓶颈的是存储层模块,所以要把核心逻辑给mysql作,各个表的关系要放到业务层,不给mysql增加负担,外键约束会降低数据库的性能,大部分互联网应用程序为了追求速度,并不设置外键约束,而是仅靠应用程序自身来保证逻辑的正确性。

列级约束和表级约束

(1)对一个数据列建立的约束,称为列级约束

(2)对多个数据列建立的约束,称为表级约束

(3)列级约束既可以在列定义时声明,也可以在列定以后声明

(4)表级约束只能在列定义后声明

这篇关于详解MySQL完整性约束的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

java中反射(Reflection)机制举例详解

《java中反射(Reflection)机制举例详解》Java中的反射机制是指Java程序在运行期间可以获取到一个对象的全部信息,:本文主要介绍java中反射(Reflection)机制的相关资料... 目录一、什么是反射?二、反射的用途三、获取Class对象四、Class类型的对象使用场景1五、Class

golang 日志log与logrus示例详解

《golang日志log与logrus示例详解》log是Go语言标准库中一个简单的日志库,本文给大家介绍golang日志log与logrus示例详解,感兴趣的朋友一起看看吧... 目录一、Go 标准库 log 详解1. 功能特点2. 常用函数3. 示例代码4. 优势和局限二、第三方库 logrus 详解1.

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp