MySql——约束详解

MySql中建表时可以向字段设置约束条件,下面就说一下这几种约束。

主键约束(不可以为空)

它能够唯一确定一张表中的一条记录,也就是我们通过某个字段添加约束,就可以使得该字段不重复且不为空。
在创建表时设置主键约束
在 CREATE TABLE 语句中,主键是通过PRIMARY KEY 关键字来指定的。
在定义列的同时指定主键,语法规则如下:

--<字段名> <数据类型>  PRIMARY KEY  [默认值](默认值可设置可不设置)
create table student1(
    code int primary key, --加主键约束
      name varchar(50) not null unique,
    sex char(2)
    phone char(18),
    age int,
      enter_time date,
);

选取设置主键约束的字段

主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键应该遵守下面的规则:

每个表只能定义一个主键。
主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是唯一性原则。
一个列名只能在复合主键列表中出现一次。
复合主键不能包含不必要的多余列。当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,那么这个复合主键是不正确的。这是最小化原则。

设置主键的作用

作为一条数据的唯一标识,像每个人的身份证一样。

1)一般加在无意义的字段上,如 id

2)标主键字段的要求:值不重复且值具有唯一性。主键不能为空

3)可以设置“单字段主键”和“多字段主键(复合主键)”,用多个字段确定唯一性

4)primary书写时可省略

自增约束

auto_increment(关键字) 管理值自动增长

特点:

(1)一个表只能有一个自增约束,因为一个表只有一个维护自增值的变量。
(2)自增约束的列只能是整数列
(3)自增约束的列必须是键列(主键,唯一键,外键),
实际中一般是主键自增最多

create table 表明(
    id int praimary key auto_increment,--自增约束
    name varchar(20)
);

建表后增加自增

alter table 表名 modify 字段名 数据类型 auto_increment;

如何取消自增

alter table 表名 modify 字段名 数据类型;

唯一约束(可以为空)

约束修饰得字段的值不可以重复

字段唯一约束的说明:

UNIQUE约束唯一标识数据库表中的每条记录 不能重名
(1)、唯一约束可以保证记录的唯一性,即就是同一个表中,相同字段的值不会出现重复。
(2)、唯一约束的字段可以为空值(NULL)。
(3)每一张数据表可以存在多个唯一约束字段。

添加约束条件

alter table 表名 add unique(字段);

删除唯一约束

alter table 表名 drop index name 字段;

modife添加

alter table 表名 modify 字段 数据类型 unique;

--建表时约束
create table 表名(
    id int,
    name varchar(20) ,
    unique(name)
);

create table 表名(
    id int,
    name varchar(20) unique
);

create table 表名(
    id int,
    name varchar,
    unique(id,name)//两个键在一起不重复就可以
);

总结:
1、建表的时候就可以添加约束
2、可以使用alter。。。add。。。
alter。。。modif。。。
4、删除alter。。。drop。。。

非空约束

修饰的字段不能为空 NULL
not null约束字段不可为空

create table 表名(
id int,
name varchar(20) not null,//创建id和name字段 id可以为空 name不可
);

在这里插入图片描述
在这里插入图片描述

默认约束

就是当我们插入字段值的时候,如果没有传值,就会使用默认值
default关键字

create table 表名(
id int,
name varchar(20),
age int default 10--设置默认值为10
)

在这里插入图片描述

–未传值,就会使用默认值
insert into 表名 (id,name) values (1,‘zhangsan’);
在这里插入图片描述
–传了值,就不会使用默认值
insert into 表名 values(1,‘zhangsan’,19);
在这里插入图片描述

外键约束

涉及到两个表:父表,子表
主表,副表
forenign key关键字
在这里插入图片描述

--班级
create table classes(
    id int primary key,
    name varchar(20)
);

--学生表
create table students(
    id int primary key,
    name varchar(20),
    class_id int,
    forenign key(class_id references classes(id))
);



insert into calsses values(1,'一班');
insert into calsses values(2,'二班');
insert into calsses values(3,'三班');
insert into calsses values(4,'四班');

--向学生表(副表/子表)添加值
insert into students values(1001,'张三',1);
insert into students values(1002,'张三',2);
insert into students values(1003,'张三',3);
insert into students values(1004,'张三',4);

在这里插入图片描述
–1主表(父表)classes中没有的数据值,在副表(子表)中,是不可以使用的。
–2主表中的记录被副表引用,是不可以被删除的。

猜你喜欢

转载自blog.csdn.net/m0_47605113/article/details/110640656