文章目录
MySQL基础进阶
约束 \color{red}{约束} 约束
约束的概念和分类
约束的概念
1.约束是作用于表中列上的规则,用于限制加入表的数据。
约束的分类
非空约束
概念
非空约束保证数据不为空。
语法
1.添加约束。
– 创建表时添加非空约束。
CREATE TABLE 表名(
列名 数据类型 NOT BULL,
……
);
–建完表后添加非空约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;
2.删除元素
ALTER TABLE 表名 MODIFY 字段名 数据类型;
唯一约束
概念
1.唯一约束用于保证列中所有数据不同。
语法
添加约束。
– 创建表时添加唯一约束
CREATE TABLE 表名(
列名 数据类型 UNIQUE [AUTO_INCREMENT],
-- AUTO_INCREMENT:当不指定值时自动增长
……
);
CREATE TABLE 表名(
列名 数据类型,
……
[constraint ] [约束名称] UNIQUE(列名)
);
2.建完表后添加唯一约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE;
主键约束
概念
主键是一行数据的唯一标识,要求非空且唯一。
一张表只能有一个主键。
语法
– 添加表时添加主键约束
CREATE TABLE 表名(
列名 数据类型 PRIMARY KEY [AUTO_INCREMENT],
……
);
CREATE TABLE 表名(
列名 数据类型,
[CONSTRAINT ] [约束条件] PRIMARY KEY(列名)
);
– 建完表后添加主键约束
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
数据库设计 \color{red}{数据库设计} 数据库设计
软件的研发步骤
数据库设计概念
&nesp; 1.数据库设计就是根据业务的具体需求,结合我们所选用的DBMS,位这个业务系统构造出最优的数据存储模型。
&nesp; 2.建立数据库中的表结构以及表与表之间的关联的过程。
&nesp; 3.有那些表?表中有那些字段?表和表之间有什么关系。
数据库设计的步骤
&nesp; 1,需求分析(数据是什么?数据具有那些属性?数据与属性的特点是什么)
&nesp; 2.逻辑分析(通过ER图对数据进行逻辑建模,不需要考虑我们所选用的数据库管理系统)
&nesp; 3.物理设计(根据数据库自身的特点把逻辑设计转化为物理设计)
&nesp; 4.维护设计(1.对新的需求进行建表;2.表优化)
表关系
一对一
1.用户和用户详情。
2.一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询功能。
一对多(多对一)
1.部门和员工
2.一个部门对应多个员工,一个员工对应一个部门。
多对多
1.商品和订单。
2.一个商品对应多个订单,一个订单包含多个商品。
外键约束
概念
1.外键用来让两个表的数据之间建立链接,保证数据一致性和完整性。
例如:上述多对多中的订单商品表来维护订单表和商品表之间的关系。
使用中间表的目的是维护两表多对多的关系:
1.中间表插入的数据必须在多对多的表中存在。
2.如果主表的记录在中间表维护了关系,就不能随意删除,如果可以删除,中间表就找不到对应的数据了,这样就没有意义了。
语法
– 创建表时添加外键约束
create table 表名(
列名 数据类型,
……
[constraint ] [外键名称] foreign key(外键列名)references 主表 (主表列名)
);
– 关键字解释
constraint:添加约束,可以不写
foreign key(当前表中的列名):将某个字段作为外键
references 被引用表名(被引用表的列名):外键引用主表的主键
– 建完表后添加外键约束
alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称);
删除约束
alter table 表名 drop foreign key 外键名称;
总结
一对多实现的方式
在多的一方建立外键关联一的一方主键。
多对多实现方式
建立第三张中间表。
中间表至少包含2个外键,分别关联双方主键。
一对一实现方式
在任意一方建立外键,关联对方主键,并设置外键唯一。
多表查询 \color{red}{多表查询} 多表查询
概念
同时查询多张表,获取需要的数据;
比如:我们向查询水果对应的价格,需要将水果表和价格表同时进行查询;
多表查询的分类
内链接
概念
内连接查询有称为交集查询,也就是查询只显示满足条件的数据;
显示内连接
显示内连接:使用inner join……on语句,可以省略Inner关键字 ;
select * from 表名1 inner join 表名2 on 条件;
select * from 表名1 join 表名2 on 条件;
隐式内连接
看不到join关键字,条件使用where指定;
select 列名 , 列名, ……from 表名1, 表格2 where 表名1.列名 = 表名2.列名;
内连接查询步骤
1.确定查询几张表。
2.确定表连接条件。
3.根据需要在操作。
外连接
左外连接
左表的记录全部表示出来。
右表只会显示符合条件的记录。
select * from 表1 left outer join 表2 on 条件;
右外连接
右表的记录全部展示出来。
左表只会显示符合搜索条件的记录。
select * from 表1 right outer join 表2 on 条件;
子查询
介绍
子查询就是一个sql查询的结果作为另一个sql查询语句的一部分
单行单列
作为父查询的条件
作为父查询的条件,通常使用IN
作为父查询的一张表(虚拟表),起别名
注意: 如果子查询中查询的结果字段是聚合函数,并且最后结果需要使用聚合函数,那么必须使用as 给聚合函数的字段起别名。
事务 \color{red}{事务} 事务
一个事务其就是一个完整的业务逻辑。
什么是业务逻辑
假设转账,从A账户向B账户中转账10000,
将A账户的钱减去10000,
将B账户的钱增加10000,
这就是一个完整的业务逻辑。
SQL语句 | 描述 |
---|---|
start transaction | 开启手动控制事务 |
commit | 提交事务 |
rollback | 回滚事务 |
查看mysql是否自动提交事务
show variables like "%commit%";
事务的特征(ACID)
1.原子性
说明事务是最小的工作单元,不可在分。
2.一致性
所有事务要求,在同一个事务当中,所有操作必须同时成功,货同时失败,以保证数据的一致性。
3.隔离性
A事务和B事务之间具有一定的隔离。
4.持久性
事务最终结束的一个保障。
事务提交,就相当于将没有保存到硬盘上的数据保存的硬盘上。