表头基本约束
1 问题
- 表头不允许赋null值练习
- 表头加默认值练习
- 表头加唯一索引练习
2 方案
约束是一种限制,设置在表头上,用来控制表头的赋值,包括以下几种:
- NOT NULL :非空,用于保证该字段的值不能为空。
- DEFAULT:默认值,用于保证该字段有默认值。
- UNIQUE:唯一索引,用于保证该字段的值具有唯一性,可以为空。
- PRIMARY KEY:主键,用于保证该字段的值具有唯一性并且非空。
- FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某些的值。
3 步骤
实现此案例需要按照如下步骤进行。
步骤一:表头不允许赋空值练习
//建表时给表头设置默认和不允许赋null值
mysql> create table db1.t31(
-> name char(10) not null ,
-> class char(7) default "nsd",
-> likes set("money","game","film","music") not null default "film,music" );
Query OK, 0 rows affected (0.43 sec)
//查看表头
mysql> desc db1.t31;
+-------+------------------------------------+------+-----+------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------------------------+------+-----+------------+-------+
| name | char(10) | NO | | NULL | |
| class | char(7) | YES | | nsd | |
| likes | set('money','game','film','music') | NO | | film,music | |
+-------+------------------------------------+------+-----+------------+-------+
3 rows in set (0.01 sec)
//表头name赋null值 报错
mysql> insert into db1.t31 values (null, null , null);
ERROR 1048 (23000): Column 'name' cannot be null
//表头likes赋null值 报错
mysql> insert into db1.t31 values ("bob", null , null);
ERROR 1048 (23000): Column 'likes' cannot be null
//符合约束不报错
mysql> insert into db1.t31 values ("bob",null,"money,game,film");
Query OK, 1 row affected (0.06 sec)
//不赋值的表头使用默认值赋值
mysql> insert into db1.t31(name) values("jim");
//根据需要自定义表头的值
mysql> insert into db1.t31 values ("lucy","nsd2108","game,film");
//查看表记录
mysql> select * from db1.t31;
+------+---------+-----------------+
| name | class | likes |
+------+---------+-----------------+
| bob | NULL | money,game,film |
| jim | nsd | film,music |
| lucy | nsd2108 | game,film |
+------+---------+-----------------+
3 rows in set (0.00 sec)
步骤二:表头加唯一索引练习
唯一索引 (unique):表头值唯一 , 但可以赋null 值
//建表
create table db1.t43 (姓名 char(10) , 护照 char(18) unique );
//查看表头 唯一索引标志UNI
mysql> desc db1.t32 ;
+--------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| 姓名 | char(10) | YES | | NULL | |
| 护照 | char(18) | YES | UNI | NULL | |
+--------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
//赋null值 可以
mysql> insert into db1.t32 values("bob",null);
//表头值重复不可以
mysql> insert into db1.t32 values("tom","666888");
Query OK, 1 row affected (0.08 sec)
重复赋值报错
mysql> insert into db1.t32 values("jim","666888");
ERROR 1062 (23000): Duplicate entry '666888' for key 't32.护照'
//不重复 可以
mysql> insert into db1.t32 values("jim","766888");
Query OK, 1 row affected (0.05 sec)
//查看表记录
mysql> select * from DB1.t43;
+------+--------+
| 姓名 | 护照 |
+------+--------+
| bob | NULL |
| tom | 666888 |
| jim | 766888 |
+------+--------+
3 rows in set (0.00 sec)