MySQL约束
约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。本节实验将在实践操作中熟悉 MySQL 中的几种约束。
1、Constraint
听名字就知道,约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。
在MySQL中,通常有这几种约束:
约束类型: | 主键 | 默认值 | 唯一 | 外键 | 非空 |
---|---|---|---|---|---|
关键字: | PRIMARY KEY | DEFAULT | UNIQUE | FOREIGN KEY | NOT NULL |
Primary Key
主键约束:建立此约束后,对指定列进行唯一约束,并且自动生成一个聚集的索引,外表可以通过外键的形式连接该列。
主键 (PRIMARY KEY)是用于约束表中的一行,作为这一行的标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要。行中的主键不能有重复且不能为空。
create tables employee ( id int(10) primary key, name char(20), )
还有一种特殊的主键——复合主键。主键不仅可以是表中的一列,也可以由表中的两列或多列来共同标识,比如:
mysql> create table department( -> id int(10) not null, -> title char(32) not null, -> constraint dep_pk primary key(id,title) -> ); Query OK, 0 rows affected
Default Value
默认值约束 (DEFAULT) 规定,当有 DEFAULT 约束的列,插入数据为空时,将使用默认值。
create table pepole( id int(10) not null auto_increment primary key, name char(20) default "abc" );
DEFAULT 约束只会在使用 INSERT 语句时体现出来,INSERT语句中,如果被 DEFAULT 约束的位置没有值,那么这个位置将会被 DEFAULT 的值填充.
Unique
唯一约束 (UNIQUE) 比较简单,它规定一张表中指定的一列的值必须不能有重复值,即这一列每个值都是唯一的。
create table Test ( id INT NOT NULL, name VARCHAR(30) unique, phoneNumber VARCHAR(20), password VARCHAR(32), primary key(id), unique key pn (phoneNumber) );
当 INSERT 语句新插入的数据和已有数据重复的时候,如果有 UNIQUE约束,则 INSERT 失败.
Foreign Key
外键 (FOREIGN KEY) 既能确保数据完整性,也能表现表之间的关系。
一个表可以有多个外键,每个外键必须 REFERENCES (参考) 另一个表的主键,被外键约束的列,取值必须在它参考的列中有对应值。
create table person( id int not null auto_increment primary key, username char(32) null , age int not null, deparment_id int not null, constraint fk_cc foreign key (deparment_id) references deparment(id) )
在 INSERT 时,如果被外键约束的值没有在参考列中有对应则INSERT 失败。并且在被其他表设为外键约束的键值在有其他数据关联的时候无法单独删除。
Not null
非空约束 (NOT NULL),听名字就能理解,被非空约束的列,在插入值时必须非空。
在MySQL中违反非空约束,不会报错,只会有警告。
总结
本节实验中通过一个数据库实例实验了主键、默认值、外键、非空、唯一这几种约束的特性,这几种约束都是最常见的,需要仔细理解每种约束的含义及使用场景。