约束

通过对列中的数据强制条件,约束提供了额外的数据完整性。每当操作值(插入、删除或更新)时,将检查约束,并拒绝违反约束的修改。 例如,UNIQUE约束要求列中的所有值彼此唯一(空值除外)。如果尝试写入重复的值,则约束将拒绝整个语句。

支持的约束

约束类型描述信息
CHECK对于布尔表达式,值必须返回TRUE或NULL。
DEFAULT value如果在INSERT语句中未为受约束列定义值,则将默认值写入该列。
FOREIGN KEY值必须与它引用的列中的现有值完全匹配。
NOT NULL值不能为空。
PRIMARY KEY值必须唯一标识每一行(每个表一行)。这就好像应用了NOTNULL和UNIQUE约束,并使用约束列自动为表创建索引一样。
UNIQUE每个非空值必须唯一。这还会使用受约束的列自动为表创建索引。

约束条件的使用

添加约束条件

1.创建主键约束

create table student (student_no int primary key);

2.创建表并在多列上添加主键约束

create table trans (cust_no int, cust_id int, primary key (cust_no,cust_id));

备注:默认和非空约束不能应用于多个列。

3.在已创建的表中添加约束条件

alter table trans add  constraint id_unique unique (cust_id);

备注:PRIMARY KEYNOT NULL 约束只能在CREATE TABLE创建时添加。

4.创建检查约束

create table commodities (commodity_id  int primary key,commodity_num int not null check (commodity_num > 0) );

5.创建默认值

create table produces (
    product_id  int,
    loc_id      int,
    product_num int  default 100,
    primary key (product_id, loc_id)
  );

6.唯一约束

create table login_info (
    login_id      int primary key,
    customer_id   int,
    login_date    timestamp,
    unique (customer_id, login_date)
  );

7.外键约束

  • 创建客户表
create table customers (cid int primary key, name string );
  • 创建菜单引用表
create table orders (
    oid           int primary key,
    customer_id   int not null REFERENCES customers (cid),
    orderaml      decimal(9,2),
    index (customer_id)
  );

创建主键时定义约束的名称

create table guar (guar_no int constraint another_name primary key);

列出约束条件

show constraints from <tablename>;

移除约束条件

约束类型操作
CHECKUse DROP CONSTRAINT
DEFAULT valueUse ALTER COLUMN
FOREIGN KEYUse DROP CONSTRAINT
NOT NULLUse ALTER COLUMN
PRIMARY KEY不支持删除主键操作。但是,可以使用此过程将表的数据移动到新表中。
UNIQUE不支持直接删除唯一约束操作。若要删除约束,请删除由该约束创建的索引,例如,删除索引my_unique约束。

改变约束条件

约束类型操作
CHECK开启事务,添加一个新的CHECK约束(ADD constraint),然后删除现有的CHECK约束(DROP constraint)。
DEFAULT value默认值可以通过ALTER COLUMN更改。
FOREIGN KEY开启事务,添加一个新的外键约束(ADD constraint),然后删除现有的外键约束(DROP constraint)。
NOT NULL不能更改NOT NULL约束,只能将其删除。但是,可以使用此过程将表的数据移动到新表中。
PRIMARY KEY无法修改主键。但是,可以使用此过程将表的数据移动到新表中。
UNIQUE开启事务,添加一个新的唯一约束(ADD constraint),然后删除现有的唯一约束(DROP constraint)。