mysql数据库约束和默认

目录

约束:

1.null/not null约束

2.unique约束(唯一约束)

3.primary key约束(主键约束)

4.foreign key约束(外键约束)

5.check约束

默认:default


约束:

1.null/not null约束

null约束:字段可以为null、空

not null约束:字段不能为null、空

在数据库中字段默认为null,如果设置为not null,则在插入时必须写入数据否则报错。

-- 测试数据
CREATE TABLE student (
   id INT NOT NULL,  
   sn INT,
   name VARCHAR(20),
   qq_mail VARCHAR(20)
);

在插入:insert into student values (null,1,'张三',1234);
        则会报:ERROR 1048 (23000): Column 'id' cannot be null
在插入:insert into student(sn) values(1);
        则会报:ERROR 1364 (HY000): Field 'id' doesn't have a default value


2.unique约束(唯一约束)

unique约束:代表该字段值不能相同

举例:sn字段都插入3时,则会报:ERROR 1062 (23000): Duplicate entry '3' for key 'sn'

注意若字段值为null时可以重复


3.primary key约束(主键约束)

主键约束:可以唯一标识一条数据。(换种说法:利用主键可以精准定位到一条数据

比如:一个身份证号就可以当做主键,因为通过身份证号就能准确找到一个人的信息。

主键约束 = not null + unique约束,并且一张表中只允许有一个主键。

1.主键约束不能为null

2.主键约束不能重复

3.在mysql中,如果是整型主键还可以使用auto_increment(mysql关键字)从1开始自增,此时主键就可以不用插入,他会从1开始自动插入。(auto_increment会从数据库记录的最大值开始+1)


4.foreign key约束(外键约束)

外键约束:用来设计表与表的关系,表1(主表:主键)——表2(从表:外键),通过外键来建立(连接)表与表的关系

1.外键的取值范围:是主表主键的取值范围
比如:一张班级表:主键为班级id,班级id插入1班,2班,3班,那么你学生表中的外键就只能取值为 1班,2班,3班。(就好比学校开了1,2,3班,有个学生说他是4班的,这不合适吧.....)

2.在主表中主键不能重复,但是在从表中外键是可以重复的
比如:你还是班级表(主表)有三个班级id(主键)不能重复,但是学生表(从表)中班级id(外键)是可以重复的,多个学生对应一个班级。

3.关系中一对多还是一对一是有方向的。一个学生对应一个班级(学生到班级1对1),一个班级有多个学生(班级到学生1对多)

举例:设计一个学生表和班级表
语法格式:
-- 格式:foreign key(外键名) references 主表(主表的主键)

--   表的设计
-- 班级表
DROP TABLE IF EXISTS class;
CREATE TABLE class (
   id INT PRIMARY KEY auto_increment, -- 班级主键
   name VARCHAR(20)   -- 班级名称
);
insert into class 
values(1,'一班'),
      (2,'二班');
      
-- 学生表
DROP TABLE IF EXISTS student;
CREATE TABLE student (
   id INT PRIMARY KEY auto_increment, -- 学生主键
   name VARCHAR(20),  -- 学生名称
   class_id int, -- 外键名
   -- 格式:foreign key(外键名) references 主表(主表的主键)
   foreign key(class_id) references class(id) -- 外键 
);
insert into student 
values(11,'张三',1), -- 外键只能取主表中主键的1,2
      (12,'李四',2),
      (13,'王五',2);

结果:


 

5.check约束

check约束:用来检查字段值所允许的范围。

比如:你规定分数字段的值在0-100之间,当插入的数据为200时,则会报错。

mysql忽略check语句的功能(写不写都一样,不生效)


默认:default

某个字段设置了default及default值,那么在插入数据时给该字段赋值,则该字段会自动赋default值。若插入数据时,给该字段插入了值,那么该字段则为插入值,而不是default值

注意:null也可以插入到默认字段中。

1.未在该字段插入值,则自动插入default值

2.在该字段插入确定值,则为确定值

3.在该字段插入null,则为null值

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值