MySQL常见约束控制(内含例子)

常见约束

含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性

分类:六大约束:

    not null:非空,用于保证该字段的值不能位空

      比如姓名、学号等

    default:默认,用于保证该字段有默认值

      比如性别

    primary key:主键,用于保证该字段的值具有唯一性,并且非空

      比如学号、员工编号等

    unique:唯一,用于保证该字段的值具有唯一性,可以为空

      比如座位号

    check:检查约束【mysql中不支持】

      比如年龄(>18岁到>60岁,就可设置检查约束)、性别

    foreign key:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值

      在从表添加外键约束,用于主表中某列的值 比如student表的majorId字段 引用major表的主表majorId

      比如学生表的专业编号,员工表的部门编号,员工表的工种编号




    添加约束的时机;

        1.创建表时

        2.修改表时

    约束的添加分类:

        列级约束:

            六大约束语法上都支持,但外键约束没有效果

        表级约束:

            除了非空、默认,其它的都支持








    CREATE TABLE 表名(

        字段名 字段类型 列级约束,  #与字段一起的对列进行约束

        字段名 字段类型,

        表级约束  

    );

一、创建表时添加约束

1.添加列级(字段约束)约束

    DROP DATABASE IF EXISTS stus;

    CREATE DATABASE IF NOT EXISTS students;

    USE students;

    CREATE TABLE stuinfo(

        id INT PRIMARY KEY,#主键

        stuName VARCHAR(20) NOT NULL,#非空

        gender CHAR(1) CHECK(gender IN('男','女')),#检查约束

        seat INT UNIQUE,#唯一约束

        age INT DEFAULT,18 #默认约束

        majorId INTFOREIGN KEY REFERENCES major(id)#外键 引用major表中的id

    );




    #major专业表

    CREATE TABLE major(

        id INT PRIMARY KEY,

        majorName VARCHAR(20)

    );

    DESC stuinfo;

    #查看表中所有的索引,包括主键、外键、唯一

    SHOW INDEX FROM stuinfo;

2.添加表级约束

    语法:在各个字段的最下面

    【constraint 约束名】 约束类型(字段名)

        可以省略




    DROP TABLE IF EXISTS stuinfo;

    CREATE TABLE stuinfo(

        id INT,

        stuName VARCHAR(20),

        gender CHAR(1),

        seat INT,

        age INT,

        majorid INT,

        #表级约束constraint约束

        CONSTRAINT pk PRIMARY KEY(id),#为id列添加主键

        CONSTRAINT uq UNIQUE(seat),#唯一键

        CONSTRAINT ck CHECK(gender IN('男','女')),#检查约束

        CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REENCES major(id)#外键    

    );

常见的写法:

    CREATE TABLE IF NOT EXISTS stuinfo(

        id INT PRIMARY KEY,

        stuName VARCHAR(20) NOT NULL,

        gender CHAR(1),

        seat INT UNIQUE,

        age INT DEFAULT 18,

        majorid INT,

        CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)

    );




#两个字段组合成一个主键 或两个字段组合成一个唯一键 但不推荐使用

CREATE TABLE stuinfo(

    id INT,

    stuName VARCHAR(20),

    gender CHAR(1),

    seat INT,

    age INT,

    majorid INT,

    CONSTRAINT pk PRIMARY KEY(id,stuName),#两个列组合成一个主键

    CONSTRAINT uq (seat,seat2),#两个列组合成一个唯一键

    CONSTRAINT ck CHECK(gender IN('男','女')),#检查约束

    CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外键

);

SELECT * FROM stuinfo;

#两个主键不重复 可以插入 插入id与stuName一致时 会出现错误

INSERT INTO stuinfo VALUE(1,'join','男',NULL,18,1);

INSERT INTO stuinfo VALUE(2,'join','女',NULL,19,2);

二、修改表时添加约束

    1.添加列级约束

        alter table 表名 modify colunm 字段名 字段类型 新约束;

    2.添加表级约束

        alter table 表名 add 【constraint 约束名】 约束类型(字段名) 【外键的引用(字段名)】




    DROP TABLE IF EXISTS stuinfo;

    CREATE TABLE stuinfo(

        id INT,

        stuName VARCHAR(20),

        gender CHAR(1),

        seat INT,

        age INT,

        majorid INT

    );

    DESC stuinfo;




#1.添加非空约束

    ALTER TABLE stuinfo MODIFY COLUMN stuName VARCHAR(20) NOT NULL;

#2.添加默认约束

    ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;

#3.添加主键

    #Ⅰ.列级约束

    ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;

    #Ⅱ.表级约束 

    ALTER TABLE stuinfo ADD PRIMARY KEY(id);

    #主键起了名字也是没有效果的

    ALTER TABLE emp2 ADD CONSTRAINT my_emp_id_pk PRIMARY KEY(id);

#4.添加唯一键

    #Ⅰ.列级约束

    ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;

    #Ⅱ.表级约束

    ALTER TABLE stuinfo ADD PRIMARY KEY(id);

#5.添加外键

    #默认的外键名

    ALTER TABLE stuinfo ADD FOREIGN KEY(majorid) REFERENCES major(id);

    SHOW INDEX FROM stuinfo;

    #有名字的外键

    ALTER TABLE stuinfo ADD CONSISTENT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id);

#三、修改表时删除约束

    #1.删除非空约束

        ALTER TABLE stuinfo MODIFY COLUMN stuName VARCHAR(20) NULL;

    #2.删除默认约束

        ALTER TABLE stuinfo MODIFY COLUMN age INT;

    #3.删除主键约束

        ALTER TABLE stuinfo DROP PRIMARY KEY;#【推荐】

        ALTER TABLE stuinfo MODIFY COLUMN id INT;

    #4.删除唯一

        ALTER TABLE stuinfo DROP INDEX seat;#DROP INDEX 唯一键约束名

    #5.删除外键

        ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;

        SHOW INDEX FROM stuinfo;
发布了41 篇原创文章 · 获赞 27 · 访问量 5853

猜你喜欢

转载自blog.csdn.net/weixin_43217564/article/details/100551051
今日推荐