【Mysql】第3篇--数据库约束

数据库约束

约束作用: 保证数据具有真实的作用和意义

主键约束 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

猜你喜欢

转载自blog.csdn.net/qq_41250372/article/details/125462357