MySQL表的约束

MySQL表的约束

1. 空属性

  • 两个值:null(默认的)和not null(不为空)
  • 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。
mysql> select null;
+------+
| NULL |
+------+
| NULL |
+------+
1 row in set (0.00 sec)

mysql> select null+1;
+--------+
| null+1 |
+--------+
|   NULL |
+--------+
1 row in set (0.00 sec)

案例:

创建一个班级表,包含班级名和班级所在的教室。

站在正常的业务逻辑中:

  • 如果班级没有名字,你不知道你在哪个班级
  • 如果教室名字可以为空,就不知道在哪上课

所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。这就是“约束”。

mysql> create table myclass(class_name varchar(20) not null, class_room varchar(20) not null);
Query OK, 0 rows affected (0.01 sec)

mysql> desc myclass;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| class_name | varchar(20) | NO   |     | NULL    |       |
| class_room | varchar(20) | NO   |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> insert into myclass values('class1', '101');    # 成功插入
Query OK, 1 row affected (0.01 sec)

mysql> insert into myclass (class_name)values('class2');    # 部分插入,剩余使用默认值
ERROR 1364 (HY000): Field 'class_room' doesnot have a default value

mysql> insert into myclass values('class2', null);    # 向添加了非空约束的字段传入 null 值
ERROR 1048 (23000): Column 'class_room' cannot be null

2. 默认值

默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。

mysql> create table myclass(
    -> class_name varchar(20) not null,
    -> class_room varchar(20) default '105');
Query OK, 0 rows affected (0.02 sec)

mysql> insert into myclass (class_name)values('class1');
Query OK, 1 row affected (0.01 sec)

mysql> select * from myclass;
+------------+------------+
| class_name | class_room |
+------------+------------+
| class1     | 105        |
+------------+------------+
1 row in set (0.00 sec)

通过上面案例我们发现,当数据在插入的时候不给该字段赋值时,就使用默认值。

注意:只有设置了default的列,才可以在插入值的时候,对列进行省略

3. 列描述 comment

列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。

mysql> create table person(name varchar(20) not null comment '姓名', sex enum('男', '女') default '男' comment '性别', age tinyint unsigned default 0 comment '年龄');
Query OK, 0 rows affected (0.04 sec)
# 注意:not null和defalut一般不需要同时出现,因为default本身有默认值,不会为空

# 使用 desc 查不到comment列描述内容
mysql> desc person;
+-------+-------------------+------+-----+---------+-------+
| Field | Type              | Null | Key | Default | Extra |
+-------+-------------------+------+-----+---------+-------+
| name  | varchar(20)       | NO   |     | NULL    |       |
| sex   | enum('男','女')   | YES  |     | 男      |       |
| age   | tinyint unsigned  | YES  |     | 0       |       |
+-------+-------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

# 使用 show create table 可以查询
mysql> show create table person\G;
*************************** 1. row ***************************
       Table: person
Create Table: CREATE TABLE `person` (
  `name` varchar(20) NOT NULL COMMENT 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

螺蛳粉只吃炸蛋的走风

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

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

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

打赏作者

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

抵扣说明:

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

余额充值