zoukankan      html  css  js  c++  java
  • 数据库[约束]笔记

    数据库约束是为了保证数据的完整性而实现的一套机制。

    非空约束  not null

    主键约束(PK)primary key constraint唯一且不为空

    唯一约束(UQ)unique constraint唯一、允许为空

    默认约束(DF)default constraint

    检查约束(CK)check constraint

    外键约束(FK)foreign key constraint

    -------------------手动修改表结构--------------------

    --手动删除一列(删除EmpName列)

    alter table Employees drop column EmpName

    --手动增加一列(增加一列EmpName ,EmpAge)

    alter table Employees add EmpName varchar(50),EmpAge int

    --手动修改一下EmpEmail的数据类型(varchar(200))

    alter table Employees alter column EmpEmail varchar(200) 

    --------------------手动增加约束---------------------

    --为EmpId增加一个主键约束

    alter table Employees add constraint PK_EmpId primary key(EmpId);

    --非空约束,为EmpName增加一个非空约束

    alter table Employees alter column EmpName varchar(50) not null;

    --为EmpName增加一个唯一约束

    alter table Employees add constraint UQ_EmpName unique(EmpName);

    --为性别增加一个默认约束,默认为‘男’

    alter table Employees add constraint DF_EmpGender default('男') for EmpGender;

    --为年龄增加一个检查约束:年龄必须在0-120岁之间

    alter table Employees add constraint CK_EmpAge check(EmpAge>=0 and EmpAge<=120);

     --为DepId列增加外键约束(部门表中主键列DeptId)

    alter table Employees add constraint Fk_DepId_DeptId foreign key(DepId) references Department(DeptId);

    ---------------------一条语句为表增加多个约束----------------------------

    alter table Employees add

    constraint PK_Employees_EmpId primary key(EmpId),--增加主键约束
    constraint UQ_Employees_EmpName unique(EmpName),--增加唯一约束
    constraint DF_Employees_EmpGender default('') for EmpGender,--默认约束
    constraint CK_Employees_EmpAge check(EmpAge>=0 and EmpAge<=120),  --检查约束
    constraint FK_Employees_Department_DepId foreign key(DepId) references Department(DepId);--外键约束
     

    ---------------------手动删除约束-------------------

    alter table Employees drop constraint FK_DepId_DeptId

     --手动一次删除多个约束

    alter table Employees drop onstraint

    FK_DepId_DeptId,

    CK_EmpAge;

    -------------------------------------------

    通过使用级联引用完整性约束,您可以定义当用户试图删除或更新现有外键指向的键时,SQL Server 2005 执行的操作。
    CREATE TABLE 语句和ALTER TABLE 语句的REFERENCES 子句支持ON DELETE 子句和ON UPDATE 子句。
    还可以使用外键关系对话框定义级联操作:
    [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
    [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
     
    --设置主外键关系的级联删除
    alter table Employees add constraint FK_Employees_Department_DepId
    foreign key(DepId) references Department(DepId)
    on delete CASCADE --设置级联删除
    --on update cascade --设置级联更新
     
     
    --了解
    如果没有指定ON DELETE ON UPDATE,则默认为NO ACTION
    ON DELETE NO ACTION 指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚DELETE 语句。
    ON UPDATE NO ACTION 指定如果试图更新某一行中的键值,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚UPDATE 语句。
    CASCADESET NULL SET DEFAULT 允许通过删除或更新键值来影响指定具有外键关系的表,这些外键关系可追溯到在其中进行修改的表。如果为目标表也定义了级联引用操作,那么指定的级联操作也将应用于删除或更新的那些行。不能为具有timestamp列的外键或主键指定CASCADE
    ON DELETE CASCADE 指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则也将删除所有包含那些外键的行。
    ON UPDATE CASCADE 指定如果试图更新某一行中的键值,而该行的键值被其他表的现有行中的外键所引用,则组成外键的所有值也将更新到为该键指定的新值。
    注意:如果timestamp列是外键或被引用键的一部分,则不能指定CASCADE
    ON DELETE SET NULL 指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为NULL。为了执行此约束,目标表的所有外键列必须可为空值。
    ON UPDATE SET NULL 指定如果试图更新某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为NULL。为了执行此约束,目标表的所有外键列必须可为空值。
    ON DELETE SET DEFAULT 指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。为了执行此约束,目标表的所有外键列必须具有默认定义。如果某个列可为空值,并且未设置显式的默认值,则将使用NULL 作为该列的隐式默认值。因ON DELETE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。
    ON UPDATE SET DEFAULT 指定如果试图更新某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。为了执行此约束,目标表的所有外键列必须具有默认定义。如果某个列可为空值,并且未设置显式的默认值,则将使用NULL 作为该列的隐式默认值。因ON UPDATE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。
     
     
  • 相关阅读:
    记录一次性能优化(转)
    Java线程池使用说明
    Spring AOP: Spring之面向方面编程
    hibernate 联合主键生成机制(组合主键XML配置方式)
    Hibernate配置文件hbm主键的generator可选项
    关于spring-mvc的InitBinder注解的参数
    Quartzs -- Quartz.properties 配置
    开源调度框架Quartz最佳实践
    Windows系统上如何使用SSH
    导入DEM数据到ArcGIS
  • 原文地址:https://www.cnblogs.com/chay1227/p/2982933.html
Copyright © 2011-2022 走看看