MySQL的约束

主键约束

能够唯一确定一张表中的一条记录,通过给某个字段添加约束,就可以使得该字段不重复且不为空

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

上图中的PRI表示主键

insert into user/*表名下同*/ values(1, "张三");   /*此处可以运行*/
insert into user values(1, "李四");
insert into user values(null, "王五");
/*后面两行不能运行*/

联合主键

有时需要多个字段联合起来才能作为主键确定表中唯一一条记录

create table user2(
        id int,
        name varchar(20),
        password varchar(20),
        primary key(id, name)
);

添加记录

不会报错,因为是使用id和name作为联合主键,联合主键中任何一个字段不能为空(添加记录时)

自增约束

create table user3(
    id int primary key auto_increment,
    /*效果就是管控id的值,让他可以自动增长*/
    name varchar(20)
);

自增约束可以在添加使用时该主键的值为null,如下

insert into user1 value(null,"李四");

修改表结构

创建表时忘记创建主键

add
create table user2(
    id int,
    name varchar(20)
);

describe user2; /*可以使用缩写desc*/
alter table user2/*表名*/
add primary key(id/*需要添加的主键*/);
modify
alter table user2 modify id int primary key;

删除主键

alter table user2 drop primary key;

唯一约束

MySQL 唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。如果其中一条记录的 id 值为’0001’,那么该表中就不能出现另一条记录的 id 值也为’0001’。

唯一约束与主键约束相似的是它们都可以确保列的唯一性。不同的是,唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值,但是只能有一个空值。而主键约束在一个表中只能有一个,且不允许有空值。比如,在用户信息表中,为了避免表中用户名重名,可以把用户名设置为唯一约束。

create table user4(
    id int,
    name varchar(20)
);

alter table user4 add unique(name);

desc user4

会出现一个key = UNI

第二个就会报错,因为要求name是唯一的

在创建时定义唯一约束

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

desc user5;

下面这种就是两个键加起来不重复就是ok的,并不是强制要救如果一个重复就报错

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

desc user6;

创建后添加唯一约束

add

alter table user5/*表名字*/ add constraint unique(name/*要添加唯一约束的字段*/);

modify

alter table user5/*表名字*/ modify id int/*要添加唯一约束的字段名及其数值类型及空间*/ unique;

删除唯一约束

alter table user5/*表名*/ drop index name/**唯一约束名/;

非空约束

MySQL 非空约束(NOT NULL)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。

create table user7(
    id int,
    name varchar(20) not null  /*此处添加的not null就是非空约束*/
);

如果只添加了id的值,比如

insert into user7 (id) values (7);

会报错类似 (1364 – Field ‘name’ doesn’t have a default value) 的错误

默认约束

create table user8(
    id int,
    name varchar(20),
    age int default 10  /*此处指定了默认值,插入时未指定时使用,如果有值就会被覆盖*/
);

上面这种就是10就是为指定时是哟个默认值,21就是把10覆盖的那个值

外键约束

MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。(也可以是主表和附表)

外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。

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

create table students(
    id int primary key,
    name varchar(20),
    class_id int,
    foreign key(class_id/*本表中作为外键的字段*/)
            references classes/*主表*/(id/*主表中与附表外键相关联的字段*/)
);
insert into classes  values (1, "一班");
insert into classes  values (2, "二班");
insert into classes  values (3, "三班");
insert into classes  values (4, "四班");

insert into students values (1001, "david", 1);
insert into students values (2001, "lily", 2);
insert into students values (5001, "lisa", 5); /*这一行会报错*/
/*附表要参照主表去添加,如果主表中不存在这个值,则会报错*/

报错: (1452 – Cannot add or update a child row: a foreign key constraint fails\ (test.students, CONSTRAINT students_ibfk_1 FOREIGN KEY (class_id) REFERENCES classes (id)))

delete from classes where  name = "一班";
/*注意主表的值被附表引用时,那么主表中该条数据记录就不能被删除,除非把对应的附表记录先删除,
或者就做软删除,即用户看不到,但是数据库中还是存在这条记录*/

报错: (1451 – Cannot delete or update a parent row: a foreign key constraint fails\ (test.students, CONSTRAINT students_ibfk_1 FOREIGN KEY (class_id) REFERENCES classes (id)))

Original: https://www.cnblogs.com/wojiuyishui/p/16494212.html
Author: 我就一水
Title: MySQL的约束

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578672/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球