
数据库约束是实现数据库完整性的方式,数据库完整性分为4种:主体完整性,域完整性,参照完整性,用户自定义完整性。
其中主体完整性对应了主键约束,域完整性对应了表各个字段到约束,如字段必须是字符类型,必须是非空的等,参照完整性对应了外键约束,用户自定义完整性由check约束来实现。
具体到约束的定义方法参照书籍吧,纯手打,望采纳
现在要说的是在列这一层次过滤的基于表定义之前就规范好的 CHECK 约束。(MySQL 版本 >= 8016)
mysql> create table f1 (r1 int constraint tb_f1_r1_chk1 check (mod(r1,3)=0));
Query OK, 0 rows affected (003 sec)
mysql> create table f2 (r1 int constraint tb_f2_r1_chk1 check (mod(r1,3)=0) not enforced);
Query OK, 0 rows affected (002 sec)
这里 CHECK 约束的相关限制如下:
1 constraint 名字在每个数据库中唯一。
也就是说单个数据库里不存在相同的两个 constraint,如果不定义,系统自动生成一个唯一的约束名字。
2 check 约束针对语句 insert/update/replace/load data/load xml 生效;针对对应的 ignore 语句失效。
3 并非每个函数都可以使用,比如函数结果不确定的:NOW(),CONNECTION_ID(),CURRENT_USER()。
4 不适用于存储过程和存储函数。
5 系统变量不适用。
6 子查询不适用。
7 外键动作(比如 ON UPDATE, ON DELETE) 不适用。
8 enforced 默认启用,如果单独加上 not enforced ,check 约束失效。
数据库约束是为了保证数据的完整性而实现的一套机制,它具体的根据各个不同的数据库的实现而有不同的工具一般来说有以下几种实现方式:1、检查约束:通过在定义数据库表里,在字段级或者是在表级加入的检查约束,使其
create table 。
一、SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2012 的大型多处理器的服务器等多种平台使用。
二、Microsoft SQL Server 是一个全面的数据库平台,使用集成的商业智能 (BI)工具提供了企业级的数据管理。Microsoft SQL Server 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。
三、SQL Server 是一个关系数据库管理系统。它最初是由Microsoft、Sybase 和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个OS/2版本。
四、Microsoft SQL Server 2005 是一个全面的数据库平台,使用集成的商业智能 (BI)工具提供了企业级的数据管理。Microsoft SQL Server 2005数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。
范式书上讲解太拗口,自己总结一下:
第一范式:数据表中的每一列(每个字段)必须是不可拆分的最小单元,不允许存在隐藏字段,属性保持“原子性”(最大细分的二维表)
第二范式:第一范式基础上要有主键,所有列都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情(相当于这行阐述的是一个人时,你不能加一列说明天气)
第三范式:满足第二范式,表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键)
正规化范式(BCDF):所有表中的决定因素必须是一个候选键,如果只有一个候选键,那么就和第三范式是一样的。
有第四第五范式,更高的范式是为了解决数据冗余问题,但可以通过其他办法达到。所以一般用不到
五大约束:
1 primary KEY :设置主键约束;
2 UNIQUE :设置唯一性约束,不能有重复值;
3 DEFAULT 默认值约束,height DOUBLE(3,2)DEFAULT 12 height不输入是默认为1,2
4 NOT NULL :设置非空约束,该字段不能为空;
5 FOREIGN key :设置外键约束。
主键约束
SELECT
tabname AS [表名],
idxname AS [主键名称],
colname AS [主键列名]
FROM
sysindexes idx
JOIN sysindex_columns idxCol
ON (idxobject_id = idxColobject_id
AND idxindex_id = idxColindex_id
AND idxis_primary_key = 1)
JOIN systables tab
ON (idxobject_id = tabobject_id)
JOIN syscolumns col
ON (idxobject_id = colobject_id
AND idxColcolumn_id = colcolumn_id);
唯一约束
SELECT
tabname AS [表名],
idxname AS [约束名称],
colname AS [约束列名]
FROM
sysindexes idx
JOIN sysindex_columns idxCol
ON (idxobject_id = idxColobject_id
AND idxindex_id = idxColindex_id
AND idxis_unique_constraint = 1)
JOIN systables tab
ON (idxobject_id = tabobject_id)
JOIN syscolumns col
ON (idxobject_id = colobject_id
AND idxColcolumn_id = colcolumn_id);
外键约束
select
oSubname AS [子表名称],
fkname AS [外键名称],
SubColname AS [子表列名],
oMainname AS [主表名称],
MainColname AS [主表列名]
from
sysforeign_keys fk
JOIN sysall_objects oSub
ON (fkparent_object_id = oSubobject_id)
JOIN sysall_objects oMain
ON (fkreferenced_object_id = oMainobject_id)
JOIN sysforeign_key_columns fkCols
ON (fkobject_id = fkColsconstraint_object_id)
JOIN syscolumns SubCol
ON (oSubobject_id = SubColobject_id
AND fkColsparent_column_id = SubColcolumn_id)
JOIN syscolumns MainCol
ON (oMainobject_id = MainColobject_id
AND fkColsreferenced_column_id = MainColcolumn_id)
Check约束
SELECT
tabname AS [表名],
chkname AS [Check约束名],
colname AS [列名],
chkdefinition
FROM
syscheck_constraints chk
JOIN systables tab
ON (chkparent_object_id = tabobject_id)
JOIN syscolumns col
ON (chkparent_object_id = colobject_id
AND chkparent_column_id = colcolumn_id)
以上就是关于什么是数据库约束全部的内容,包括:什么是数据库约束、数据库check约束、数据库里的约束有何意义有什么作用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)