zoukankan      html  css  js  c++  java
  • MySQL 数据库表的约束

    数据库约束的种类

    约束名

    约束关键字

    主键

    primary key

    唯一

    unique

    非空

    not null

    外键

    foreign key

    检查约束

    check 注:mysql 不支持,sql支持

    主键约束

    创建主键方式

    • 在创建表的时候给字段添加主键

      字段名 字段类型 PRIMARY KEY

      例1:

      CREATE TABLE tb_info (
          id INT PRIMARY KEY,
          name VARCHAR(30),
          age INT
      );

      例2:

      CREATE TABLE tb_info (
          id INT,
          name VARCHAR(30),
          age INT,
          PRIMARY KEY(id)
      );
    • 在已有表中添加主键

      ALTER TABLE 表名 ADD PRIMARY KEY(字段名);

      例:

      ALTER TABLE tb_info ADD PRIMARY KEY(id);

    删除主键的方式

    删除单表主键约束

    ALTER TABLE 表名 DROP PRIMARY KEY;

    删除有外键连接的表的主键

    第一步:解除外键约束

    ALTER TABLE 外键表 DROP FOREIGN KEY 外键名称

    第二步:删除主键

    ALTER TABLE 主键表 DROP PRIMARY KEY;

    如:删除tb1的主键

    这里有两个表,tb2的外键连接tb1的主键

    第一步:解除与tb2的外键约束

    ALTER TABLE tb2 DROP FOREIGN KEY id2;

    第二步:删除tb1的主键约束

    ALTER TABLE tb1 DROP PRIMARY KEY;

    主键自增

    -- 表示自动增长(字段类型必须是整数类型)
    AUTO_INCREMENT

    如:

    CREATE TABLE tb (
        id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(30),
        age INT
    );

    默认地 AUTO_INCREMENT 的开始值是 1

     

    创建表时指定起始值

    CREATE TABLE 表名 (
        列名 INT PRIMARY KEY AUTO_INCREMENT
    ) AUTO_INCREMENT=起始值;

    如:指定起始值为5

    CREATE TABLE tb (
        id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(30),
        age INT
    ) AUTO_INCREMENT=5;

    创建好以后修改起始值

    ALTER TABLE 表名 AUTO_INCREMENT=起始值;
    备注:DELETETRUNCATE 对自增长的影响
    
    DELETE:删除所有的记录之后,自增长没有影响。
    TRUNCATE:删除以后,自增长又重新开始。

    唯一约束

    唯一约束: 表中某一列不能出现重复的值

    基本格式

    字段名 字段类型 UNIQUE

    如:tb表中的 name 字段中的记录不能出现重复的

    CREATE TABLE tb (
        id INT,
        name VARCHAR(30) UNIQUE,
        age INT
    );

    非空约束

    非空约束:某一列不能为null

    基本语法格式

    字段名 字段类型 NOT NULL

    如:tb表中的 id 字段不能出现null

    CREATE TABLE tb (
        id INT NOT NULL,
        name VARCHAR(30),
        age INT
    );

     

    默认值

    基本语法格式

    字段名 字段类型 DEFAULT 默认值

    如:tb表中的 age 字段的默认值为18

    CREATE TABLE tb (
        id INT,
        name VARCHAR(30),
        age INT DEFAULT 18
    );

    外键约束

    创建外键约束

    新建表时增加外键

    CONSTRAINT 外键约束名称 FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)

    如:

    主表

    CREATE TABLE tb1 (
        id INT,
        name VARCHAR(30),
        age INT,
        PRIMARY KEY(id)
    );

    从表

    CREATE TABLE tb2 (
        card INT,
        name VARCHAR(30),
        age INT,
        CONSTRAINT tb2_card FOREIGN KEY(card) REFERENCES tb1(id)
    );

    从表的外键card,与主表的主键id关联,从表中外键约束的名为tb2_card。

    已有表增加外键

    ALTER TABLE 从表 ADD CONSTRAINT 外键约束名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主键字段名);

    如:

    表1

    CREATE TABLE tb1 (
        id INT,
        name VARCHAR(30),
        age INT,
        PRIMARY KEY(id)
    );

    表2

    CREATE TABLE tb2 (
        card INT,
        name VARCHAR(30),
        age INT,
    );

    在tb2表中添加外键约束,外键字段为card。连接tb1表中的主键,主键字段为id:

    ALTER TABLE tb2 ADD CONSTRAINT tb2_card FOREIGN KEY(card) REFERENCES tb1(id);

    删除外键约束

    ALTER TABLE 从表 DROP FOREIGN KEY 外键名称;

    外键的级联

    级联操作:在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作。

    级联操作语法

    描述

    ON UPDATE CASCADE

    级联更新,只能是创建表的时候创建级联关系。更新主表中的主键,从表中的外键列也自动同步更新

    ON DELETE CASCADE

    级联删除

    举例:

    创建tb1表

    CREATE TABLE tb1 (
        id INT,
        name VARCHAR(30),
        age INT,
        PRIMARY KEY(id)
    );

    创建tb2表

    -- 创建 tb2 表,添加级联更新和级联删除
    CREATE TABLE tb2 (
        card INT,
        name VARCHAR(30),
        age INT,
        CONSTRAINT tb2_card FOREIGN KEY(card) REFERENCES tb1(id)
                     ON UPDATE CASCADE
                     ON DELETE CASCADE 
    );

    这个时候,如果我们向tb1表中插入数据:

    INSERT INTO tb1 (id, name, age) VALUES (1001, 'LeeHua', 22)

    那么,tb2中的card字段也会更新。

    这个时候,如果主表执行删除,则会自动删除从表中的相应记录。

  • 相关阅读:
    U盘PE系统下安装WIN2003和WINXP的方法(非GHOST版)
    自己做U盘急救杀毒
    Windows Server 2003 SP2 企业版 ISO 下载 629M
    解决开机关机慢问题
    一般处理程序
    [转]iframe自适应高度详解(希望对大家有用)非常经典,非同凡响
    ie6下position fixed的失效bug
    php文件上传MAX_FILE_SIZE不起作用的问题
    IE6测试网页显示空白页面
    自己写的面向过程php验证码
  • 原文地址:https://www.cnblogs.com/liyihua/p/12310525.html
Copyright © 2011-2022 走看看