什么是列级约束
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是列级约束相关的知识,希望对你有一定的参考价值。
什么是列级约束
oracle数据库约束约束用于确保数据库数满足业务规则。
约束包括:NOT NULL,UNIQUE,PRIMARY KEY,FOREIGN KEY以及CHECK等5种类型。
建立主键约束和唯一约束时,Oralce会基于约束列自动建立唯一索引;主键约束不允许为NULL,唯一约束允许为NULL。
一张表只能建立一个主键约束。
建表约束:NOT NULL只能在列级定义;其它4种既可以在列级定义,也可以在表级定义。复合主键约束只能在表级定义。
维护约束:增加NOT NULL约束时必须使用MODIFY子句,而增加其它约束时需要使用ADD子句。
第一, 定义约束
---------------------------------------------
语法:
CREATE TABLE [SCHEMA.]table_name(
column_name datatype [DEFAULT expr] [column_constraint],
...
[table_constraint][, ...]
);
例子:
CREATE TABLE tt_user_info
(
ID VARCHAR2(20 BYTE),
NAME VARCHAR2(20 BYTE) NOT NULL,
category_id VARCHAR2(20 BYTE) REFERENCES tb_out_service(serviceid),
remark VARCHAR2(1000)
);
ALTER TABLE tt_user_info ADD (
CHECK ( LENGTH(NAME)>2),
PRIMARY KEY (ID),
UNIQUE (NAME)
);
说明:
1. NOT NULL,非空约束
not null
2. UNIQUE,唯一约束
UNIQUE (COL_NAME)
3. PRIMARY KEY,主键约束
primary key (col_name1 [, col_name2])
4. FOREIGN KEY,外键约束
它有三种类型:
来源:(http://blog.sina.com.cn/s/blog_55d572ca0100coew.html) - oracle数据库约束 转帖_zeeman_新浪博客
references primary_table(primary_col)
on delete cascade
on delete set null
5. CHECK,检查约束
check (money > 1000)
第二, 维护约束
----------------------------------------
1. 增加约束
NOT NULL使用ALTER MODIFY子句,其它的使用ALTER ADD子句
-------------------------------
CREATE TABLE tt_user(NAME VARCHAR2(20));
ALTER TABLE tt_user MODIFY user_name NOT NULL;
ALTER TABLE tt_user ADD CONSTRAINT constraint_name UNIQUE(NAME);
ALTER TABLE tt_user ADD CONSTRAINT constraint_name PRIMARY KEY(NAME);
ALTER TABLE tt_user ADD parentid VARCHAR2(20)
CONSTRAINT constraint_name
REFERENCES tb_out_service(serviceid);
2. 修改约束名
ALTER TABLE table_name RENAME CONSTRAINT old_constraint_name TO new_constraint_name
3. 删除约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name
4. 禁止约束
ALTER TABLE table_name DISABLE CONSTRAINT constraint_name [CASCADE];
5.激动约束
ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;
第三. 显示约束信息
所有约束信息
SELECT *
FROM user_constraints
来源:(http://blog.sina.com.cn/s/blog_55d572ca0100coew.html) - oracle数据库约束 转帖_zeeman_新浪博客 参考技术A 简单举例,部门表,员工表。
员工表里,每个员工有一个列用于存储部门ID。
那么,这个列里的所有字段应该都存在于部门表中。不可以出现说某个员工没有部门的情况。
这就是列级约束。 参考技术B 列级约束即当表创建或改变时在列定义内指定的约束。
该约束只应用于相关的列,是行定义的一部分,只能应用于一列上。对某一个特定的列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格隔开,不必指定列名。
其中在列级完整性约束定义处可以定义如下约束:
一、NOT NULL:限制列取非空值;
二、DEFAULT:指定列的默认值,使用形式为:DEFAULT 常量;
三、UNIQUE:限制列取值不重;
四、CHECK:限制列的取值范围,使用形式为:CHECK(约束表达式);
五、PRIMARY KEY:指定本列为主键;
六、FOREIGN KEY:定义本列为引用其他表的外键。使用形式为:【FOREIGN KEY(<列名>)】REFERENCES<外表名>(<外表列名>)。
以上是关于什么是列级约束的主要内容,如果未能解决你的问题,请参考以下文章