mysql中的约束条件_MySQL约束条件例子详解

本文详细介绍了MySQL中的约束条件,包括非空约束、默认值、唯一约束、主键约束、自增属性以及外键约束。通过实例展示了它们的创建与使用,解释了各约束的作用和应用场景,如主键作为数据存储的依据,外键用于建立表间关系等。
摘要由CSDN通过智能技术生成

1、no null(非空)

create table t1(

id int,

name char(4) not null

)

insert into t1 value(1,null);

insert into t1 value(1,'json');

344e3b9295ba9de86f9ddc3d05c3be78.png

b99d7304f5eb7e19fd3d9b32eb024cf4.png

2、default (默认)

create table t2(

id int,

name char(4),

sex enum('male','female','others') default 'male'

);

insert into t2(id,name) value(1,'json');

insert into t2 value(2,'alex','female');

a5e0e76576bf70ad74671180d24d4b0f.png

3、unique(唯一)

(1)单个唯一:

create table t3(

id int unique,

name char(4)

);

insert into t3 value(1,'json');

insert into t3 value(1,'hel');

insert into t3 value(2,'hel');

273ea9b8369d452a2e88820c45cabb31.png

cb67ae2516254565f6d04820c86360fc.png

(2)联合唯一(不能出现两个合并起来一样的,类似IP-port)

create table t4(

id int,

ip char(16),

port int,

unique(ip,port)

);

insert into t4 value(1,'127.0.0.1',8080);

insert into t4 value(2,'127.0.0.2',8080);

insert into t4 value(3,'127.0.0.1',8081);

insert into t4 value(4,'127.0.0.1',8080);

cd8a1e9486972b4592ec2bf29208d79b.png

4、primary key(主键)

(1)、从约束效果上看,primary key等价于 not null and unique,即非空且唯一。

create table t5(id int primary key);

insert into t5 value(1);

insert into t5 value(null);

insert into t5 value(1);

desc t5;

1e2d2ebf7304418255b798ea5971974e.png

(2)它除了有约束效果外,同时也是存储引擎Innodb(MySQL5.5版本及之后默认的存储引擎)组织数据的依据。即Innodb存储引擎在创建表的时候,必须要有primary key.

primary key 的作用类似于书的目录,可以提高查询效率

注意:

1、 一张表中有且只有一个主键,如果你没有设置主键,那么将会在表中从上往下寻找非空且唯一的字段,并将该字段升级为主键。

create table t6(

id int,

name char(4),

iphone int not null unique,

sid int not null unique

);

desc t6;

462f09590871f862b61e02b141a6b1a9.png

2、如果表中既没有主键,也没有非空且唯一的字段,那么Innodb将会采用内部提供的隐藏主键,但是,该主键无法提高查询速度,也看不到。

3、在表中通常都是以id这种类型做主键

(1)单个主键:

create table t7(

id int primary key,

name char(4)

);

(2) 联合主键:(多个字段联合作为主键,本质还是一个主键)

create table t8(

id int,

phone char(11),

name char(4),

primary key(id,phone)

);

desc t8;

5183df37a2a2945b68f63680bca4635d.png

5、auto_increment(自增)

注意:

1、auto_increment只能用在primary key主键上

create table t10(id int auto_increment);

a9f0b5546202f1d133588d6254cd3817.png

create table t9(

id int primary key auto_increment,

name char(4)

);

insert into t9(name) value('json'),('hello'),('world');

66e5f32382a2e2f902739625ab9e85ba.png

99b307a7f0a1bb83466dc21c17697165.png

2、清除表的数据的时候,如果使用delete from t9,则不会将自增器的计数归零,需要使用truncate t9,才可以实现清除表的数据同时也将自增器计数归零

delete from t9 #只负责清除表数据

truncate t9 #负责清除表数据同时将计数器归零。

a1590c8fda8109d809d4d78685a3c9b5.png

17c9cb0264884f70ca53cbee3e47d2b4.png

6、外键(foreign key)

外键是用来建立表与表之间的联系的

判断表之间的关系的时候,要站在两张表上来思考问题,比如员工表跟部门表:

员工表:一个员工是否对应多个部门

部门表:一个部门是否对应多个员工

得出结论:是一对多的关系

(1)一对多关系:

外键字段要建在多的一方

在创建表的时候,一定要先建立被关联表

#员工表跟部门表,之间的关系就是一对多关系

create table staff(

id int primary key auto_increment,

name varchar(32),

sex enum('female','male')

dep_id int,

foreign key(dep_id) references demp(id)

on update cascade #更新级联

on delete cascade #删除级联

);

#部门表

create table demp(

id int primary key auto_increment,

name varchar(32)

);

6eb109eb31f25888232bdc8f7cc00c06.png

1838102965c193ac8109321b12e56f1d.png

6c189ff2fd598acad9ad2a46b499d7f3.png

注意:一对多关系中,只能修改被关联的表(部门表),不能修改员工表中对应的部门。

cf69479bc3a800c35c850a7c4bc65d28.png

(2)多对多关系:

多对多关系的两张表,不能像一对多那样直接加外键,因为如果在两个表都加上一个外键,那么,这两张表都是关联表都无法创建成功。

解决方法:再单独创建一个表,来存储两张表之间的关系。

#学生表

create table student(

id int primary key auto_increment,

name varchar(16),

sex enum('male','female') default 'male'

);

insert into student(name,sex) value('alex','male'),('json','female'),('python','male')

#教师表

create table teacher(

id int primary key auto_increment,

name varchar(16),

subject varchar(16)

);

insert into teacher(name,subject) value('猪哥‘,'数学'),('浩哥','计算机'),('大佬','英语')

#关系表

create table s_t(

id int primary key auto_increment,

t_id int,

s_id int,

foreign key(s_id) references studnt(id)

on update cascade

on delete cascade,

foreign key(t_id) references teacher(id)

on update cascade

on delete cascade

);

insert into s_t(t_id,s_id) value(1,2),(1,3),(2,1)(2,2),(3,1),(3,3);

e361541269290d3d798654ef270dc1f1.png

6954cb8174879655d1fa704feec1b874.png

21480ec457e16a7f0d7dd7142b6a3488.png

(3) 一对一关系:

外键建在任何一方都可以,这里推荐建立在查询频率比较高的一方。

create table studentDetail(

id int primary key auto_increment,

addr varchar(16),

iphone varchar(16),

xueli varchar(16)

);

create table student1(

id int primary key auto_increment,

name varchar(16),

sex enum('male','fimeal') default 'male',

sD_id int unique,

foreign key(sD_id) references studentDetail(id)

on update cascade

on delete cascade

);

insert into studentDetail(add,iphone,xueli) value('广东','121','本科'),('湖南','111','专科'),('北京','222','博士');

insert into student1(name,sex,sD_id) value('alex','male',1),('val','fimeal',2),('hello','male',3);

ccee8bdbbeed91cdc9c4322f237a0c7a.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值