mysql中约束电话号码_【MySQL】:MySQL中四大约束

目录

非空约束 NOT NULL

唯一约束 UNIQUE

主键约束 PRIMARY KEY配合主键的自动增长

外键约束 FOREIGN KEY

所有的关系型数据库都支持对数据表使用约束,在表上强制执行数据校验,保证数据的完整性。

MySQL数据库支持以下四种约束形式:

非空约束 NOT NULL

所有数值类型的值都可以为null。

空字符串和0都不等于null。

-- 头铁之后的报错信息:Column 'name' cannot be null

-- 1、创建表时添加约束

CREATE TABLE stu(

id INT,

NAME VARCHAR(20) NOT NULL

);

SELECT * FROM stu;

-- 2、表创建完毕之后,追加约束

ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

-- 3、 删除name的非空约束

ALTER TABLE stu MODIFY NAME VARCHAR(20);

唯一约束 UNIQUE

保证指定的列不允许出现重复值,但是可以存在多个null值。

-- 头铁之后的报错信息:Duplicate entry '1' for key 'phone_number'

-- 1、创建表时添加约束

CREATE TABLE stu(

id INT,

phone_number VARCHAR(20) UNIQUE

);

-- mySql中,唯一约束限定的列可以有多个null

-- 2、建表后追加唯一约束

ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;

-- 3、删除唯一约束

ALTER TABLE stu DROP INDEX phone_number;

主键约束 PRIMARY KEY

主键约束的功能相当于非空+唯一约束,既不允许出现重复,也不允许出现null。

每个表中最多允许有一个主键,唯一确定一行记录的字段。

-- 头铁之后的报错信息:Duplicate entry '1' for key 'PRIMARY'

-- 1、创建表时,添加主键约束

CREATE TABLE student(

id INT PRIMARY KEY,

NAME VARCHAR(20)

);

SELECT * FROM student;

-- 2、建表后,追加主键

ALTER TABLE student MODIFY id INT PRIMARY KEY;

-- 3、删除主键

ALTER TABLE student DROP PRIMARY KEY;

配合主键的自动增长

-- 自动增长,建议配合int类型的主键(如果不指定值,当前值为上一值加一)

CREATE TABLE student(

id INT PRIMARY KEY AUTO_INCREMENT,

phone_number VARCHAR(20)

);

-- 创建表之后,追加自动增长

ALTER TABLE student MODIFY id INT AUTO_INCREMENT;

-- 删除自动增长

ALTER TABLE student MODIFY id INT;

外键约束 FOREIGN KEY

外键约束用以通知数据库与表字段之间的对应关系,以维护数据的完整性。

-- 首先创建不含外键约束的“一对多”关系的两张表

CREATE TABLE dept(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(20)

);

INSERT INTO dept VALUES (NULL,'法师'),(NULL,'坦克'),(NULL,'剑客'),(NULL,'战士');

CREATE TABLE emp(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(20),

dept_id INT

);

INSERT INTO emp VALUES (NULL,'佐伊',1),(NULL,'扎克',2),(NULL,'亚索',3),(NULL,'盖伦',4);

一对多的关系是,通过emp表中的dept_id字段关联到dept表中的id字段,这样我们一看到这个英雄是什么序号,就可以通过多表查询,得到这个英雄具体的职业是啥。

在没有添加外键约束的情况下,可能会出现以下几种不合理的情况:

-- 不合理情况1:可以任意插入英雄,选择不存在的职业

INSERT INTO emp VALUES(NULL,'艾希',5);

-- 不合理情况2:在仍有英雄存在的情况下,删除这个职业

DELETE FROM dept WHERE id = 4;

很明显,都是非常无理取闹的请求,如何去解决呢,通过外键约束。

再来试着创建两个表,并且添加上外键约束:

-- 新建表,添加外键

CREATE TABLE dept(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(20)

);

INSERT INTO dept VALUES (NULL,'法师'),(NULL,'坦克'),(NULL,'剑客'),(NULL,'战士');

CREATE TABLE emp(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(20),

dept_id INT, -- 不是最后一行,注意加上逗号

FOREIGN KEY(dept_id) REFERENCES dept(id)-- 添加外键约束(emp中的dep_id字段依赖于dept表中的id字段)

);

INSERT INTO emp VALUES (NULL,'佐伊',1),(NULL,'扎克',2),(NULL,'亚索',3),(NULL,'盖伦',4);

这个时候再搞一搞无理取闹的要求试试,这个时候就不可了,会报错呢。

-- Cannot add or update a child row: a foreign key constraint fails (xxx省略)

-- Cannot delete or update a parent row: a foreign key constraint fails (xxx省略)

(ps:我发现数据库的报错信息都非常直接,每次都能一眼看出来错出在哪)

这时,如果想删除这个职业,也不是不可以,你需要把这个职业里面代表的英雄全给删咯,这样就可以删除职业了。

-- 1.需要先删除战士英雄,也就是dept_id = 4的记录

DELETE FROM emp WHERE dept_id = 4;

-- 2.接着删除这个职业,成功删除

DELETE FROM dept WHERE id = 4;

当然,外键约束这玩意儿,其实还是蛮危险的,因为在数据量很大的情况下,由于错误设置外键,可能会导致很多数据进不了数据库,也有可能会导致很多功能难以扩展。

【MySQL】:MySQL中四大约束

标签:prim   对应关系   col   如何   phone   信息   导致   varchar   ica

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:https://www.cnblogs.com/summerday152/p/12431507.html

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 外键约束可以用来保证表与表之间的关系完整性。当我们在一个表定义了一个外键,它会引用另一个表的列,这个被引用的列必须是另一个表的主键或者是一个唯一键。在 MySQL ,外键约束可以跨越多个列。 下面是一个例子,演示如何在 MySQL 定义一个外键约束,跨越两个列: ``` CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, FOREIGN KEY (customer_id, order_date) REFERENCES customers(id, date) ); ``` 在这个例子,orders 表的 customer_id 和 order_date 列都被用来定义外键约束,它们分别引用了 customers 表的 id 和 date 列。这个外键约束确保了 orders 表的每一行都有对应的 customers 表的行,而且这个关联是基于 customer_id 和 order_date 两列的值。 在定义外键约束时,我们还可以指定 ON DELETE 和 ON UPDATE 规则,用来控制当关联表的某一行被删除或更新时,对应的行应该怎么处理。常用的规则包括: - CASCADE:当关联表的某一行被删除或更新时,对应的行也会被删除或更新。 - RESTRICT:当关联表的某一行被删除或更新时,如果该行有对应的行,则不允许删除或更新。 - SET NULL:当关联表的某一行被删除或更新时,对应的行的外键列会被设置为 NULL。 我们可以在定义外键约束时使用这些规则,例如: ``` CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, FOREIGN KEY (customer_id, order_date) REFERENCES customers(id, date) ON DELETE CASCADE ON UPDATE RESTRICT ); ``` 在这个例子,我们指定了 ON DELETE CASCADE 和 ON UPDATE RESTRICT 规则,表示当 customers 表的某一行被删除时,对应的 orders 表的行也会被删除;当 customers 表的某一行被更新时,只有当 orders 表的行没有被引用时,才允许更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值