mysql学习之旅(四)——mysql的约束

mysql的约束

什么是约束

约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。
例如:
在这里插入图片描述
要对表中图书编号这一列进行约束,以保证每个图书具有的唯一性。

约束的类型

mysql中常见的几种约束类型

约束类型 非空约束 主键约束 唯一约束 默认约束 外键约束
关键字 NOT NULL PRIMARY KEY UNIQUE DEFAULT FOREIGN KEY

1、非空约束:被非空约束的某一列不能为空
2、主键约束:约束表中的一行,那么通过主键即可找到表中的这一行,不能重复,不能为空
3、唯一约束:他指定表中一列的值不能有重复
4、默认约束:当插入字段时,如果没有为字段设置约束,那么就会自动设置为默认约束。
5、外键约束:用来在两个表的数据之间建立联系。通过外键约束可以保证数据的一致性和完整性。
例如:
图书编号:不能为空,不能重复,还要标识唯一的图书信息,因此只能选择主键约束。
类别编号:应该通过类别编号知道类别名称,所以应该设计为外键约束
书名:不能为空,不能重复,设计为非空约束和唯一约束。
作者:不能为空,可以重复,设计为非空约束
价格:不能为空,设计为非空约束
出版社:如果某个出版社比较多的话,可以设计为默认约束
出版时间:非空约束
库存:非空约束
在这里插入图片描述类别编号:不能为空,且标识类别的唯一,应该设计为主键约束
类别名称:不能重复,不能为空,非空约束和唯一约束
父类别:非空约束
在这里插入图片描述身份证号:主键
姓名:非空约束
性别:非空约束
年龄:非空约束
联系电话:非空约束
余额:默认约束
在这里插入图片描述
单独一列图书编号和身份证号都不适合作为主键,图书编号作为主键,那么说明一本书只能借一次,身份证号作为主键说明一个身份证只能借一次,都不行,因此可以采用图书编号和身份证号作为组合主键约束。

非空约束

理解什么是非空

空值:NULL:字段值可以为空

非空值:NOT NULL :字段值禁止为空,如果使用了非空约束的字段用户再添加数据时没有指定值,那么数据库系统会报错

语法规则
列名 数据类型 NOT NULL

非空约束,户名思议就是指定字段的值不能为空,

掌握添加非空约束的方法

1、创建表时添加非空约束:
CREATE TABLE bookinf(
book_id INT,
book_name VARCHAR(20) NO NULL
);

2、通过修改表的方式添加非空约束
CREATE TABLE bookinf(
book_id INT,
book_name VARCHAR(20)
);
ALTER TABLE bookinfo MODIFY book_name VARCHAR(20) NOT NULL;

3、删除非空约束:
ALTER TABLE bookinfo MODIFY book_name VARCHAR(20) [NULL];
eg:
mysql> create table bookinfo(
-> book_id int,
-> book_name varchar(10) not null
-> );
alter table bookinfo modify book_name varchar(20);

主键约束

理解主键约束的作用

主键约束要求主键列的数据唯一,并且不许为空,主键能够唯一的标识表中的一条记录。
主键可以和外键结合表示与其他表的关系,并且可以加快数据库查询的速度,一张表最多有一个主键约束。

主键的类型

一、单字段主键:

1、在定义列的同时指定主键
列名 数据类型 PRIMARY KEY;

2、在列定义的后边指定主键
[CONSTAINT<约束名>] PRIMARY KEY (列名);
例如:
1、mysql> create table bookinfo(
-> book_id int primary key,
-> book_name varchar(20) not null
-> );
2、mysql> create table bookinfo(
-> book_id int,
-> book_name varchar(20) not null,
-> constraint pk_id primary key(book_id)
-> );

二、多字段联合主键(复合主键)

主键有多个字段(列)联合组成。
PRIMARY KEY(字段1,字段2,…字段n);
1、创建表的时候添加主键
例如:
CREATE TABLE borrowinfo(
book_id INT,
card_id CHAR(18),
PRIMARY KEY(book_id,card_id)
);

2、通过修改表为列添加主键
CREATE TABLE bookinfo(
book_id INT,
book_name VARCHAR(20) NOT NULL
);
ALTER TABLE bookinfo MODIFY book_id INT PRIMARY KEY;
ALTER TABLE bookinfo ADD PRIMARY KEY(book_id);
ALTER TABLE bookinfo ADD CONSTRAINT PK_ID PRIMARY KEY(book_id);

删除主键约束的方法

删除主键
ALTER TABLE bookinfo DROP PRIMARY KEY;

唯一约束

唯一约束要求该列唯一,允许为空,唯一约束可以确保一列或者几列不出现重复值。

创建唯一约束

语法规则:
1、定义完列之后直接指定唯一约束:
列名 数据类型 UNIQUE
2、定义完所有列之后指定唯一约束:
[CONSTAINT<约束名>] UNIQUE(<列名>)

例如:
1、创建表的时候添加唯一约束
CREATE TABLE bookinfo(
book_id INT PRIMARY KEY,
book_name VARCHAR(20) UNIQUE NOT NULL
);
或者:
CREATE TABLE bookinfo(
book_id INT PRIMARY KEY,
book_name VARCHAR(20) NOT NULL,
CONSTRAINT uk_bname UNIQUE(book_name)
);
2、修改表的时候添加唯一约束
1、ALTER TABLE bookinfo MODIFY book_name varchar(20) UNIQUE;
2、ALTER TABLE bookinfo ADD UNIQUE (book_name);
3、ALTER TABLE bookinfo ADD CONSTRAINT uk_bname UNIQUE (book_name);

eg:
mysql> create table bookinfo(
-> book_id int primary key,
-> book_name varchar(20) not null unique
-> );

删除唯一约束的方法

删除唯一约束
ALTER TABLE bookinfo DROP INDEX uk_banme
ALTER TABLE bookinfo DROP KEY uk_bname

首先需要知道唯一约束的名称:show create table bookinfo;
在这里插入图片描述alter table bookinfo drop key book_name;

唯一约束与主键约束的区别

一个表中可以有多个UNIQUE的声明,但是只能有一个PRIMARY KEY的声明
声明为PRIMARY KEY的列不允许有空值,但是声明为UNIQUE的列允许有空值。

默认约束

理解默认约束的作用

默认约束指定某列的默认值
语法规则:
列名 数据类型 DEFAULT 默认值

掌握添加和删除默认约束的方法

1、创建表时添加约束的方法
CREATE TABLE bookinfo(
book_id INT PRIMARY KEY,
press VARCHAR(20) DEFAULT’机械工业出版社’
);
在这里插入图片描述

2、修改表时添加约束的方法
ALTER TABLE bookinfo MODIFY press VARCHAR(10) DEFAULT’机械工业出版社’;

ALTER TABLE bookinfo ALTER COLUMN press SET DEFAULT’机械工业出版社’;

在这里插入图片描述

删除约束

ALTER TABLE bookinfo MODIFY press VARCHAR(20);
ALTER TABLE bookinfo ALTER COLUMN press DROP DEFAULT;

外键约束

理解外键约束的作用

外键用来在两个表的数据之间建立连接,它可以是一列或者多列,一个表可以有一个或者多个外键。
外键对应的是参照完整性,一个表的外键可以为空值,若不是空值,则每一个外键值必须等于另一个表中主键的某个值。
外键的作用是保持数据的一致性和完整性
在这里插入图片描述外键和其对应的主键的如果是字符长度可以不一致,如果是否有符号位必须一致。

掌握添加和删除外键约束的方法

语法格式:
[CONSTRAINT<外键约束名>] FOREIGN KEY (列名) references <主表名>(主键)
1、创建表时添加约束的方法
CREATE TABLE bookcategory(
category_id INT PRIMARY KEY,
category VARCHAR(20),
parent_id INT
);
CREATE TABLE bookinfo(
book_id INT PRIMARY KEY,
book_category_id INT,
CONSTRAINT fk_cid FOREIGN KEY(book_category_id) REFERENCES bookcategory(category_id)
);
2、修改表时添加外键约束
ALTER TABLE bookinfo ADD FOREIGN KEY(book_category_id) REFERENCES bookcategory(category_id);
3、删除外键约束
ALTER TABLE bookinfo DROP FOREIGN KEY fk_cid;
例子:
mysql> create table bookcategory(
-> category_id int primary key,
-> category varchar(20),
-> parent_id int
-> );
Query OK, 0 rows affected (0.86 sec)
mysql> create table bookinfo(
-> book_id int primary key,
-> book_category_id int,
-> constraint fk_cid foreign key(book_category_id) references bookcategory(category_id)
-> );
Query OK, 0 rows affected (0.87 sec)
删除外键:
mysql> alter table bookinfo drop foreign key fk_cid;
修改外键:
mysql> alter table bookinfo add foreign key(book_category_id) references bookcategory(category_id);

4、外键约束的参照操作:

CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行
CREATE TABLE bookinfo(
book_id INT PRIMARY KEY,
book_category_id INT,
CONSTRAINT fk_cid FOREIGN KEY(book_category_id) REFERENCES bookcategory(category_id) ON DELETE CASCADE
);

发布了19 篇原创文章 · 获赞 2 · 访问量 1240

猜你喜欢

转载自blog.csdn.net/weixin_38377637/article/details/100112120