约束
约束的作用:
定义规则
确保数据的完整性
五种约束:
1.非空约束
--在创建表的时候设置非空约束
CREATE TABLE table_name
(
column_name datatype NOT NULL , ....
) ;
--在修改表的时候添加非空约束(要是没有任何数据的情况下)
ALTER TABLE table_name MODIFY column_name datatype NOT NULL ;
--在修改表的时候去除非空约束
ALTER TABLE table_name MODIFY column_name datatype NULL ;
2.主键约束
确保表中的每一行数据的唯一行(唯一 , 非空)
一张表只能有一个主键约束
主键约束可以由多个字段组成(联合主键约束或复合主键)
2.1在创建表的时候设置主键约束
--方式一:单字段主键约束
CREATE TABLE table_name
(
column_name datatype PRIMARY KEY , ...
);
--方式二:多字段主键约束
CREATE TABLE table_name
(
column_name1 datatype ,
column_name2 datatype ,
...,
CONSTRAINT constraint_name PRIMARY KEY(column_name1, ...)
);
--例如:
create table user_info
(
id number(6,0) ,
name varchar2(20) ,
password varchar2(20) not null ,
email varchar2(30) not null,
constraint pk_id_name primary key(id, name)
);
--查找表的约束名:
SELECT constraint_name FROM user_constraints WHERE table_name = 'TABLE_NAME' ;
--例如
select constraint_name from user_constraints where table_name='USER_INFO' ;
2.2在修改表时添加主键约束
--修改时添加主键约束
ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIAMRY KEY(column_name1, ...) ;
--例如
alter table user_info1 add constraint pk_id_name primary key(id,name);
2.3更改约束名
--更改约束名
ALTER TABLE table_name RENAME CONSTRAINT old_constraint_name TO new_constraint_name ;
--例如:
alter table user_info1 rename constraint pk_id_name to new_id_name ;
2.4禁用和启用主键约束:
--禁止或启用主键约束
ALTER TABLE table_name DISABLE|ENABLE CONSTRAINT constraint_name ;
--例如:
alter table user_info1disable constraint new_pk_id_name ;
2.5删除主键约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name ;
-- 或
ALTER TABLE table_name DROP PRIMARY KEY[CASCADE];
-- 例如:
alter table user_info1 drop constraint new_pk_id_name ;
3.外键约束
3.1在创建表的时候添加外键约束
table_name1为主表 , table_name2为从表
主从表中相应的字段的类型必须一致, 从表的外键必须是主表的主键
外键字段的值必须来之主表 ,或者为null
CREATE TABLE table_name1
(
column_name1 datatype PRIAMRY KEY ,
....
);
--方式一:
CREATE TABLE table_name2
(
column_name1 datetype PRIAMRY key ,
column_name2 datatype REFERENCES table_name1(column_name1),
...
);
--例如:
create table user_info
(
id number(6,0) primary key,
name varchar2(20) not null,
password varchar2(20) not null,
email varchar2(30)
);
create table card
(
id number(8,0) primary key,
money number(8,2) not null ,
user_id number(6,0) references user_info(id)
);
--方式二:
CREATE TABLE table_name2
(
column_name1 datetype PRIAMRY key ,
column_name2 datatype ,
....,
CONSTRAINT constraint_name foreign key(column_name) REFERENCES table_name1(column_name) [ON DELETE CASCADE]
);
--例如
create table card
(
id number(8,0) primary key,
money number(8,2) not null ,
user_id number(6,0) ,
constraint FK_USER_ID foreign key(user_id) references user_info(id) on delete cascade
);
3.2在修改表的时候添加外键约束
ALTER TABLE table_name1 ADD CONSTRAINT constraint_name FOREIGN KEY(column_name) REFERENCES table_name2(column_name) ;
--例如
alter table card add constraint fk_user_id foreign key(user_id) references user_info(id) ;
3.3在修改表的时候删除外键约束(和删除主键一样)
--禁用外键约束:
ALTER TABLE table_name DISABLE|ENADBLE CONSTRAINT constraint_name ;
--删除外键约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name ;
--例如
alter table card drop constraint fk_user_id ;
4.唯一约束
保证其唯一性
唯一约束与主键约束的区别:
主键约束要保证字段为非空的
唯一约束中允许有一个空值
主键在一张表中只能有一个
唯一约束一张表中可以有多个
4.1在创建表的时候设置唯一约束
--方式一:
CREATE TABLE table_name
(
column_name datatype UNIQUE,
....
);
--方式二:
CREATE TABLE table_name
(
column_name datatype ,
.... ,
CONSTRAINT constraint_name UNIQUE(column_name)
);
4.2在修改表的时候添加唯一约束
ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE(column_name) ;
4.3在修改表的时候删除唯一约束
--禁用唯一约束:
ALTER TABLE table_name DISABLE|ENADBLE CONSTRAINT constraint_name ;
--删除唯一约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name ;
5.检查约束
5.1在创建表的时候设置检查约束
--方式一:
CREATE TABLE table_name
(
column_name datatype CHECK(expressions),
....
);
--方式二:
CREATE TABLE table_name
(
column_name datatype ,
.... ,
CONSTRAINT constraint_name CHECK(expressions)
);
5.2在修改表的时候添加唯一约束
ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK(expressions) ;
5.3在修改表的时候删除唯一约束
--禁用唯一约束:
ALTER TABLE table_name DISABLE|ENADBLE CONSTRAINT constraint_name ;
--删除唯一约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name ;
总结
除去not null约束外,其他四个约束primary key ,foreign key, unique, check在添加约束是有些不同,主要是关键字的不同.
在删除约束禁用约束上都是一样的格式.
--禁用primary key ,foreign key, unique, check约束:
ALTER TABLE table_name DISABLE|ENADBLE CONSTRAINT constraint_name ;
--删除primary key ,foreign key, unique, check约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name ;