数据库约束
约束作用: 保证数据具有真实的作用和意义
主键约束 primary key
用来标注一条记录的唯一性
特征:
主键字段值唯一(唯一不可重复)
主键列不能包含NULL值
一个表中只能有一个主键,但主键可以是多个字段 (联合主键)
实现方式:
添加主键
在创建表时,添加约束 (字段约束区)
格式
create table 表名 (
字段名称1 字段类型 字段约束区,
字段名称2 字段类型 字段约束区
);
在创建表时,在约束区域添加约束(扩展)
格式1:单一主键
create table 表名 (
字段名称1 字段类型,
字段名称2 字段类型,
primary key(字段名称1)
);
格式2:联合主键
create table 表名 (
字段名称1 字段类型,
字段名称2 字段类型,
primary key(字段名称,字段名称1)
);
在已有表中添加主键(扩展)
alter table 表名 add primary key(字段名称);
# 主键约束
# 方式1: 建表时在字段的约束区添加主键约束
CREATE TABLE user1(
id INT PRIMARY KEY, # 在字段的约束区添加主键约束
`name` VARCHAR(20)
);
INSERT INTO user1 VALUES(1,'tom');
INSERT INTO user1 VALUES(NULL,'tom');
# 方式2: 建表时在约束区添加主键约束
CREATE TABLE user2(
id INT,
`name` VARCHAR(20),
PRIMARY KEY (id)
);
# 方式3: 创建完表后,通过修改表结构添加主键约束
CREATE TABLE user3(
id INT,
`name` VARCHAR(20)
);
# 修改表添加主键
ALTER TABLE user3 ADD PRIMARY KEY (id);
# 联合主键
CREATE TABLE user4(
id INT,
`name` VARCHAR(20),
PRIMARY KEY (id,`name`)
);
# 保证id和name字段不为空,然后联合判断唯一性
INSERT INTO user4 VALUES(1,'tom');
INSERT INTO user4 VALUES(2,"tom");
删除主键
alert table 表名 drop PRIMARY KEY;
主键自增
auto_increment
默认地AUTO_INCREMENT 的开始值是1,如果希望修改起始值,请使用下列SQL语法
ALTER TABLE 表名 AUTO_INCREMENT=起始值;
唯一约束: unique
特征
添加: insert into 表名 values();
删除: delete * from 表名 where 条件;
修改: update 表名 set name = “张三” where 条件;
查询: select * from 表名 where 条件
被修饰的字段唯一,不可重复
注意: 一个表中可以有多个被unique修饰的字段,但对null不起作用
实现方式
创建表时在字段后添加
create table 表名 (
字段名称1 字段类型 约束,
字段名称2 字段类型 约束
);
删除:
alter table 表名 drop index 约束名称;
约束名称默认为字段名称
非空约束: not null
特征:
被修饰的字段不可为空
实现方式
直接在字段后面添加即可
删除: 修改字段删除约束
alter table 表名 change 旧字段名称 新字段名称 类型 约束;
default : 默认值约束
当不为该字段设置信息时,使用默认值
数据备份与还原
移库 —>
Windows ----> Linux
Linux: 安全和稳定
1.dos命令方式
只能备份库中的数据和表
备份数据
mysqldump -u用户名 -p密码 数据库 > 文件的路径
还原数据
还原的时候需要先登录MySQL,并选中对应的数据库
source 导入文件的路径; f:/111.sql
2.图形化界面方式
多表的设计与实现
一对多:
称一的一方为主表或一表 称多的一方为从表或多表
实现
在从表中添加一个字段,字段名称自定义,一般是(主表名称_id),类型要和主表的/主键保持一致,该字段被成为外键.
作用:
保证数据的完整性和有效性
特征:
主表不能删除从表中引用的数据
从表中不能添加主表没有的数据
分析:
如何将一对多的关系保存到mysql数据库中?
在工作中,我们称1的一方为主表或1表,
我们称多的一方为从表或多表.
我们在从表中添加一个字段,该字段我们称之为-外键字段
外键字段名自定义(一般为: 主表名称_id)
外键字段类型要和主表主键类型保持一致
外键字段存放的值为主表主键已有的值
为了保证外键字段中的值引入的是主表主键的值,我们需要给外键字段添加约束 --- 外键约束
-- 多表设计与实现
-- 一对多关系
-- 1.创建user主表
CREATE TABLE `user`(
id INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(20)
);
-- 2.创建orders从表
CREATE TABLE `orders`(
id INT PRIMARY KEY AUTO_INCREMENT,
price DOUBLE
);
-- 3.修改从表结构,添加外键字段
ALTER TABLE orders ADD user_id INT;
-- 4.给从表中的外键字段,添加外键约束
ALTER TABLE orders ADD FOREIGN KEY(user_id) REFERENCES `user`(id);
-- 添加信息
-- 首先添加主表中的数据,再添加从表中的数据信息(从表中有主表主键值的引用)
-- 删除信息
-- 首先删除从表中的数据,再删除主表中的数据信息
多对多:
本质上就是两个一对多,添加中间表
分析:
如何将多对多的关系保存到mysql数据库中?
在工作中我们采用中间表(中间表需要手动添加)
orders表和product表我们称之为主表,
中间表为从表, 从表名称自定义(一般为: orders_product),从表中需要有两个外键字段,分别存放两张主表主键的值.
# 多对多关系
# 多对多本质上就是两个一对多
-- 1.创建2个主表
-- orders表已存在
-- 创建商品表
CREATE TABLE product (
id INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(20),
price DOUBLE
);
-- 2.创建中间表(从表)
CREATE TABLE orders_product (
id INT PRIMARY KEY AUTO_INCREMENT,
ord_id INT,
pro_id INT
);
-- 3.给中间表添加两个外键约束
ALTER TABLE orders_product ADD FOREIGN KEY(ord_id) REFERENCES orders(id);
ALTER TABLE orders_product ADD FOREIGN KEY(pro_id) REFERENCES product(id);
# 添加信息
# 首先向两张主表中添加数据信息,再向从表中添加数据信息
一对一(了解)
人和身份证号,企业和法人
实现方式,一般都写在一张表中
如果非要拆分成两张表,则在操作比较多的表中添加外键字段
注意
一张表中只有一个字段可以设置为主键
一张表中可以多个字段非空与唯一约束
主键可以自动增长,非空与唯一约束的字段不能自动增长
删除时:
先删从表数据,再删主表中的数据
foreign key : 外键
添加外键
方式1: 创建表时添加
CREATE TABLE orders2 (
id INT PRIMARY KEY AUTO_INCREMENT,
price DOUBLE(5,2),
user_id INT,
FOREIGN KEY (外键名称) REFERENCES 主表名称(关联的字段)
);
方式2: 创建完表后通过修改表添加
在从表中添加外键字段
alter table 从表 add 外键名称 数据类型;
给从表的外键字段添加外键约束
alter table 从表名 add [constraint 名称] foreign key(外键字段) references 主表名称(主键);
删除外键
ALTER TABLE 从表 drop foreign key 外键约束名;
作业:
班级和学生: 1:N
老师和学生: 1:N
学生和课程: N:N