文章目录
一、MySQL约束类型
概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。
分类:
约束名称 | 描述 |
---|---|
NOT NULL | 非空约束 |
UNIQUE | 唯一约束,取值不允许重复, |
PRIMARY KEY | 主键约束(主关键字),自带非空、唯一、索引 |
FOREIGN KEY | 外键约束(外关键字) |
DEFAULT | 默认值(缺省值) |
二、MySQL约束类型举例
1. NOT NULL约束
非空约束:not null,某一列的值不能为null
- 创建表时添加约束
CREATE TABLE stu(
id INT,
NAME VARCHAR(20) NOT NULL – name为非空
); - 创建表完后,添加非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL; - 删除name的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20);
drop table if EXISTS author;
CREATE TABLE author(
aut_id varchar(8) NOT NULL,
aut_name varchar(50) NOT NULL,
country varchar(25) NOT NULL,
home_city varchar(25) NOT NULL
);
2. UNIQUE约束
唯一约束:unique,某一列的值不能重复
- 注意:
唯一约束可以有NULL值,但是只能有一条记录为null - 在创建表时,添加唯一约束
CREATE TABLE stu(
id INT,
phone_number VARCHAR(20) UNIQUE – 手机号
); - 删除唯一约束
ALTER TABLE stu DROP INDEX phone_number; - 在表创建完后,添加唯一约束
ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;
drop table if EXISTS author;
CREATE TABLE IF NOT EXISTS author(
aut_id varchar(8) NOT NULL ,
aut_name varchar(50) NOT NULL,
country varchar(25) NOT NULL,
UNIQUE (aut_id)
);
drop table if EXISTS author;
CREATE TABLE IF NOT EXISTS author(
aut_id varchar(8) NOT NULL UNIQUE ,
aut_name varchar(50) NOT NULL,
country varchar(25) NOT NULL
);
3. PRIMARY KEY约束
primary key
-
注意:
1. 含义:非空且唯一
2. 一张表只能有一个字段为主键
3. 主键就是表中记录的唯一标识 -
在创建表时,添加主键约束
create table stu(
id int primary key,-- 给id添加主键约束
name varchar(20)
); -
删除主键
(错误的方式) alter table stu modify id int ;
ALTER TABLE stu DROP PRIMARY KEY; -
创建完表后,添加主键
ALTER TABLE stu MODIFY id INT PRIMARY KEY; -
自动增长: AUTO_INCREMENT 约束
-
概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长
-
在创建表时,添加主键约束,并且完成主键自增长
create table stu(
id int primary key auto_increment, – 给id添加主键约束
name varchar(20)
); -
删除自动增长
ALTER TABLE stu MODIFY id INT; -
添加自动增长
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
-
主键只能有一个
但是可以由多个字段构成联合主键
drop table if EXISTS author;
CREATE TABLE author(
aut_id int PRIMARY KEY,
aut_name varchar(50) NOT NULL,
country varchar(25) NOT NULL
);
drop table if EXISTS author;
CREATE TABLE author(
aut_id varchar(8),
aut_name varchar(50) NOT NULL,
country varchar(25) NOT NULL,
PRIMARY KEY (aut_id)
);
drop table if EXISTS author;
CREATE TABLE author(
aut_id varchar(8) not null,
aut_name varchar(50) NOT NULL,
country varchar(25) NOT NULL,
PRIMARY KEY (aut_id, country)
);
4. AUTO_INCREMENT约束
需要配合主键使用
drop table if EXISTS author;
CREATE TABLE author(
aut_id varchar(8) PRIMARY KEY AUTO_INCREMENT,
aut_name varchar(50) NOT NULL,
country varchar(25) NOT NULL
);
5. DEFAULT约束
drop table if EXISTS author;
CREATE TABLE IF NOT EXISTS author(
aut_id varchar(8) NOT NULL UNIQUE ,
aut_name varchar(50) NOT NULL,
country varchar(25) DEFAULT '中国'
);
6. FOREIGN KEY约束
外键约束:foreign key,让表于表产生关系,从而保证数据的正确性。
-
在创建表时,可以添加外键
* 语法:
create table 表名(
…
外键列
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
); -
删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称; -
创建表之后,添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称); -
级联操作:(慎重操作)
在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作
1. 添加级联操作
语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称
FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE ;
2. 分类:
1. 级联更新:ON UPDATE CASCADE
2. 级联删除:ON DELETE CASCADE
外键可以建立多个,多个外键接着写就行了
外键会产生的效果
1、删除表时,如果不删除引用外键的表,被引用的表不能直接删除2、外键的值必须来源于引用的表的主键字段
语法:
FOREIGN KEY [column list] REFERENCES [primary key table] ([column list]);
drop table if EXISTS author;
CREATE table author(
aut_id int PRIMARY key auto_increment,
aut_name VARCHAR(10) not null,
country VARCHAR(20) DEFAULT '中国'
);
drop table if EXISTS book;
CREATE TABLE IF NOT EXISTS book(
book_id int PRIMARY key auto_increment,
book_name varchar(50) ,
aut_id int ,
book_price decimal(8,2) ,
FOREIGN KEY (aut_id) REFERENCES author(aut_id)
);
INSERT into author (aut_name) VALUES('张妈');
INSERT into book (book_name,aut_id) VALUES('王阳明大传2',2);