SQL基础3 —— 表的约束

约束用于限制加入表的数据的类型
可以在建表的时添加约束,也可以在已经存在的表上添加约束
通常约束有以下几种:
* 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值