数据库约束是对表中的数据进行进一步的限制,保证数据的正确性、有效性和完整性。
约束通常与一个表相关联,并使用CREATE CONSTRAINT或CREATE ASSERTIONSQL语句创建。
所有的关系数据库都支持对数据表使用约束,通过约束可以更好地保证数据表里数据的完整性。
是表上强制执行的校验规则,除此之外,当表中数据存在相互依赖性时,可以保护相关数据不被删除。约束通常无法修改。
扩展资料
数据库中的五大约束:
1、主关键字约束
主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一地指定一行记录。每个表中只能有一列被指定为主关键字,且IMAGE 和TEXT 类型的列不能被指定为主关键字,也不允许指定主关键字列有NULL 属性。
2、外关键字约束
外关键字约束定义了表之间的关系。当一个表中的一个列或多个列的组合和其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字,并设定它适合哪个表中哪些列相关联。
3、唯一性约束
惟一性约束指定一个或多个列的组合的值具有唯一性,以防止在列中输入重复的值。唯一性约束指定的列可以有NULL 属性。由于主关键字值是具有唯一性的,因此主关键字列不能再设定唯一性约束。唯一性约束最多由16 个列组成。
4、检查约束
检查约束对输入列或整个表中的值设置检查条件,以限制输入值,保证数据库的数据完整性。可以对每个列设置复合检查。
5、缺省约束
缺省约束通过定义列的缺省值或使用数据库的缺省值对象绑定表的列,来指定列的缺省值。SQL Server 推荐使用缺省约束,而不使用定义缺省值的方式来指定列的缺省值。
什么时候添加都行。(你的标题意思不正确,说成数据库中表的外键约束就对了) 主键作用:用以标识唯一一条记录,也就是说用来区分行数据的标志。做数据库里的一张数据表时,一般只要定义了列属性,数据表就算是建立完成了。类似于/创建StudentsInfo表/ use Moonfox_db if exists(select from sysobjects where name='StudentsInfo') drop table StudentsInfo create table StudentsInfo ( SName nvarchar(10) not null,--姓名 SID int identity (10000,1)primary key,--学号,主键 Gender nchar(2) not null check(Gender='男' or Gender='女'),--性别,添加限制 SClass nvarchar(10) not null,--班级 SBirthday datetime not null,--出生日期 SNative nvarchar(10),--籍贯 SPhoto image,--照片 Remarks nvarchar(200)--简历 ) 这些就是一张表里的属性,也就是我们通常意义上的列,只要把它做好了,表里的数据你想什么时候添加都行。
Oracle约束按约束状态又可分为disable novalidate,disable validate,enable novalidate,enable validate 其中disable/enable代表是否启用约束,validate/novalidate代表启用约束时是否对表中原有数据作检查。
这里模拟生产环境中的情况,先建一张没有约束的表,等有一定数据后建立enable novalidate约束,进而执行enable validate来规范表中所有数据,具体如下:
1 创建原始表及数据
SQL> create table t1(
2 id number,
3 name varchar2(20));
SQL> insert into t1 values(1,'A');
SQL> insert into t1 values(1,'B');
SQL> insert into t1 values(2,'C');
SQL> insert into t1 values(3,'D');
SQL> insert into t1 values(3,'E');
SQL> insert into t1 values(4,'F');
2 在表上创建enable novalidate主键
SQL> alter table t1 add constraint pk_t1 primary key (id)
2 deferrable enable novalidate;
此时主键已经生效,但源表中包含不符合约束的数据
3 尝试将约束状态更改为 enable validate,却发现原有数据有问题
SQL> alter table t1 enable validate constraint pk_t1;
alter table t1 enable validate constraint pk_t1
第 1 行出现错误:
ORA-02437: 无法验证 (SCOTTPK_T1) - 违反主键
4 找出违反约束的数据,这里采用Exceptions表保存异常数据
SQL>@$ORACLE_HOME/rdbms/admin/utlexpt1sql ------ 建立异常数据保存表
SQL>alter table t1 enable validate constraint pk_t1 exceptions into exceptions; ------ 将异常数据装入异常表
5 根据异常表,找出对应源表中的异常数据
SQL> select id,name from t1 where rowid in(
2 select row_id from exceptions);
ID NAME
---------- --------------------
1 A
1 B
3 D
3 E
6 修正异常数据后,将索引生效。
查询一个表的所有外键
SELECT 主键列ID=brkey
,主键列名=(SELECT name FROM syscolumns WHERE colid=brkey AND id=brkeyid)
,外键表ID=bfkeyid
,外键表名称=object_name(bfkeyid)
,外键列ID=bfkey
,外键列名=(SELECT name FROM syscolumns WHERE colid=bfkey AND id=bfkeyid)
,级联更新=ObjectProperty(aid,'CnstIsUpdateCascade')
,级联删除=ObjectProperty(aid,'CnstIsDeleteCascade')
FROM sysobjects a
join sysforeignkeys b on aid=bconstid
join sysobjects c on aparent_obj=cid
where axtype='f' AND cxtype='U'
and object_name(brkeyid)='titles'
SELECT
FROM information_schemacolumns
WHERE TABLE_CATALOG='数据库名'
AND TABLE_NAME = '表名'
AND COLUMN_NAME='列名'
select
from syscolumns
where id=object_id('tableName') and name='fieldName'
以上就是关于什么是数据库约束全部的内容,包括:什么是数据库约束、数据库检查约束怎么写、oracle怎么查询违反约束的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)