oracle 数据库的约束
2016-06-23 13:51
260 查看
一 为什么要使用约束
为了使我们的数据符合一定的规则二 五种约束
约束有五种类型,主键约束,外键约束,非空约束,唯一性约束,检查约束约束有两种定义方法:第一种是在定义列的时候定义约束,叫做列级定义。
第二种是所有列全部定义完后,在定义约束,该约束叫做表级定义(注意 not null只能在列级中定义),对于多个属性构成的码只能使用表级定义此约束
1.约束命名规范
非空约束 NN_表名_列名唯一约束 UK_表名_列名
主键约束 PK_表名
外键约束 FK_表名_列名
条件约束 CK_表名_列名
默认约束 DF_表名_列名
2.非空约束(not null)
定义了非空约束后,插入数据的时候此列不能为空列级语法格式:
create table table_name(column data_type not null,.............);
增加:create table table_name modify column not null;
3.唯一性约束(unique)
定义了唯一性约束后,此列的值不能重复,但是可以为空列级语法格式:
create table table_name(column data_type constraint constrint_name(约束名) unique,.............);
增加约束:alter table table_name add constrint constraint(约束名) unique(列名);
表级定义:create table table_name(column data_type,.............,constrint constraint(约束名) unique(列名));
4.检查约束
定义该列符合某种规则列级语法格式:
create table table_name(column data_type constraint constrint_name(约束名) check(规则 ),.............);
增加约束:alter table table_name add constrint constraint(约束名) check(规则);
表级定义:create table table_name(column data_type,.............,constraint constrint_name(约束名) check(列名 规则));
5.主键约束
唯一的表示一行数据,定义了主键约束后,改行不能为空,也不能重复列级定义语法格式:create table table_name(column data_type constraint constrint_name(约束名) primary key,.............);
增加约束:alter table table_name add constrint constraint(约束名) primary key;
表级定义:create table table_name(column data_type,.............,constraint constrint_name(约束名) primary key(列名));
6.外键约束
用于定义主表和从表之间的关系,外键约束定义在从表上,对应的在主表上必须有主键约束或unique约束在定义外键约束后,要求外键约束的列必须在主表的主键列存在或者为null
列级定义语法格式:create table table_name(column data_type constraint constrint_name(约束名)foreign key (从表 从表的主键名)references (主表,主表的主键),.............);
增加约束:alter table table_name add constrint constraint(约束名)
foreign key (主表 主表的主键名);
表级定义:create table table_name(column data_type ,.............,constraint constrint_name(约束名)foreign key (主表 主表的主键名)references (主表,主表的主键));
外键约束注意的问题:
1.如果在设置外键时没有加 on delete set null 或者on delete cascade ,那么删除有被从表中引用的主表中的数据时,将无法删除该数据。
2.在设置外键时加上on delete cascade,就可以之间删除主表中的数据,并且从表中的数据也一块删除
3.在设置外键时加上on delete set null,就可以之间删除主表中的数据,从表中的此项数据被置为空值
三 查询约束
直接查询 user_constraints就可以看到有哪些约束语法格式;
SELECT owner,constraint_name,table_name FROM user_constraints;
这个约束只告诉了名字,而并没有告诉在哪个字段上有此约束,这就需要查看另外一张数据字典表“user_cons_columns”;
语法格式;
SELECT owner,constraint_name,table_name,column_name FROM user_cons_columns;
四 删除约束
alter table table_name drop constraint 约束名相关文章推荐
- oracle查找重复记录
- Oracle查询重复数据并删除,只保留一条记录
- oracle复杂查询
- windows下安装oracle,sqlplus连接启动oracle(oracle 主机字符串输入是什么)
- [转]Oracle GoldenGate安装配置
- oracle编程、操作不良习惯总结
- Oracle SQL Plus常见技巧
- oracle 11g完全卸载
- oracle常用函数
- 【oracle】表空间 tablespace
- 备份oracle数据库
- oracle透明网关通过dblink连接slq server和mysql
- oracle定时器,调用存储过程,定时从n张表中取值新增到本地一张表中
- Linux下重启Oracle
- 【oracle】查找字符串的位置 instr
- Oracle 语句优化
- 使用BBED COPY命令,模拟oracle数据块的损坏
- oracle导入DMP步骤
- oracle如何创建只读用户只读另一用户的表&PLSQL 连接字符串
- Linux系统(X64)安装Oracle11g完整安装图文教程(转载)