• MySQL约束


    转自:https://blog.csdn.net/a909301740/article/details/62887992

    MySQL中的约束,添加约束,删除约束,以及其他的一些修饰:
    一.NOT NULL(非空约束)

    添加非空约束

    1)建表时直接添加

    CREATE TABLE t_user(user_id INT(10) NOT NULL);

    2)通过ALTER 语句

    ALTER TABLE t_user MODIFY user_id INT(10) NOT NULL;

    ALTER TABLE t_user CHANGE user_id user_id INT(10) NOT NULL;

    删除非空约束

    1)ALTER TABLE t_user MODIFY user_id INT(10);

    2)ALTER TABLE t_user CHANGE user_id user_id INT(10);


    二.UNIQUE(唯一约束)

    添加唯一约束

    1)建表时直接添加

    CREATE TABLE t_user(user_id INT(10) UNIQUE);

    CREATE TABLE t_user(

    user_id INT(10),

    user_name VARCHAR(30),

    CONSTRAINT UN_PHONE_EMAIL UNIQUE(user_id,user_name)#复合约束

    );

    CREATE TABLE t_user(

    user_id INT(10),

    UNIQUE KEY(user_id)

    );

    2)通过ALTER语句

    ALTER TABLE t_user MODIFY user_id INT(10) UNIQUE;

    ALTER TABLE t_user CHANGE user_id user_id INT(10) UNIQUE;

    ALTER TABLE t_user ADD UNIQUE(user_id);

    ALTER TABLE t_user ADD UNIQUE KEY(user_id);

    ALTER TABLE t_user ADD CONSTRAINT UN_ID UNIQUE(user_id);

    ALTER TABLE t_user ADD CONSTRAINT UN_ID UNIQUE KEY(user_id);

    删除唯一性约束

              ALTER TABLE t_user DROP INDEX user_id;

    注:唯一但是可以为空(空和空不相等)

    三.PRIMARY KEY(主键约束)

    添加主键约束

    1)建表时直接添加

    CREATE TABLE t_user(user_id INT(10) PRIMARY KEY);

    CREATE TABLE t_user(

    user_id INT(10),

    user_name VARCHAR(30),

    CONSTRAINT PK_ID_NAME PRIMARY KEY(user_id,user_name)#复合约束

    );

    CREATE TABLE t_user(

    user_id INT(10),

    PRIMARY KEY(user_id)

    );

    2)通过ALTER语句

    ALTER TABLE t_user MODIFY user_id INT(10) PRIMARY KEY;

    ALTER TABLE t_user CHANGE user_id user_id INT(10) PRIMARY KEY;

    ALTER TABLE t_user ADD PRIMARY KEY(user_id);

    ALTER TABLE t_user ADD CONSTRAINT PK_ID PRIMARY KEY(user_id);

    删除主键约束

    1)ALTER TABLE t_user DROP PRIMARY KEY;

    注:主键约束相当于(唯一约束+非空约束)

    一张表中最多有一个主键约束,如果设置多个主键,就会出现如下提示:

    Multiple primary key defined!!!

    删除主键约束前,如果有自增长需要先删除自增长,如果不删除自增长就无法删除主键约束

    四.FOREIGN KEY(外键约束,对应的字段只能是主键或者唯一约束修饰的字段)

    首先创建两张表:class,students

    主表:

    CREATE TABLE class(

    cla_id INT(6) AUTO_INCREMENT PRIMARY KEY,

    cla_name VARCHAR(30) NOT NULL UNIQUE

    );

    从表:

    CREATE TABLE students(

    stu_id INT(10) AUTO_INCREMENT PRIMARY KEY,

    stu_name VARCHAR(30) NOT NULL,

    stu_score FLOAT(5,2) DEFAULT 0.0,

    cla_id INT(10),

    CONSTRAINT FK_CLA_ID FOREIGN KEY(cla_id) REFERENCES class(cla_id)#添加外键约束

    );

    也可以这样添加:

    ALTER TABLE students ADD CONSTRAINT FK_CLA_ID FROEIGN KEY(cla_id) REFERENCES class(cla_id);

    删除外键约束

    ALTER TABLE students DROP FOREIGN KEY FK_CLA_ID;

    #外键中的级联关系有以下几种情况:

    #ON DELETE CASCADE 删除主表中的数据时,从表中的数据随之删除

    #ON UPDATE CASCADE 更新主表中的数据时,从表中的数据随之更新

    #ON DELETE SET NULL 删除主表中的数据时,从表中的数据置为空

    #默认 删除主表中的数据前需先删除从表中的数据,否则主表数据不会被删除

    CREATE TABLE students(

    stu_id INT(10) AUTO_INCREMENT PRIMARY KEY,

    stu_name VARCHAR(30) NOT NULL,

    stu_score FLOAT(5,2) DEFAULT 0.0,

    cla_id INT(10),

    CONSTRAINT FK_CLA_ID FOREIGN KEY(cla_id) REFERENCES class(cla_id) ON DELETE CASCADE

    );

    CREATE TABLE students(

    stu_id INT(10) AUTO_INCREMENT PRIMARY KEY,

    stu_name VARCHAR(30) NOT NULL,

    stu_score FLOAT(5,2) DEFAULT 0.0,

    cla_id INT(10),

    CONSTRAINT FK_CLA_ID FOREIGN KEY(cla_id) REFERENCES class(cla_id) ON UPDATE CASCADE

    );

    CREATE TABLE students(

    stu_id INT(10) AUTO_INCREMENT PRIMARY KEY,

    stu_name VARCHAR(30) NOT NULL,

    stu_score FLOAT(5,2) DEFAULT 0.0,

    cla_id INT(10),

    CONSTRAINT FK_CLA_ID FOREIGN KEY(cla_id) REFERENCES class(cla_id) ON DELETE SET NULL

    );

    注:插入数据时,先插入主表中的数据,再插入从表中的数据。

        删除数据时,先删除从表中的数据,再删除主表中的数据。

    五.CHECK(检查约束)

    CREATE TABLE class(

    cla_id INT(6) AUTO_INCREMENT PRIMARY KEY,

    cla_name VARCHAR(30) NOT NULL UNIQUE,

    CHECK(cla_id>0)

    );

    注:mysql不支持检查约束,但是写上检查约束不会报错

    其他:

    一.AUTO_INCREMENT(自增长)

    添加自增长

    1)在创建表的时候添加

    CREATE TABLE t_user(user_id INT(10) AUTO_INCREMENT PRIMARY KEY);

    2)通过ALTER语句

    ALTER TABLE t_user MODIFY user_id INT(10) AUTO_INCREMENT;

    ALTER TABLE t_user CHANGE user_id user_id INT(10) AUTO_INCREMENT;

    删除自增长

    ALTER TABLE t_user MODIFY user_id INT(10);

    ALTER TABLE t_user CHANGE user_id user_id INT(10);

    注:There can be only one auto column and it must be defined as a key.

    一张表只能有一个自增长列,并且该列必须定义了约束(可以是主键约束,也可以是唯一约束,也可以是外键约束,但是不可以是非空和检查约束)

    不过自增长一般配合主键使用,并且只能在数字类型中使用

    二.ZEROFILL(零填充)

    添加零填充

    1)在创建表的时候添加

    CREATE TABLE t_user(user_id INT(10) ZEROFILL);

    2)通过ALTER语句

    ALTER TABLE t_user MODIFY user_id INT(10) ZEROFILL;

    ALTER TABLE t_user CHANGE user_id user_id INT(10) ZEROFILL;

    删除零填充

    ALTER TABLE t_user MODIFY user_id INT(10);

    ALTER TABLE t_user CHANGE user_id user_id INT(10);

    注:零填充会将未将有效位以外的位用零来显示,比如某字段数据类型为INT(5),而插入的值为2,那么零填充会显示00002

    但是,这个效果在Navicat for MySQL中显示不出来,只有在DOS窗口下才能显示

    三.DEFAULT(默认)

    添加默认约束

    1)在创建表的时候添加

    CREATE TABLE t_user(user_id INT(10) DEFAULT  3);

    2)通过ALTER语句

    ALTER TABLE t_user MODIFY user_id INT(10) DEFAULT  2;

    ALTER TABLE t_user CHANGE user_id user_id INT(10) DEFAULT  2;

    删除默认约束

    ALTER TABLE t_user MODIFY user_id INT(10);

    ALTER TABLE t_user CHANGE user_id user_id INT(10);

    四.UNSIGNED(无符号位)

    添加无符号

    1)在创建表的时候添加

    CREATE TABLE t_user(user_id INT(10) UNSIGNED);

    2)通过ALTER语句

    ALTER TABLE t_user MODIFY user_id INT(10) UNSIGNED;

    ALTER TABLE t_user CHANGE user_id user_id INT(10) UNSIGNED;

    删除无符号

    ALTER TABLE t_user MODIFY user_id INT(10);

    ALTER TABLE t_user CHANGE user_id user_id INT(10);

    注:无符号作用于数值类型

    #从查询information_schema中查询指定表中的约束

    USE INFORMATION_SCHEMA;

    SELECT CONSTRAINT_NAME FROM TABLE_CONSTRAINTS WHERE TABLE_NAME='student';

  • 相关阅读:
    LeetCode 517 超级洗衣机(贪心)
    LeetCode 42 接雨水
    LeetCode 1289 下降路径最小和 II
    LeetCode 828 统计子串中的唯一字符
    LeetCode 363 矩形区域不超过 K 的最大数值和
    LeetCode 1278 分割回文串 III
    201771010128王玉兰《面象对象程序设计(Java)》第七周学习总结
    201771010128 王玉兰《面象对象程序设计(Java)》第六周学习总结
    201771010128 王玉兰《面象对象程序设计 (Java) 》第六周学习总结
    王玉兰201771010128《面象对象程序设计》第四周学习总结
  • 原文地址:https://www.cnblogs.com/feigao/p/8735334.html
Copyright © 2020-2023  润新知