十一:约束

约束是一种限制,用于限制表中的数据

 

约束6大类:

  1. not null  非空

  2.default 默认

  3.Primary key 主键,用于保证该字段的值具有唯一性,并且非空,例如学号,身份证号这样

  4. unique:唯一,用于保证该字段的值具有唯一性,可以为空,比如座位号

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

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

 

添加约束的时机

  1.创建表时

  2.修改表时

约束的添加分类

  列级约束:

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

# 添加列级约束,形式是相当于修改列的类型一样,在后面加上约束即可
ALTER TABLE runaway MODIFY COLUMN stuname VARCHAR(10)  UNIQUE ;
添加列级约束
# 添加表级约束
ALTER TABLE runaway ADD UNIQUE(gender);
添加表级约束
alter table 表名 drop foreign key 外码名;
删除表级约束,好像通过这种方式只能删除主键

 

  表级约束:

    除了非空、默认、其他支持

 

 

主键与唯一对比(重点)

        保证唯一性  是否允许为空   一个表中可以有多少个  是否允许组合

  主键     可以      不可以        最多有一个    是(如果组和那么唯一特性是组合的都相同)

  唯一     可以      可以        可以有多个      

 

外键重点: 

  1.要求在从表设置主外键关系

  2.从表的外键列的类型和主表的关联列的类型要求一直或者兼容,名称无要求

  3.主表的关联列必须是一个key(一般是主键或唯一)

  4.插入数据时,先插入主表再插入从表,

  5.删除数据时,先插入从表,在删除主表

 

修改表时添加约束:

  1.添加列级约束

    alter table 表名 modify  column 字段名 字段类型 约束

  2. 添加表级约束

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

  3. 删除主键

    alter table 表名 modify column 字段名 字段类型 (约束类型不写)

     

 

# 标识列   自增长列 auto_increment(只会往后增长),标识列不一定和主键搭配,但要求是一个key,且一个表最多有一个标识列

  含义:可以不用手动的插入值,系统默认的序列值

  例如将id设置为标识列  id INT PRIMARY KEY AUTO_INCREMENT

  标识列只能是数值型(整形或者小数都行)

 

 

例如

CREATE TABLE lenss(
    lenssid INT PRIMARY KEY,
    lenssname VARCHAR(10) NOT NULL

);
CREATE TABLE classa(
    id INT PRIMARY KEY AUTO_INCREMENT,
    stuname VARCHAR(10) NOT NULL,
    desknumber INT UNIQUE,
    gender CHAR DEFAULT 'm',
    lenssid INT,
    CONSTRAINT wj_class_lenss 
    FOREIGN KEY(lenssid) REFERENCES lenss(lenssid)
    
);
约束,外键等的应用,注意外键只能在表级约束中有效

 

 

 

 

总结:

主键与唯一:

  1.区别:

    1.一个表至多有一个主键,但可以有多个唯一

    2.主键不允许为空,唯一可以为空

  2.相同点

    1.都具有唯一性

    2.都支持组合键

 外键

posted @ 2020-12-21 20:04  晴晴小可爱的小弟  阅读(99)  评论(0编辑  收藏  举报