表头基本约束

1 问题

  1. 表头不允许赋null值练习
  2. 表头加默认值练习
  3. 表头加唯一索引练习

2 方案

约束是一种限制,设置在表头上,用来控制表头的赋值,包括以下几种:

  1. NOT NULL :非空,用于保证该字段的值不能为空。
  2. DEFAULT:默认值,用于保证该字段有默认值。
  3. UNIQUE:唯一索引,用于保证该字段的值具有唯一性,可以为空。
  4. PRIMARY KEY:主键,用于保证该字段的值具有唯一性并且非空。
  5. 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)