数据库完整性总结

完整性和安全性

  • 数据库完整性是指数据库的正确性、有效性和相容性,防止错误数据进入数据库。
  • 数据库安全性是指保护数据库,防止不合法的引用,以免数据的泄密、更改或破坏。

安全性和完整性常常混淆。安全性是指保护数据以防止非法用户故意造成破坏;完整性是保护数据以防止合法用户无意中造成破坏。

完整性约束

SQL中把完整性约束分为三大类:域约束、基本表约束和断言。

域约束

可以用“CREATE DOMAIN” 语句定义新的域,并且还可以出现CHECK子句。

定义一个新的域COLOR,可以用下列语句实现:

CREATE DOMAIN COLOR CHAR(6) DEFAULT '???'
    CONSTRAINT VALID_COLORS
        CHECK( VALUE IN
                  ( 'Red','Yellow','Blue','Green','???'));

此处第二行表示为这个域约束起一个名字VALID_COLORS。假定有一张表:

CREATE TABLE PART
( ...,
  COLOR COLOR,
  ...);

如果用户插入一个元组时未提交颜色的值,默认为‘???’。如果用户输入了非法值,则操作失败,系统将产生一个约束名为VALID_COLORS的诊断信息。

基本表约束

SQL的基本表约束主要有三种形式:候选键定义、外键定义和“检查约束”定义。这些定义都可以在前面加“CONSTRAINT<约束名>“,由此为新约束起一个名字。为简化下面都省略这一选项。

1、候选键定义

候选键的定义形式为:

UNIQUE (<列名序列>)
或
PRIMARY (<列名序列>)
  • UNIQUE定义表的候选键,但只表示值是唯一的,值非空还需要在列定义时带有选项NOT NULL。
  • PRIMARY 方式定义表的主键,一个基本表只能指定一个主键。当是主键时会被自动认为是非空的。

2、外键定义

外键的定义形式为:

FOREIGN KEY (<列名序列>)
    REFERENCES <参照表> [(<列名序列>)]
        [ON DELETE<参照动作>]
        [ON UPDATE<参照动作>]

第一行的列名序列是外键,第二行的列名序列是参照表中的主键或候选键。参照动作有五种方式:

  • NO ACTION方式:对依赖表没有影响。
  • CASCADE方式:参照表中要删除/修改主键值,将依赖表中对应的外键值也删除/修改。
  • RESTRICT方式:依赖表没有一个外键值和参照表主键值对应,系统才能执行删除/修改操作。
  • SET NULL方式:删除/修改参照表中元组时,将依赖表中相关外键值设为空值。
  • SET DEFAULT方式:与上述方法类似,设置为预先设置好的默认值。

3、”检查约束“定义

这种约束是对单个关系的元组值加以约束。方法是在关系定义中任何需要的地方加上关键字CHECK和约束的条件:

CHECK (<条件表达式>)

比如在教学数据库中,要求学生关系中存储的学生信息满足:男同学年龄在15~35之间,女同学年龄在15~30之间:

CHECK (AGE >= 15 AND ((SEX = 'M' AND AGE <= 35)
        OR (SEX = 'F' AND AGE <= '30')));

断言

断言的定义如下:

CREATE ASSERTION <断言名> CHECK (<条件>)

撤销断言的方法如下:

DROP ASSERTION <断言名>

例如:每门课最多50名学生选修:

CREATE ASSERTION ASSE3 CHECK
    ( 50>= (SELLECT COUNT (SC.S#)
        FROM S,SC
        WHERE S.S#=SC.S# AND SEX='M'
        GROUP BY C#));

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏葡萄城控件技术团队

Table-values parameter(TVP)系列之一:在T-SQL中创建和使用TVP

一.摘要   表值参数(Table-valued parameters)简称TVP,是SQL Server 2008中引入的一种新特性,它提供了一种内置的方式...

27790
来自专栏恰童鞋骚年

《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

  所谓透视(Pivoting)就是把数据从行的状态旋转为列的状态的处理。其处理步骤为:

14720
来自专栏技术碎碎念

sql server 2008 数据库的完整性约束

一、数据库完整性概述 1.数据库的完整性: ①数据库的完整性是指数据的正确性和相容性 ②数据库完整性是防止不合语义或不正确的数据进入数据库 ③完整性体现了是否真...

35640
来自专栏Kevin-ZhangCG

SQL优化总结之二

20520
来自专栏xcywt

学习SQLite之路(四)

20160621 更新 参考: http://www.runoob.com/sqlite/sqlite-tutorial.html 1. SQLite   a...

23180
来自专栏osc同步分享-java技术分享站

数据库

1.分组查询 -- 查询选修三门课以上的学生的学号 select Sno from SC group by Sno having count(*)>3; 2.修...

29580
来自专栏JMCui

MongoDB系列四(索引).

一、索引简介     再来老生常谈一番,什么是索引呢?数据库索引与书籍的索引类似。有了索引就不需要翻整本书,数据库可以直接在索引中查找,在索引中找到条目以后,就...

33250
来自专栏数据分析

SQL Server 性能优化之——T-SQL 临时表、表变量、UNION

这次看一下临时表,表变量和Union命令方面是否可以被优化呢? 一、临时表和表变量 很多数据库开发者使用临时表和表变量将代码分解成小块代码来简化复杂的逻辑。但是...

60040
来自专栏大数据和云计算技术

MongoDB系列6:MongoDB索引的介绍

1、前言 和关系型数据库一样,MongoDB的索引可以提高查询执行效率。索引就好比书中的目录,可以快速定位书中某一页。适当的索引查询,优化器可以快速地返回结果集...

550100
来自专栏云计算教程系列

如何管理SQL数据库

安装SQL数据库时,需要添加,修改,删除和查询数据所需的所有命令。这个备忘单样式指南提供了一些最常用的SQL命令的快速参考。

27220

扫码关注云+社区

领取腾讯云代金券