约束:控制你输入的具体值要满足的具体要求
约束的作用:定义规则 你创建的表之后,可以定义那些字段必须输入,那些字段必须输入在某一个范围内的值,什么样的值
确保数据的完整性:精确性,可靠性。防止错误信息和无效信息输入
非空约束:
创建表时设置:CREATE TABLE table_name(column_name datatype NOT NULL,…);
如果不想给非空插入之就需要设置默认值
在修改表时添加非空约束:ALTER TABLE table_name MODIFY column_name datatype NOT NULL;
注意:在修改非空约束之前,表当中不要有空数据
改回来就是NOT NULL 改成NULL
主键约束:
作用:确保表当中每一行数据的唯一性
必须 ?非空和唯一
在一张表中我们只能设置一个主键约束,但是这个主键约束可以由多个字段构成(联合主键或者复合组件)
创建表时设置主键约束:
CREATE TABLE table_name(column_name datatype PRIMARY KEY,…);
设置主键约束会自动加上非空约束
CONSTRANINT constraint_name PRIMARY KEY(column_name1,…)
可以再小括号中写多个字段构成联合组件
这个是子句放在所有字段写完之后,设置约束(表级约束)
例子:CREATE TABLE userinfo_p1(id number(6,0),username varchar2(20),userpwd varchar2(20),constraint pk_id_username PRIMARY KEY(id,username));
这两个字段都是非空
如果创建完约束之后忘记约束名字
我们可以在数据字典user_constraints里查
SELECT constrain_name from user_constraints WHERE table_name=’USERINFO_P1′;
查找到USERINFO_P1的主键约束
如果没有设置主键约束名称他的名称由系统自动生成例如:SYS_C0011635
修改表时添加主键约束:
ADD CONSTRAINT constraint_name PRIMARY KEY(column_name1,…)
例子:ALTER TABLE userinfo ADD CONSTRAINT pk_id PRIMARY KEY(id);
在设置主键约束前这个字段值必须是唯一非空
最好是没有任何数据的
更改约束的名称:
RENAME CONSTRAINT old_name TO new_name
例子:ALTER TABLE userinfo RENAME CONSTRAINT pk_id TO new_pk_id;
删除主键约束:?
DISABLE|ENABLE CONSTAINT constraint_name
DISALBE是暂时不想用了,以后可以还用,就是禁用
ENABLE就是启用
查看是否被禁用:SELECT constraint_name,status FROM user_constraint WHERE table_name=’USERINFO’;
删除主键约束:
? ? DROP CONSTRAINT constraint_name
DROP PRIMARY KEY[CASCADE],因为每张表只有一个主键约束所以可以直接去掉
[CASCADE]用于级联删除,比如外键约束的时候
外键约束
唯一涉及两个表当中字段关系的约束
创建表时设置:CREATE TABLE table1(column_name datatype REFERENCES tables(column_name),…);
REFERENCES后面的表称为 ? 主表
CREATE TABLE后面的表称为 从表
因此我们将外键约束称为主从表关系
设置外键约束时,主表字段必须是主键
主从表中相应的字段必须是同一数据类型
从表中外键字段的值必须来自主表中的相应字段的值,或者为null值
CREATE TABLE typeinfo(typeid VARCHAR2(20) PRIMARY KEY,typename VARCHAR2(20));
CREATE TABLE userinfo_f(id VARHCHAR2(10) PRIMARY KEY,username VARCHAR2(20),typeid_new VARCHAR2(10) REFERENCE typeinfo(typeid));
在创建表时设置外键约束
CONSTRAINT constraint_name FOREIGN KEY(column_name) REFERENCES table_name(column_name) [ON DELETE CASCADE]
中括号表示级联删除,就是我们主表某条字段被删除,我们从表字段所用的字段的行被一起删除
确保了主从表数据的完整性