0
点赞
收藏
分享

微信扫一扫

FPGA驱动FT601实现USB3.0通信测速试验 提供工程源码和QT上位机源码

约束:

在MySQL中,约束是一种限制数据表中列值的规定。保证数据库中的数据正确,有效性和完整性。MySQL中的约束有以下几种:

1. 主键约束(Primary Key Constraint):主键是用于唯一标识表中每行记录的列。主键约束要求每个主键列的值都是唯一的,且不能为NULL。一个表只能有一个主键。

2. 唯一约束(Unique Constraint)唯一约束要求列中的值各不相同,且可以为空(NULL)。一个表可以有多个唯一约束。

3. 非空约束(Not Null Constraint):非空约束要求列中的值不能为NULL

4. 外键约束(Foreign Key Constraint):外键是用于关联两个表的列。外键约束要求参照表中必须存在与被参照表中主键列相符的值。MySQL中的外键约束需要引用参照表中的主键列,从而保证参照表中的值是唯一的。

5.默认约束(Default constraint):保存数据的时候,如果未指定该字段的值,就采用默认值。

6.检查约束(Check constraints):保证字段值满足某一个条件

这些约束可用于对表中数据进行更全面、更安全的控制。例如,主键可以确保每个表行的唯一标识,唯一约束可以保证表中没有重复数据,非空约束可以避免NULL值,外键约束可以确保数据表之间的数据完整性。

b1a9c15ddc274cfa97d64cd6d6c4344a.png


 

约束时作用在字段上的,它可以限制字段的数据。在创建表或修改表的时候添加约束,一个字段我们可以添加多个约束。


案例:创建以下表:
1389709760384f379264f3609ff64e98.png

 代码:

create table user (
    id int primary key  auto_increment comment '年龄' ,
    name varchar(10) not null unique comment '姓名',
    age int check ( age>0 &&age<120) comment '年龄',
    status char(1) default '1' comment '状态',
    gender char(1) comment'性别'
)comment'用户表';

 运行结果:
3215f39d9bbb447587cf01e80a14a491.png

 我们通过插入数据来一个个验证约束的功能

1.id的主键约束:

insert into user(name, age, status,gender) values('tom',19,'1','男'),('koy',14,'1','女');

结果:

94d76f2b21c04e89a012eb9e5bd7ce5c.png

 我们发现即使不给id插值,他也会按照我们设定好的递增进行,也就是永远不会出现id重复的情况,而不会重复的id就作为每条数据的唯一标识。

2.name的非空约束:

insert into user(name, age, status,gender) value(null,17,'1','男');

结果:

由于非空约束这里会直接报错,但是要注意的是空字符不是空,这里的非空约束是指值不能为NULL;
 67277fff9e34411898297a579da599bc.png

 name的唯一约束:

insert into user(name, age, status,gender) value('koy',10,'1','女');

结果:前面已经有koy这个名字了,受到唯一约束的影响,此时如果我们名字重复,会直接报错。

5e065d01ff214ceda3e6eff87bc5d50c.png

 3.age的检查约束:

insert into user(name, age, status,gender) value('kot',130,'1','女');

结果:我们在前面定义的时候,约定了age的年龄范围在1-119之间,因此输入age=130会报错

d36dc4d159c545a1ba15b64fc047ce61.png

 4.status的默认约束:

默认约束采取有输入采取输入值,没输入采取默认值的做法。 

insert into user(name, age,gender) value('kob',15,'女');

结果:
 d6651ac3489c4316987e2fb24241479c.png

 5.外键约束:

添加外键:


在这里我们预先建立一张表:
76f86fa7390044f7ae1d9e1299a58ce0.png

 而他和我们之前那张表的关系为:

f0b7f37f593b45fe843e26f91716e69c.png

 这两张表之间的关系为我们的status需要通过第二张表来补全。我们把具有外键status的表称为是子表,具有外键指向的主键的表我们称为是父表。但是目前来讲,这两张表只在逻辑上有关系,但是在数据库层面并没有建立起任何关系,如果我们删除dept表中的1,user中status列中的1仍然存在,这个时候就需要给user中的status加上外键约束

创建外键的语法:

CREATE TABLE 表名(
    字段名 数据类型,
    .....
    [CONSTRAINT][外键名称]FOREIGN KEY(外键字段名) REFERENCES 主表 (主表列名)
);

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表 (主表列名);

案例:我t们为user中的status添加外键约束,使其与dept表相连。

alter table user add constraint fk_user_dept_id foreign key (status) references dept(id) ;

执行成功以后我们会发现status上方多出来一个蓝色的钥匙 ,就说明它已经是一个外键了

9743cbcc01eb400e9a34074ab1668ca4.png

 此时我们尝试在dept中删除id为1.a555ea5a93cf4dbc9324583fe7d05d37.png

 就会报错,因为此时user表中还有关于这个id的信息,因此我们的父表不可以对这个数据进行删除,我们也就在两个表之间建立了关联。

外键的删除:

ALTER TABLE 表名 DROP FORGEIGN KEY 外键名称

外键约束:
ed50acf1b9024271bf61b33e171f51ea.png

 语法:

alter table 表名 add constraint 外键名称 foreign key (外键字段) references 主表名(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE ;

 

结束!
 

 

 

举报

相关推荐

0 条评论