MySQL主键约束、唯一约束、外键约束、检查约束

MySQL中的四种键约束——PRIMARYKEY、UNIQUE、FOREIGNKEY和CHECK,保证数据的完整性和一致性。

PRIMARYKEY

主键用于唯一标识表中的数据,字段通常不能为空。
定义格式为:字段名是PRIMARYKEY或PRIMARYKEY(字段名)。
可以设置复合主键,但字段组合必须唯一。
自动递增整数字段用于自动编号,通常与主键一起使用。

演示

创建水果表时,主键块会阻止fno迭代,并且在尝试添加现有fno值时会报告错误。

异常

异常约束保证字段值不重复,但不允许出现多个NULL。
全字段唯一约束相当于主键。

演示

尝试在fruit_3表中添加重复的fname和NULLfcol,展示了异常块的作用。

外键

外键用于表之间的关系。
当主表删除数据时,从表对应的记录也会被删除。

演示

当班级表与学生表链接时,外键约束从表中的学号与主表中的班级号相匹配。

检查

检查约束定义行数据必须满足的条件,MySQL8.0及更高版本支持该条件。
例如,水果表的名称应包含酒,甜品大于或等于10。

显示

添加不符合检查条件的记录时,显示错误消息。

MySQL中的CK约束使用方法详解mysql中ck

MySQL中CK约束的使用详解MySQL是一种广泛使用的开源关系数据库管理系统。
MySQL中的CK约束可以用来限制表中特定列的值的范围。
本文详细介绍了MySQL中CK约束的使用,包括定义CK约束、创建CK约束、修改CK约束。
1、CK约束的定义CK约束是MySQL中约束的一种,全称为检查约束。
这允许限制表中列的值的范围,使得该列只能接受某些值。
CK约束是通过创建一个名为CHECK的标识符来实现的,该标识符用于定义约束。
CK约束的定义格式如下:CHECK(列名=值),其中列名是需要约束的字段名称,值是该字段可以接受的范围。
例如,要为表中的年龄列添加CK约束,使该列只能接受20岁以上的值,可以使用以下代码:ALTERTABLE`表名`ADDCHECK(`age`>=20);2.创建CK约束要在MySQL中创建CK约束,需要使用ALTERTABLE语句。
可以使用ALTERTABLE语句更改表结构。
可以使用ALTERTABLE语句添加、修改或删除表上的约束。
例如创建表并添加CK约束的代码如下:CREATETABLE`表名`(`id`int(11)NOTNULLAUTO_INCRMENT,`name`varchar(50)NOTNULL,`age`int(11)NOTNULL,PRIMARYKEY(`id`),CHECK(`age`>=20))ENGINE=InnoDBDEFAULTCHARSET=utf8;以上代码创建一个名为“tablename”的表,并向表中的年龄列添加CK约束,将年龄设置为20岁及以上。
3.更改CK约束如果需要更改CK约束的定义,可以使用ALTERTABLE语句。
当使用ALTERTABLE语句更改CK约束时,必须先删除原来的CK约束,然后添加新的CK约束。
例如,要将表中年龄列的CK约束更改为仅接受小于25岁的值,可以使用以下代码:ALTERTABLE`表名`DROPCHECK`age_constraint_1`;ALTERTABLE`表名`ADDCHECK(`age`上面的代码首先删除名为“age_constraint_1”的CK约束,然后添加一个新的CK约束限制:这个限制将年龄限制在25岁以下。
总结:CK限制是MySQL中非常有用的限制类型,它可以用来限制表中特定列的值的范围,您可以学习如何使用。
MySQL中的CK约束定义、创建和修改在实际开发中,我们可以根据需求设置表的CK约束,以保证数据的合法性和完整性。

MySQL怎么使用check约束

在数据库中,CHECK约束是指约束表的一个或某些列中允许的数据值或数据类型(用于限制某一列中的值的范围)。
在某些情况下,您可能需要输入指定范围内的字段。
例如,性别只能输入“男”或“女”,且余额必须大于0。
例如,您可能需要:作者表中的邮政编码列仅接受数字邮政编码。
除了编程控制之外,您还可以使用CHECK约束来规范化数据。
然而,并不是所有的mysql存储引擎都支持检查约束。
MySQL会解析check子句,但在插入数据时会忽略它,因此检查不起作用。
所以实现数据约束有两种方式:使用枚举类型、触发器等。
2.检查应用程序中的数据并插入。
ENUM用于限制插入的值,但此方法只能用于离散数据,不能用于范围数据。
创建一个测试表,并指定性别字段只能是“男”或“女”。
CREATETABLE`用户`(`id`INT(11)UNSIGNEDNOTNULLAUTO_INCRMENT,`name`VARCHAR(18)COLLATEutf8_estonian_ciNOTNULL,`性别`ENUM('男','女')COLLATEutf8_estonian_ciDEFAULTNULL,PRIMARYKEY(`id`))ENGINE=INNODBDEFAULTCHARSET=utf8COLLATE=utf8_estonian_ci测试:INSERTINTO`user`(`name`,`sex`)VALUES('秀吉','秀吉');结果:错误代码:1265Datatruncatedforcolumn'sex'atrow1例如,如果需要限制数据,使余额可以大于100,可以使用:这些是实现这一目标的触发因素。
DELIMITER$$CREATETRIGGER`测试`.`剩余_BeforeInsert`BEFOREINSERTON`测试`.`用户`FOREACHROWBEGINIF`用户`.`剩余`