zoukankan      html  css  js  c++  java
  • mysql中约束的添加,修改,与删除

    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';

  • 相关阅读:
    P1144 最短路计数 题解 最短路应用题
    C++高精度加减乘除模板
    HDU3746 Teacher YYF 题解 KMP算法
    POJ3080 Blue Jeans 题解 KMP算法
    POJ2185 Milking Grid 题解 KMP算法
    POJ2752 Seek the Name, Seek the Fame 题解 KMP算法
    POJ2406 Power Strings 题解 KMP算法
    HDU2087 剪花布条 题解 KMP算法
    eclipse创建maven项目(详细)
    maven的作用及优势
  • 原文地址:https://www.cnblogs.com/alexanderthegreat/p/7189753.html
Copyright © 2011-2022 走看看