MySQL中常见约束与实践

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: MySQL中常见约束与实践

MySQL中列属性(主键、唯一键和自增等)使用实践

常见约束说明

12.png

MySQL不支持check约束,但可以使用check约束,而没有任何效果。唯一约束,允许出现多个空值:NULL。

约束位置说明


位置 支持的约束类型 是否可以起约束名
列级约束: 列的后面 六大约束语法语法都支持,但外键没有效果 不可以
表级约束: 所有列的下面 默认和非空不支持,其他支持 可以(主键没有效果)

【1】常见约束类型

约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。可以在创建表或者修改表时添加/修改约束。


修改表时添加约束语法

#添加列级约束
alter table 表名 modify column 字段名 字段类型 新约束;
#添加表级约束
alter table 表名 add 【constraint 约束名】 约束类型(字段名) 【外键的引用】;

① 主键约束 primary key

主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值。 每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。


创建表时添加主键约束

#列级约束
CREATE TABLE emp4(
id INT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(20));
#表级模式
CREATE TABLE emp5(
id INT NOT NULL AUTO_INCREMENT,
NAME VARCHAR(20),
pwd VARCHAR(15),
CONSTRAINT emp5_id_pk PRIMARY KEY(id));
#组合约束
CREATE TABLE emp6(
id INT NOT NULL,
NAME VARCHAR(20),
pwd VARCHAR(15),
CONSTRAINT emp7_pk PRIMARY KEY(NAME,pwd)
);


添加主键约束

ALTER TABLE stuinfo ADD PRIMARY KEY(id);
ALTER TABLE emp2 ADD CONSTRAINT my_emp_id_pk PRIMARY KEY(id);


删除主键约束

ALTER TABLE emp5 DROP PRIMARY KEY;


修改主键约束

ALTER TABLE emp5
MODIFY id INT PRIMARY KEY;


MySQL的主键名总是PRIMARY,当创建主键约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。

② 外键约束 foreign key


外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系 ,同一个表可以有多个外键约束。


从表的外键值必须在主表中能找到或者为空。当主表的记录被从表参照时,主表的记录将不允许删除。如果要删除数据,需要先删除从表中依赖该记录的数据,然后才可以删除主表的数据。还有一种就是级联删除子表数据。创建外键约束

CREATE TABLE dept(
dept_id INT AUTO_INCREMENT PRIMARY KEY,
dept_name VARCHAR(20)
);
CREATE TABLE emp(
emp_id INT AUTO_INCREMENT PRIMARY KEY,
last_name VARCHAR(15),
dept_id INT,
CONSTRAINT emp_dept_id_fk FOREIGN KEY(dept_id) REFERENCES dept(dept_id)
);


创建多列外键组合,必须使用表级约束:

CREATE TABLE classes(
id INT,
NAME VARCHAR(20),
number INT,
PRIMARY KEY(NAME,number));
CREATE TABLE student(
id INT AUTO_INCREMENT PRIMARY KEY,
classes_name VARCHAR(20),
classes_number INT,
FOREIGN KEY(classes_name,classes_number) REFERENCES classes(NAME,number));

删除外键约束

ALTER TABLE emp DROP FOREIGN KEY emp_dept_id_fk;


增加外键约束

ALTER TABLE emp2 ADD CONSTRAINT fk_emp2_dept2 
FOREIGN KEY(dept_id) REFERENCES dept2(id);


注意:外键约束的参照列,在主表中引用的只能是主键或唯一键约束的列。

关键字说明

–FOREIGN KEY: 在表级指定子表中的列
–REFERENCES: 标示在父表中的列
–ON DELETE CASCADE(级联删除): 当父表中的列被删除时,子表中相对应的列也被删除
–ON DELETE SET NULL(级联置空): 子表中相应的列置空

③ 唯一约束 unique

唯一约束是指定 table 的列或列组合不能重复,保证数据的唯一性。 唯一约束不允许出现重复的值,但是可以为多个 null 。 同一个表可以有多个唯一约束,多个列组合的约束。在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同。 唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束。


MySQL会给唯一约束的列上默认创建一个唯一索引。创建表时创建唯一约束:

CREATE TABLE USER(id INT NOT NULL,
NAME VARCHAR(25),
PASSWORD VARCHAR(16),
#使用表级约束语法
CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD));

创建表后添加约束

#表级约束
ALTER TABLE USER ADD UNIQUE(NAME,PASSWORD);
ALTER TABLE USER ADD CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD);
#列级约束
ALTER TABLE USER MODIFY NAME VARCHAR(20) UNIQUE;

删除约束:

ALTER TABLE USER DROP INDEX uk_name_pwd;


④ 非空约束 not null 与 默认值 default


非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。 Null 类型特征: 所有的类型的值 都可以是 null ,包括 int 、 float 等数据类型


创建非空约束

CREATE TABLE emp(id INT(10) NOT NULL,
NAME VARCHAR(20) NOT NULL DEFAULT 'abc',
sex CHAR NULL);


增加not null 约束:

#非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20)  NOT NULL;
#默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;

取消not null 约束:

ALTER TABLE emp MODIFY sex VARCHAR(30) NULL;


取消not null 约束,增加默认值:

ALTER TABLE emp MODIFY NAME VARCHAR(15) DEFAULT 'abc' NULL;

⑤ 创建表时设置约束

在列后面设置

CREATE TABLE stuinfo(
  id INT PRIMARY KEY,#主键
  stuName VARCHAR(20) NOT NULL UNIQUE,#非空
  gender CHAR(1) CHECK(gender='男' OR gender ='女'),#检查
  seat INT UNIQUE,#唯一
  age INT DEFAULT  18,#默认约束
  majorId INT REFERENCES major(id)#外键
);

在表字段下面设置

CREATE TABLE stuinfo(
  id INT,
  stuname VARCHAR(20),
  gender CHAR(1),
  seat INT,
  age INT,
  majorid INT,
  CONSTRAINT pk PRIMARY KEY(id),#主键
  CONSTRAINT uq UNIQUE(seat),#唯一键
  CONSTRAINT ck CHECK(gender ='男' OR gender  = '女'),#检查
  CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外键
);


⑥ check约束

MySQL可以使用check约束,但check约束对数据验证没有任何作用,添加数据时,没有任何错误或警告。

CREATE TABLE temp(
id INT AUTO_INCREMENT,
NAME VARCHAR(20),
age INT CHECK(age > 20),
PRIMARY KEY(id));


【2】删除约束

① 删除非空约束-modify

ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;


② 删除默认约束-modify

ALTER TABLE stuinfo MODIFY COLUMN age INT ;

③ 删除主键-drop

ALTER TABLE stuinfo DROP PRIMARY KEY;

④ 删除唯一-drop

ALTER TABLE stuinfo DROP INDEX seat;

⑤ 删除外键-drop

ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
12月前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
15天前
|
存储 安全 关系型数据库
MySQL数据库约束条件概述及其重要性讨论。
正确地实现并管理好各类紧缩条件将直接影响到企业信息管理水平与服务质量,在当今大数据背景下更显得格外重要;任何设计师都需要深刻理解其原理与运作机晰承担起责任使得所托管资料安全稳固同时又具备良好伸缩灵活度迎合日益复杂商务需求变动.
60 11
|
6月前
|
Ubuntu 关系型数据库 MySQL
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
278 16
|
10月前
|
NoSQL 关系型数据库 MySQL
2024Mysql And Redis基础与进阶操作系列(4-2)作者——LJS[含MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法]
24MySQL非空、唯一性、PRIMARY KEY、自增列/自增约束举例说明等详解步骤及常见报错问题对应的解决方法(4-2) 学不会你来砍我!!!
|
9月前
|
存储 SQL 关系型数据库
【MySQL基础篇】MySQL约束语法
文章介绍了MySQL中表的约束概念,包括非空、唯一、主键、默认和外键约束,以及如何在创建和修改表时指定这些约束。外键约束用于保持数据的一致性和完整性,文章通过示例展示了添加、删除外键的语法,并讨论了不同的删除/更新行为,如CASCADE和SETNULL。
【MySQL基础篇】MySQL约束语法
|
9月前
|
缓存 关系型数据库 MySQL
MySQL 索引优化与慢查询优化:原理与实践
通过本文的介绍,希望您能够深入理解MySQL索引优化与慢查询优化的原理和实践方法,并在实际项目中灵活运用这些技术,提升数据库的整体性能。
520 5
|
9月前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发:从基础到实践####
本文将深入探讨PHP与MySQL的结合使用,展示如何构建一个动态网站。通过一系列实例和代码片段,我们将逐步了解数据库连接、数据操作、用户输入处理及安全防护等关键技术点。无论您是初学者还是有经验的开发者,都能从中获益匪浅。 ####
|
10月前
|
关系型数据库 MySQL 数据处理
MySQL函数与约束
MySQL 提供了丰富的函数和强大的约束机制,用于数据处理和完整性维护。通过掌握这些工具,可以有效地管理和分析数据库中的数据,确保数据的一致性和准确性。无论是在日常数据查询中使用内置函数,还是在数据库设计中应用各种约束,都是确保数据库系统稳定、高效运行的关键。希望本文对您理解和应用 MySQL 函数与约束有所帮助。
104 1
|
10月前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
252 2
|
9月前
|
存储 关系型数据库 MySQL
MySQL(条件约束)
为了校验数据,让数据的正确性能够得到保证,约束,能够引进更多的检查操作,但是也会增加系统的成本开销

推荐镜像

更多