zoukankan      html  css  js  c++  java
  • MySQL常见约束分析

    MySQL的约束是一种限制,用于限制表中的数据,为了保证表中数据的准确性和可靠性。

    分类

    六大约束:

    •  NOT NULL :非空,用于保证该字段的值不能为空。例如学生表的学生姓名及学号等等。
    •  DEFAULT:默认值,用于保证该字段有默认值。例如学生表的学生性别
    •  PRIMARY KEY:主键,用于保证该字段的值具有唯一性并且非空。例如学生表的学生学号等。
    •  UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空。例如注册用户的手机号,身份证号等。
    •  CHECK:检查约束(MySql不支持),检查字段的值是否为指定的值。
    •  FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某些的值。例如学生表的专业编号

    添加约束的时机

    •  创建表时
    •  修改表时

    约束的添加分类

    •  列级约束:六大约束语法上都支持,但外键约束没有效果
    •  表级约束:除了非空、默认、其它的都支持。

    添加列级约束   

    create table if not exists t_stuinfo(
        id int primary key,                         #主键
        stuName varchar(20) not null,                #非空
        gender char(1) check(gender='' or gender=''),    #检查约束,MySql没有效果但不报错
        seat int unique,                        #唯一约束
        age int default 18,                      #默认(值)约束
        majorId int references major(id)            #外键约束,MySql没有效果,但不报错
    );

    添加表级约束

    语法:在创建表字段的最下面

    constraint 约束名 约束类型(字段名)
    create table if not exists t_stuinfo(
        id int,
        stuName varchar(20),
        gender char(1),
        seat int,
        age int,
        majorId int,
        constraint pk primary key(id),                      #约束名随意,主键不生效,但不报错。
        constraint uq unique(seat),                         #唯一约束
        constraint ck check(gender='' or gender=''),    #检查约束,MySql不支持此约束,不报错但不生效
        constraint fk_stuinfo_major foreign key(majorId) references major(id)    #外键约束
    ); 

    主键和唯一的区别

    约束名称 保证唯一性 是否允许为空 一个表中可以有多少个 是否允许组合
    主键 × 最多有1个,可以没有 √(不推荐)
    唯一 可以有多个 √(不推荐)

    外键:

    • 要求在从表中设置外键关系
    • 从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求。
    • 主表的关联列必须时一个Key(一般为主键或唯一,外键也可以但无意义)
    • 插入数据时,先插入主表,再插入从表;删除数据时,先删除从表,再删除主表

    修改表时添加约束

    添加非空约束

    alter table 表名称 modify column 列名 列类型 not null;

    添加默认约束

    alter table 表名称 modify column 列名 列类型 default 默认值;1 

    添加主键

    列级约束方式
    alter table 表名称 modify column 列名 列类型 primary key;
    表级约束方式
    alter table 表名称 add primary key(id);

    添加唯一

    列级约束
    alter table 表名称 modify column 列名 列类型 unique;
    表级约束
    alter table 表名称 add unique(列名称);

    添加外键

    列级写法可行,但无效果
    表级约束
    alter table 表名称 add constraint fk_stuinfo_magor foreign key(magorId) references major(id);

    添加通用写法(语法)

    列级约束 
    alter table 表名称 modify column 列名 列类型 新约束;
    表级约束
    alter table 表名称 add constraint 约束名 约束类型(列名称) [外键的引用];

    修改表时删除约束

    删除非空约束

    alter table 表名称 modify column 列名 列类型 [null];

    删除默认约束

    alter table 表名称 modify column 列名 列类型;

    删除主键

    alter table 表名称 modify column id int;
    alter table 表名称 drop primary key;

    删除唯一

    alter table 表名称 drop index(索引名) 设置唯一时的名称;

    删除外键

    alter table 表名称 drop foreign key(索引名) 设置外键时的名称;

    标识列

      又称为自增长列,可以不用手动的插入值,系统提供默认的序列值。特点:

    • 标识列必须和一个Key搭配(Key指主键、唯一、外键....)
    • 一个表最多有一个标识列
    • 标识列的类型只能是数值型
    • 标识列可以通过SET auto_increment_increment = 3;设置步长(全局),可以通过插入行时手动插入标识列值设置起始值。

    创建表时设置标识列

    create table user(
        id int primary key auto_increment,
        name varchar(20)
    );

    修改表时设置标识列

    alter table 表名称 modify column id int primary key auto_increment;

    修改表时删除标识列

    alter table 表名称 modify column id int primary key;
  • 相关阅读:
    第二十四篇 玩转数据结构——队列(Queue)
    第二十三篇 玩转数据结构——栈(Stack)
    第二十二篇 玩转数据结构——构建动态数组
    第二十一篇 Linux中的环境变量简单介绍
    第二十篇 Linux条件测试语句相关知识点介绍
    第十九篇 vim编辑器的使用技巧
    第十八篇 Linux环境下常用软件安装和使用指南
    第十六篇 nginx主配置文件参数解释
    RAID磁盘阵列是什么(一看就懂)
    如何删除顽固文件或文件夹?
  • 原文地址:https://www.cnblogs.com/johnvwan/p/15637097.html
Copyright © 2011-2022 走看看