MySQL学习 ----- 表的约束

表的约束
约束的作用

保证数据库数据的完整性和一致性。通过数据类型在一定程度上可以起到约束作用,但这远远不够,因此引入了其它约束条件。

主键约束

主键 (primary key) 是一个列或者多个列的组合,其值能唯一的标志表中的一行。主键的关键字primary key。

主键的条件

  • 每个表只能定义一个主键
  • 主键标识表中唯一的一行,该2行的内容不能为NULL。
  • 多个列可以组成复合主键,但在复合主键中一个列名只能出现一次。

在创建表时设置主键约束

 create table tt1(
    -> id int primary key,
    -> name varchar(20)
    -> );
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

创建表时设置复合主键

 create table tt2(
    -> id int,
    -> name varchar(20),
    -> salary float(7,2),
    -> primary key(id,name)
    -> );
    
 +--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(20) | NO   | PRI | NULL    |       |
| salary | float(7,2)  | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

在修改表时,添加主键约束

alter table 表名称 add primary key(字段名称)
唯一键约束

唯一约束表示该字段所有的值不能重复,可以为NULL,但只能有一个为NULL,一个表中可以为多个字段添加唯一约束。唯一键的关键字为unique。

创建表时添加唯一约束

 create table tt4(
    -> id int unique,
    -> name varchar(10)
    -> );
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  | UNI | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

修改表时添加唯一键约束

alter table 表名称 add unique 字段名称

mysql> alter table tt1 add unique(name);

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  | UNI | NULL    |       |
+-------+-------------+------+-----+---------+-------+

删除唯一键约束

alter table 表名称 drop index 唯一键的字段名称

alter table tt1 drop index name;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
唯一键和主键的区别

一个表可以有多个字段设置为唯一键,但只能有一个或者一组字段整体设置为主键,主键不能为NULL,唯一键可以为NULL。

外键约束

外键用来在两个表之间建立链接,一个表可以有多个外键,外键只是本表的一个普通字段,但对应这与之关联的表的主键。

  • 将外键所在表称为从表。
  • 将与从表关联的表称为主表,主表中的主键与从表中的外键进行关联。

外键的约束条件

  • 定义一个表的外键时,主键必须已经存在或者是当前正在创建的表,如果是后一种情况,则从表和主表是同一个表。
  • 必须为父表定义主键
  • 外键中的值可以为null,只要外键中的非NULL值在指定的主键中可以找到,这个外键就是正确的。
    -设置外键的字段与设置主键的字段的数据类型要一致。
创建表时设置外键约束
foreign key (从表字段名称) references 主表名称 (主表主键名称)

主表:班级表

+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| class_id   | int(11)     | NO   | PRI | NULL    |       |
| class_name | varchar(20) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+

创建从表

mysql> create table student(
    -> stu_id int primary key,
    -> stu_name varchar(20) unique,
    -> class_id int,
    -> foreign key (class_id) references class(class_id)
    -> );
mysql> desc student;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| stu_id   | int(11)     | NO   | PRI | NULL    |       |
| stu_name | varchar(20) | YES  | UNI | NULL    |       |
| class_id | int(11)     | YES  | MUL | NULL    |       |
+----------+-------------+------+-----+---------+-------+
删除外键约束

待续。。。。。

修改表时添加外键约束
alter table 表名称 add foreign key (本表的字段名称) references 主表名称(主键名称)

mysql> alter table student add foreign key (class_id) references class(class_id);
默认值约束

默认值约束,指定某个字段的默认值,当插入数据时没有给该字段赋值,该字段的值即为默认值。

在创建表时设置默认值约束
l> create table person(
    -> name varchar(20),
    -> age int(5),
    -> country varchar(20) default '中国'
    -> );
在修改表时添加默认值约束
mysql> alter table person change country country varchar(20) default 'China';

mysql> desc person;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name    | varchar(20) | YES  |     | NULL    |       |
| age     | int(5)      | YES  |     | NULL    |       |
| country | varchar(20) | YES  |     | China   |       |
+---------+-------------+------+-----+---------+-------+
删除默认值约束

删除就是将默认值置NULL,本质和修改是一样的

mysql> alter table person change country country varchar(20) default NULL;

mysql> desc person;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name    | varchar(20) | YES  |     | NULL    |       |
| age     | int(5)      | YES  |     | NULL    |       |
| country | varchar(20) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+

非空约束

关键字 not NULL ,表明该字段的内容不能为NULL。

语法和默认值约束是一样的,只是关键字不同而已。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值