目录
前言:
真正约束字段的是数据类型,但是数据类型约束很单一,有时候需要一些额外的约束,更好的保证数据的合法性,表的约束很多,这里重点介绍以下几个
- null/not null
- default
- comment
- zerofill
- primary key
- auto_increment
- unique key
空属性:
- 值:null和not null
- 数据库默认基本字段都为空,但是实际开发要尽可能保证字段不为空,因为空数据没法参加运算
mysql> select null;
+------+
| NULL |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
mysql> select 1+null;
+--------+
| 1+null |
+--------+
| NULL |
+--------+
1 row in set (0.00 sec)
例如:创建一个班级表,包含班级名和班级所在教室
按正常业务逻辑来看:
- 如果班级没有名字,你就不知道你在哪个班级
- 如果教室名字为空,你就不知道在哪里上课
- 所以在设计数据库表的时候,一定要在表中限制,这就是约束
mysql> create table myclass(
-> class_name varchar(20) not null,
-> class_room varchar(10) not null);
Query OK, 0 rows affected (0.02 sec)
mysql> desc myclass;
+------------+-------------+------+-----+---------+-------+
| Field | Type |Null | Key | Default | Extra|
+------------+-------------+------+-----+---------+-------+
| class_name | varchar(20) | NO | | NULL | |
| class_room | varchar(10) | NO | | NULL | |
+------------+-------------+------+-----+---------+-------+
//插入数据时,没有给教室数据插入失败:
mysql> insert into myclass(class_name) values('class1');
ERROR 1364 (HY000): Field 'class_room' doesn't have a default value
默认值:
默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。
mysql> create table tt10 (
-> name varchar(20) not null,
-> age tinyint unsigned default 0,
-> sex char(2) default '男'
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> desc tt10;
+-------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| name | varchar(20) | NO | | NULL | |
| age | tinyint(3) unsigned| YES | | 0 | |
| sex | char(2) | YES | | 男 | |
+-------+---------------------+------+-----+---------+-------+
默认值的作用就是在插入时如果没有给该字段负值,就使用默认值
mysql> insert into tt10(name) values('zhangsan');
Query OK, 1