mysql数据库-----表的约束

为了防止数据表中插入错误的数据,MySQL定义了一些维护数据库完整性的规则,即表的约束。常见约束分为5种,分别是默认约束、非空约束、主键约束、唯一约束和外键约束。外键约束比较复杂,涉及多表操作,将在后面的章节中讲解,本节主要讲解其余4种约束的使用方法。
1.2.1默认约束
默认约束用于为数据表中的字段指定默认值,即当在表中插入一条新记录时,如果没有给这个字段赋值,那么,数据库系统会自动为这个字段插入默认值。默认值是通过DEFAULT关键字定义的,其基本语法格式如下。
字段名 数据类型 DEFAULT默认值;
需要注意的是,BLOB、TEXT数据类型不支持默认约束。下面通过案例演示默认约束的使用及注意事项。
(1)创建my_default表,准备name和age两个字段进行测试,为age添加默认约束,设置默认值为18。

mysql> CREATE TABLE my_default (
    ->   name VARCHAR(10),
    ->   age INT UNSIGNED DEFAULT 18
    -> );

(2)使用DESC查看表结构,结果如下所示。…

mysql> DESC my_default;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| name  | varchar(10)      | YES  |     | NULL    |       |
| age   | int(10) unsigned | YES  |     | 18      |       |
+-------+------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

(3)插入记录进行测试,具体SQL语句及执行结果如下。
① 在插入记录时省略name和age字段

mysql> INSERT INTO my_default VALUES();
Query OK, 1 row affected (0.00 sec)

② 在插入记录时省略age字段

mysql> INSERT INTO my_default (name) VALUES('a');
Query OK, 1 row affected (0.00 sec)

③ 在age字段中插入NULL值

mysql> INSERT INTO my_default VALUES('b', NULL);
Query OK, 1 row affected (0.00 sec)

④ 在age字段中使用默认值

mysql> INSERT INTO my_default VALUES('c', DEFAULT);
Query OK, 1 row affected (0.00 sec)

⑤ 查询结果

mysql> SELECT * FROM my_default;
+------+------+
| name | age  |
+------+------+
| NULL |   18 |
| a    |   18 |
| b    | NULL |
| c    |   18 |
+------+------+
4 rows in set (0.00 sec)

在上述示例中,由于name和age字段没有设置非空约束,在插入记录时省略了这两个字段的值,则分别使用默认值NULL和18。为age字段设置默认值18后,插入NULL值,则保存结果为NULL,不使用默认值。在为有默认值的字段指定数据时,可以通过DEFAULT关键字直接指定其使用默认值。
(4)为现有的表添加或删除默认约束,具体SQL语句及执行结果如下。
① 删除默认约束

mysql> ALTER TABLE my_default MODIFY age INT UNSIGNED;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

② 添加默认约束

mysql> ALTER TABLE my_default MODIFY age INT UNSIGNED DEFAULT 18;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

通过上述示例可以看出,使用ALTERTABLE修改列属性即可添加或删除默认约束。

1.2.2非空约束
非空约束指的是字段的值不能为NULL,在MySQL中,非空约束是通过NOTNULL定义的,其基本语法格式如下。字段名数据类型NOT NULL;
为了让读者更好地理解,下面通过案例演示非空约束的使用及注意事项。
(1)创建my_ not_ null表,准备n1、n2和n3字段进行测试,为n2和n3设置非空约束,为n3设置默认值为18。

mysql> CREATE TABLE my_not_null (
    ->   n1 INT,
    ->   n2 INT NOT NULL,
    ->   n3 INT NOT NULL DEFAULT 18
-> );

(2)使用DESC查看表结构,结果如下所示。

mysql> DESC my_not_null;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| n1    | int(11) | YES  |     | NULL    |       |
| n2    | int(11) | NO   |     | NULL    |       |
| n3    | int(11) | NO   |     | 18      |       |
+-------+---------+------+-----+---------+-------+
3 rows in set (0.00 sec)
<

你可能感兴趣的:(mysql)