• 数据库复习⑧


    数据库复习⑧

    2016年6月18日

    21:23

    Main Integrity Constraints 实体完整性约束

    1.各种约束

    Keys

    Foreign-key 外键 引用完整性约束

    Value-based constraints 值约束

    Tuple-based constraints 元组约束

    Assertions 断言

    2.Key Constrains

    Primary Key:

    CREATE TABLE branch(

    bname CHAR(15) PRIMARY KEY,

    bcity CHAR(20),

    assets INT);

    or

    CREATE TABLE depositor(

    cname CHAR(15),

    acct_no CHAR(5),

    PRIMARY KEY(cname, acct_no));

    Candidate Keys:

    CREATE TABLE customer (

    ssn CHAR(9) PRIMARY KEY,

    cname CHAR(15),

    address CHAR(30),

    city CHAR(10),

    UNIQUE (cname, address, city);

    clip_image002

    3.Attribute Constraints

    clip_image003

    clip_image004

    clip_image005

    4.Foreign Keys外键

    主键、外键和索引的区别?

     

    主键

    外键

    索引

    定义:

    唯一标识一条记录,不能有重复的,不允许为空

    表的外键是另一表的主键, 外键可以有重复的, 可以是空值

    该字段没有重复值,但可以有一个空值

    作用:

    用来保证数据完整性

    用来和其他表建立联系用的

    是提高查询排序的速度

    个数:

    主键只能有一个

    一个表可以有多个外键

    一个表可以有多个惟一索引

    1、外键引用的是需要其它表的主键,或者候选键。

    2、外键创建之后并不会自动创建索引,这个是有开发人员自己考虑在外键上建相关索引是否能获取到查询效率上的提升

    3、默认的情况下如果在引用表插入不存在的外键值或者在主表删除了一个被引用的数据,数据库都会报错。

    clip_image007

    clip_image008

    5.Global Constraint: Assertions 全局限制 断言

    CREATE ASSERTION <name>

    CHECK ( <condition> );

    clip_image009

    6.Trigger 触发器

    语法:

    DELIMITER |

    CREATE TRIGGER `<databaseName>`.`<triggerName>`

    < [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >

    ON [dbo]<tableName> //dbo代表该表的所有者

    FOR EACH ROW

    BEGIN

    --do something

    END |

    触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。

    DML触发器

    当数据库中表中的数据发生变化时,包括insert,update,delete任意操作,如果我们对该表写了对应的DML触发器,那么该触发器自动执行。DML触发器的主要作用在于强制执行业 务规则,以及扩展Sql Server约束,默认值等。因为我们知道约束只能约束同一个表中的数据,而触发器中则可以执行任意Sql命令。

    DDL触发器

    它是Sql Server2005新增的触发器,主要用于审核与规范对数据库中表,触发器,视图等结构上的操作。比如在修改表,修改列,新增表,新增列等。它在数据库结构发生变化时执行,我们主要用它来记录数据库的修改过程,以及限制程序员对数据库的修改,比如不允许删除某些指定表等。

    举例:

    插入时:

    create trigger tri_insert

    on student

    for insert

    as

    declare @student_idchar(10)

    select @student_id=s.student_id from students

    inner join insertedion s.student_id=i.student_id

    if @student_id='0000000001'

    begin

    raiserror('不能插入1的学号!',16,8)

    rollbacktran

    end

    go

    更新时:

    create trigger tri_update

    on student

    for update

    as

    if update(student_id)

    begin

    raiserror('学号不能修改!',16,8)

    rollbacktran

    end

    go

    删除时:

    create trigger tri_delete

    on student

    for delete

    as

    declare @student_idvarchar(10)

    select @student_id=student_id from deleted

    if @student_id='admin'

    begin

    raiserror('错误',16,8)

    rollbacktran

    End

    clip_image011

    clip_image013

    clip_image015

    数据库复习⑨:摘要: Transact-SQL、流程控制命令、数据库命令、常用函数、游标编程、存储过程

    数据库复习⑨友情链接:http://www.cnblogs.com/zpfbuaa/p/5597946.html

  • 相关阅读:
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言|博客作业04
    C语言|博客作业02
    第二周作业
    第一周作业
    学期总结
    作业01
    C语言I博客作业09
  • 原文地址:https://www.cnblogs.com/zpfbuaa/p/5597851.html
Copyright © 2020-2023  润新知