【数据库】MySQL数据库约束(六大约束)

目录

1.数据库约束

1.1约束类型 

1.2 非空约束(NOT NULL )

1.3 唯一约束(UNIQUE)

 1.4默认值约束(DEFAULT )

 1.5主键约束(PRIMARY KEY)

 1.6外键约束(FOREIGN KEY )


写在前面

  1. 文章截图均是每个代码显示的图。
  2. 数据库对代码大小写不敏感,可以大写也可以小写,不要把大小写混在一起使用,最好只使用大写或者只使用小写。

1.数据库约束

定义:约束故名思意就是对列进行限制约束。约束是在创建表的时候添加上去的,添加约束的目的是为了保证表中数据的合法性、有效性、完整性。

1.1约束类型 

  • 非空约束(NOT NULL )- 指示某列不能存储 NULL 值。
  • 唯一约束(UNIQUE) - 保证某列的每行必须有唯一的值。
  • 默认值约束(DEFAULT )- 规定没有给列赋值时的默认值
  • 主键约束(PRIMARY KEY) - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • 外键约束(FOREIGN KEY )- 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • 检查约束(CHECK) - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。

约束的使用方式 :在建表时,我们只需在建立每列时,在每列的后面加上约束类型即可。

1.2 非空约束(NOT NULL )

 create table student(
    id int not null,
    sn int,
    name varchar(20),
    qq_mail varchar(20)
    );
 desc student;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(11)     | NO   |     | NULL    |       |
| sn      | int(11)     | YES  |     | NULL    |       |
| name    | varchar(20) | YES  |     | NULL    |       |
| qq_mail | varchar(20) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+

上方代码就是将学生id加上了非空约束,这样学生id在填写时就不能为空了,为空会怎样,我们演示一下。

可以看出,当我们将学生id置空时,客户端报了错。若需要让以列成为必填项,这时非空约束就到了发挥作用的时候。 

1.3 唯一约束(UNIQUE)

mysql> create table student(
    -> id int not null,
    -> sn int unique,
    -> name varchar(20),
    -> sex varchar(5)
    -> );
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | NULL    |       |
| sn    | int(11)     | YES  | UNI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| sex   | varchar(5)  | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

我们在学号sn列加上了唯一约束,唯一约束的含义是:这一列不能出现重复的数据,例如(当有一个1时,我们又去添加一个1,这时就会报错。)

 1.4默认值约束(DEFAULT )

 create table student (
     id int not null,
     sn int unique,
     name varchar(20) default '无名氏',
     sex varchar(5)
     );

desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | NULL    |       |
| sn    | int(11)     | YES  | UNI | NULL    |       |
| name  | varchar(20) | YES  |     | 无名氏  |       |
| sex   | varchar(5)  | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

添加默认值约束的列在填写时为空时(这时需要添加到列名),会默认填入设置好的默认值。

还可以使用MySQL给的关键字(default),填这个也是会得到设置的默认值。

 1.5主键约束(PRIMARY KEY)

主键约束是非空约束和唯一约束的合集,它满足这两个约束的所有条件。 

create table student(
    id int primary key auto_increment,
    sn int unique,
    name varchar(20) default '无名氏',
    sex varchar(5)
    );

desc student;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| sn    | int(11)     | YES  | UNI | NULL    |                |
| name  | varchar(20) | YES  |     | 无名氏  |                |
| sex   | varchar(5)  | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

注意:对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1。一个表中只能有一个主键。

 例如:

 insert into student values 
    (1,10,'张三','男'),
    (null,11,'李四','男'),
    (100,12,'小红','女'),
    (null,13,'王五','男');

 代码先设置id是1,之后插入一条id设为空,因为有自增主键,客户端将这个自动设置为2,

当设置id为100时,再将id设为空,这次id没有根据顺序排列,而是用最大值+1编号。

 1.6外键约束(FOREIGN KEY )

外键用于关联其他表的主键或唯一键,对于两个具有关联关系的表来说,关联字段所在的表就是主表(父表),外键所在的表就是从表(子表)。

语法格式:

foreign key (字段名) references 主表(列)

 示例:

  • 创建班级表classes,id为主键 :
CREATE TABLE classes (
    id INT PRIMARY KEY auto_increment,
    name VARCHAR(20),
    `desc` VARCHAR(100)
);
  • 创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键,classes_id为外键,关联班级表id
CREATE TABLE student (
id INT PRIMARY KEY auto_increment,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20),
classes_id int,
FOREIGN KEY (classes_id) REFERENCES classes(id)
);

 注意:

  • 在两个表中相同字段,并且外键在主表中是主键或者是唯一字段
  •  主表的内容不能随意删除、修改,因为删除、修改操作会对从表造成影响。
  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃大白菜  

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值