MySQL 约束

MySQL的约束

※ 主键约束 :primary key

※ 唯一性约束:unique

※ 外键约束:foreign key

※ 非空约束:not null

※ 默认值约束:default

1. 添加主键约束 PRIMARY KEY

1. 直接在字段后添加:PRIMARY KEY

<字段名> <数据类型> PRIMARY KEY [默认值]

i.e.

mysql> create table test (id int(5) primary key, name varchar(10));

mysql> desc test ;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(5)      | NO   | PRI | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

2. 建完所有字段后单独指定:

mysql> create table test2
    -> (
    -> id int(5),
    -> name char(10),
    -> primary key(id)
    -> );
Query OK, 0 rows affected, 1 warning (0.02 sec)

3. 添加复合主键

将两个字段联合在一起,当成主键

mysql> create table test3
    -> (
    -> id int(5),
    -> name char(10),
    -> primary key(id,name)
    -> );
Query OK, 0 rows affected, 1 warning (0.02 sec)

4. 修改表的主键

1. 表中原来没有主键约束

mysql> alter table student
    -> add primary key(id);
Query OK, 0 rows affected (0.05 sec)

2. 原本表里有主键,需要先删除:

mysql> alter table student drop primary key , add primary key(name);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(5)      | NO   |     | NULL    |       |
| name  | varchar(10) | NO   | PRI | NULL    |       |
| class | varchar(5)  | YES  |     | NULL    |       |
| age   | int(3)      | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

2. 添加唯一约束 UNIQUE

建表时在字段后面添加

<字段名> <数据类型> UNIQUE

e.g.

mysql> create table test (id int(5) unique);

修改表的唯一约束

ALTER TABLE <数据表名> ADD CONSTRAINT <唯一约束名> UNIQUE(<列名>);

删除表的唯一约束

ALTER TABLE <表名> DROP INDEX <唯一约束名>;

3. 检查约束:CHECK

检查约束(CHECK)可以通过 CREATE TABLE 或 ALTER TABLE 语句实现

CHECK <表达式>

建表时创建

# 创建工资表,添加约束 工资>0,并且<30000
mysql> create table salarys
    -> (
    -> id int(6) primary key,
    -> salary float,
    -> name varchar(10),
    -> check(salary>0 and salary<30000)
    -> );
Query OK, 0 rows affected, 1 warning (0.03 sec)

修改表的约束

mysql> alter table salarys
    -> add constraint ck_name
    -> check(name<>'laowang')
    -> ;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

删除约束

ALTER TABLE <数据表名> DROP CONSTRAINT <检查约束名>;

4. 默认约束 DEFAULT

<字段名> <数据类型> DEFAULT <默认值>;

e.g.

创建一个默认字段为‘beijing’的表

mysql> create table test4
    -> (
    -> location varchar(10) default 'beijing'
    -> );
Query OK, 0 rows affected (0.03 sec)

修改表的默认约束

ALTER TABLE <数据表名> CHANGE COLUMN <字段名> <数据类型> DEFAULT <默认值>;

删除表的默认约束

ALTER TABLE <数据表名> CHANGE COLUMN <字段名> <字段名> <数据类型> DEFAULT NULL;

5. 非空约束 NOT NULL

建表时创建:

<字段名> <数据类型> NOT NULL;

修改表中约束:

ALTER TABLE <数据表名>
CHANGE COLUMN <字段名>
<字段名> <数据类型> NOT NULL;

删除约束

ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> NULL;

6. 外键约束:FOREIGN KEY

[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…]

建表时创建约束:

mysql> create table grade
    -> (
    -> gid int(10),
    -> record int(10),
    -> constraint fk_id
    -> foreign key(gid) references user(id)
    -> );
Query OK, 0 rows affected, 2 warnings (0.04 sec)

给表添加外键约束:

ALTER TABLE <数据表名> ADD CONSTRAINT <索引名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);

删除外键约束:

ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
posted @ 2019-11-28 15:50  wztshine  阅读(172)  评论(0编辑  收藏  举报