MySQL基础篇
函数
1.字符函数
SELECT 函数(参数)
2.数值函数
- 示例:
3.日期函数
4.流程函数
-
示例
1.
约束
基本知识
- MySQL中主键约束 自增:AUTO_INCREMENT
示例:
外键约束
-
概念:外键用来让两张表数据之间建立联系。从而保证数据的一致性和完整性
-
基本语法
多表查询
多表关系
-
一对多(多对一):如部门与员工关系
实现:在多的一方建立外键,指向一的一方的主键
-
多对多:如学生与课程关系(如下图)
实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
-
一对一:用户与用户信息的关系(图示)
关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其它详情字段放在另一张表中
实现:在任意一方加入外键,关联另一方的主键,并且设置外键为唯一的(unique)
连接查询——内,外,自连接
-
内连接:相当于查A,B两表交集部分
语法:
隐式内连接
SELECT 字段列表 FROM 表1,表2 WHERE 条件...
显式内连接
SELECT 字段列表 FEOM 表1 [INNER] JOIN 表2 ON 连接条件
-
外连接:
左外连接:查询左表(表1)所有数据,以及两张表交集部分数据
语法:
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件···
右外连接:查询右表所有数据,以及两张表交集部分数据
语法:
SELECT 字段列表 FROM 表1 RIGHT[OUTER] JOIN 表2 ON 条件···
表1,表2交换位置查询结果即与左外连接相同
-
自连接:当前表与自身的连接查询,自连接必须使用表别名
语法:
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件···;
自连接查询,可以是内连接查询,也可以是外连接查询
示例:
子查询(标量、列、行、表子查询)
-
子查询
(1)概念:SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询
SELECT * FROM t1 WHERE column1=(SELECT column1 FROM t2)
-
标量子查询(子查询结果为单个值(数字,字符串,日期等))
常用操作符:= <> > < >= <=
-
列子查询(子查询结果为一列或多列)
-
行子查询(子查询结果为一行)
常用操作符:= <> IN NOT IN
示例
-
表子查询(子查询结果为多行多列)
常用操作符:IN
事务
1.概念:事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
默认MySQL的事务是自动提交的,也就是说,当值行一条DML语句,MySQL会立即隐式的提交事务。
事务操作
-
方式一:
1.查看/设置事务提交方式、
SELECT @@autocommit; // 查看 SET @@autocommit=0; //设置为不自动提交
2.提交事务(若无异常,手动执行)
COMMIT
3.回滚事务(若有异常,手动执行,是数据维持原状)
ROLLBACK;
-
方式二:
-
开启事务
START TRANSACTION或BEGIN;
-
提交事务
COMMIT
-
回滚事务
ROLLBACK;
-
事务四大特性(ACID)
- 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败
- 一致性(Consistency):事务完成时,必须使所有的数据都保持一致。
- 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立影响下独立运行(即指若干个并发事务,同时对同一个数据库进行操作,各事务间互不影响)
- 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
并发事务问题
- 脏读:一个事务读到另外一个事务还没有提交的数据
- 不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同。
- 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了‘幻影’。
事务隔离级别
上述默认为MySQL默认事务隔离级别