MySQL基础_7.约束

约束是一种限制,用于限制表中的数据,保证表中数据的准确和可靠性;添加约束的时机:1.创表时;2.修改表时

约束的分类

语法 作用 详述
not null 非空 用于保证该字段的值不能为空
default 默认 用于保证该字段有默认值
primary key 主键 用于保证该字段的值具有唯一性 并且非空
unique 唯一 用于保证该字段的值具有唯一性 可以为空
check 检查约束 mysql不支持
foreign key 外键 两表关系,用于保证该字段的值必须来自于主表的关联列的值(在从表添加外键约束, 用于引用主表中某列的值)

 

方式 效果
列级约束 6大约束语法都支持 但外键约束没有效果
表级约束 除了非空 默认 其他都支持
---- ----
单列约束 ....
多列约束 ....

查看表中约束

select * from information_schema.table_constraints where table_name = 'BBS_article2tag';

¤ 查看的是所有的表已经添加的约束

 

约束的使用

create table 表名(
      字段名 字段类型 列级约束(check和外键不支持),
      字段名 字段类型 列级约束(check和外键不支持),
      表级约束)

添加表约束语法

- 用法:constraint 约束名 约束类型(字段名)            # 约束名可以不起
  create table test2(
      id int unique,
      last_name varchar(15),
      email varchar(25),
      salary decimal(10,2),
      constraint uk_test2_email unique(email);
  );

CREATE TABLE stuinfo(
    id INT,
    stuname VARCHAR(20),
    gender CHAR(1),
    seat INT,
    age INT,
    majorid INT,
    PRIMARY KEY(id),
    UNIQUE(seat),
    FOREIGN KEY(majorid) REFERENCES major(id)
);

- 通用写法

create table if not exists stuinfo(
    id int primary key,
    stuname varchar(20) not null,
    sex char(1),
    age int default 18,
    seat int unique,
    majorid int,
    foreign key(majorid) references major(id)
);

 

非空和默认

CREATE TABLE test1(
    id INT,
    last_name VARCHAR(15) NOT NULL,
    email VARCHAR(25),
    salary DECIMAL(10,2)
);

DESC test1;

INSERT INTO test1(id,last_name,email,salary) VALUES(1,'tom','tom@126.com',3399);

ALTER TABLE test1 MODIFY salary VARCHAR(25) NOT NULL;

 

主键和唯一

primary key主键 唯一性,不为空 最多有一个,可以组合
unique 唯一 唯一性,可为空 可以有多个,可以组合

组合主键

create table if not exists stuinfo(
    id int unique,
    stuname varchar(20) not null,
    sex char(1),
    age int default 18,
    primary key(id, stuname),
    foreign key(majorid) references major(id)
);

create table test2(
    id int unique,
    last_name varchar(15),
    email varchar(25) unique,
    salary decimal(10,2)
)

 

外键约束

要求在从表设置外键关系;从表的外键列的类型和主表的对应列的类型要求一致或者兼容;主表的关联列必须是一个key(主键或者唯一键);插入数据时 先插入主表 再插入从表;删除数据时 先删除从表 再删除主表
 

auto_increment

自增长约束,一个表最多只能有一个,必须是主键;如果自增列指定了0或null,会在当前最大值基础上自增,如果指定了具体值,直接赋值为具体值。

posted @ 2022-01-08 04:40  梵高de画笔  阅读(30)  评论(0编辑  收藏  举报