约束用于限制加入表的数据的类型
可以在建表的时添加约束,也可以在已经存在的表上添加约束
通常约束有以下几种:
* not null: 非空约束,不接受null值,接受重复值
* unique: 唯一约束,不接受重复值
* default: 当不赋值的时候,会设置数值为默认值
* primary key: 主键约束,非空且唯一
* foreign key: 外键约束,数值必须为参照表主键的存在值
* check: 自定义约束
* auto_increment: 自动增长(只有添加主键约束或者唯一约束的列才能使用自动增长,且每张表只能有一个自动增长列)
非空约束(not null)
mysql> /*创建表时指定id列为非空约束,name列不加约束*/
mysql> create table t_test1 (id int not null,name varchar(20)) tablespace sqltestspace;
Query OK, 0 rows affected (0.01 sec)
mysql> desc t_test1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | NO | | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
mysql> /*插入测试数据(id列插入数值,name列不插入数值)*/
mysql> insert into t_test1(id) values (1);
Query OK, 1 row affected (0.00 sec)
mysql> select * from t_test1;
+----+------+
| id | name |
+----+------+
| 1 | NULL |
+----+------+
1 row in set (0.00 sec)
mysql> /*插入测试数据(id列不插入值,name列插入数值),出现报错*/
mysql> insert into t_test1(name) values ('Tina');
ERROR 1364 (HY000): Field 'id' doesn't have a default value
mysql> /*修改插入的测试数据指定id列的值*/
mysql> insert into t_test1(id,name) values (1,'Tina');
Query OK, 1 row affected (0.00 sec)
mysql> select * from t_test1;
+----+------+
| id | name |
+----+------+
| 1 | NULL |
| 1 | Tina |
+----+------+
2 rows in set (0.00 sec)
mysql> /*为表t_test1的name列添加非空约束,出现报错(含有空值的列是无法添加非空约束的)*/
mysql> alter table t_test1 modify name varchar(20) not null;
ERROR 1138 (22004): Invalid use of NULL value
/*修复数据name列的空值再次添加约束*/
mysql> update t_test1 set name='Jack' where name is null;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from t_test1;
+----+------+
| id | name |
+----+------+
| 1 | Jack |
| 1 | Tina |
+----+------+
2 rows in set (0.00 sec)
mysql> alter table t_test1 modify name varchar(20) not null;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t_test1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | NO | | NULL | |
| name | varchar(20) | NO | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
由上面的例子可以看出,not null 约束的列不接受 null 值
有null值的列不能添加 not null 约束
not null 约束接受重复值
唯一约束(unique)
mysql> /*创建表时指定id列为唯一约束,name列不加约束*/
mysql> create table t_test2 (id i