zoukankan      html  css  js  c++  java
  • MySQL约束

    主键约束(PRIMARY KEY)

      主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键应该遵守下面的规则:

    • 每个表只能定义一个主键。
    • 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是唯一性原则。
    • 一个列名只能在复合主键列表中出现一次。
    • 复合主键不能包含不必要的多余列。当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,那么这个复合主键是不正确的。这是最小化原则。

    语法格式:

    创建表时: 

    单一主键

    <字段名> <数据类型> PRIMARY KEY

    复合主键

    PRIMARY KEY [字段1,字段2,…,字段n]

    外键约束(FOREIGN KEY)

    • 主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表。
    • 从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表。

     定义一个外键时,需要遵守下列规则:

    • 父表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则父表与子表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
    • 必须为父表定义主键。
    • 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
    • 在父表的表名后面指定列名或列名的组合。这个列或列的组合必须是父表的主键或候选键。
    • 外键中列的数目必须和父表的主键中列的数目相同。
    • 外键中列的数据类型必须和父表主键中对应列的数据类型相同。

    语法格式

    创建表时:

    [CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…] REFERENCES <主表名> 主键列1 [,主键列2,…]

    删除外键约束

    ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;

    修改表时添加外键约束

    ALTER TABLE <数据表名> ADD CONSTRAINT <外键名>FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);

    唯一约束(Unique Key)

    唯一约束(Unique Key)要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。

    语法格式

    创建表时:

    <字段名> <数据类型> UNIQUE

    注意:UNIQUE 和 PRIMARY KEY 的区别:一个表可以有多个字段声明为 UNIQUE,但只能有一个 PRIMARY KEY 声明;声明为 PRIMAY KEY 的列不允许有空值,但是声明为 UNIQUE 的字段允许空值的存在。

    修改表时添加唯一约束:

    ALTER TABLE <数据表名> ADD CONSTRAINT <唯一约束名> UNIQUE(<列名>);

    删除唯一约束;

    ALTER TABLE <表名> DROP INDEX <唯一约束名>;

    检查约束(CHECK)

    若将 CHECK 约束子句置于表中某个列的定义之后,则这种约束也称为基于列的 CHECK 约束。

    在更新表数据的时候,系统会检查更新后的数据行是否满足 CHECK 约束中的限定条件。MySQL 可以使用简单的表达式来实现 CHECK 约束,也允许使用复杂的表达式作为限定条件,例如在限定条件中加入子查询。

    注意:若将 CHECK 约束子句置于所有列的定义以及主键约束和外键定义之后,则这种约束也称为基于表的 CHECK 约束。该约束可以同时对表中多个列设置限定条件。

    语法格式

    创建表时:

    CHECK <表达式>

    修改表时:

    ALTER TABLE tb_emp7 ADD CONSTRAINT <检查约束名> CHECK(<检查约束>)

    删除检查约束

    ALTER TABLE <数据表名> DROP CONSTRAINT <检查约束名>;

     

    默认值约束(Default)

    例如:女性同学较多,性别就可以默认为“女”。如果插入一条新的记录时没有为这个字段赋值,那么系统会自动为这个字段赋值为“女”。

    语法格式

    创建表时:

    <字段名> <数据类型> DEFAULT <默认值>;

    修改表时添加默认约束值

    ALTER TABLE <数据表名>CHANGE COLUMN <字段名> <数据类型> DEFAULT <默认值>;

    删除默认值约束

    ALTER TABLE <数据表名>CHANGE COLUMN <字段名> <字段名> <数据类型> DEFAULT NULL;

     非空约束(NOT NULL)

    非空约束(NOT NULL)可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不能为空。

    非空约束(Not Null Constraint)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。

    语法格式

    创建表时

    <字段名> <数据类型> NOT NULL

    修改表时添加非空约束

    <字段名> <数据类型> NOT NULL

    删除非空约束

    ALTER TABLE <数据表名>CHANGE COLUMN <字段名> <字段名> <数据类型> NULL

    查看表约束 

    SHOW CREATE TABLE <数据表名>;
  • 相关阅读:
    帮同事整理的 C# 调用 C++ 回调函数
    解决VS2010下使用NUnit 无法进行调试的问题
    Linux /var/log/messages 偶尔会发生time reset +6.288863s
    linux设置静态路由
    os auto installtion
    read 在bash ksh下的不同表现
    C#编码规范1
    C#中new一个对象时,发生了什么事?
    C# 实例化类的执行顺序
    C#类注释规范
  • 原文地址:https://www.cnblogs.com/aikutao/p/11208289.html
Copyright © 2011-2022 走看看