数据库

数据库三层结构


数据库的备份

备份

C:\Users\lenovo>mysqldump -u root -p -B zfc_db01(需要备份的数据库) > d:\\back.sql(自己指定的系统路径)
Enter password: ******

恢复

#恢复数据库(注意:进入Mysql命令行再行)
source d:\\back.sql

创建表

Mysql常用数据类型


整型

位类型

小数类型

字符串的基本使用

日期类型的使用

修改表

增删改查

Insert 细节

UPDATE

UPDATE emp set user_name = 'zfc' where ID = 1

DELETE

DELETE FROM EMPLOYEE WHERE USER_NAME = '老妖怪';

SELECT

运算符

ORDER BY

统计函数 Count

SUM

AVG

MAX/MIN

GROUP BY

经典例子

字符串相关函数

数学相关的函数

时间相关的函数

加密函数

流程控制函数

分页查询

有意思的写法

表查询加强

多表查询

自连接

子查询

案例

子查询临时表

all any 操作符

多列子查询

SELECT * 
    FROM student 
		WHERE (math, english, chinese) = (
		       SELECT math, english, chinese
					 FROM student 
					 WHERE `name` = '宋江'
		) AND `name` != '宋江';

SELECT * 
      FROM emp , (
						   SELECT deptno, AVG(sal) AS avg_sal
                    FROM emp
			                  GROUP BY deptno
			) temp
			WHERE emp.deptno = temp.deptno AND emp.sal > temp.avg_sal

表复制(蠕虫复制)

复制表结构

合并查询

外连接

主键

约束(not null ,unique)

外键

check约束

自增长

索引

索引的机制

索引的类型

索引注意细节

事务

事务的隔离级别

1. 读未提交(Read Uncommitted)

概念:在这种隔离级别下,一个事务可以读取到其他事务尚未提交的更改。这意味着你可以读取到正在被其他事务修改的数据,即使这些修改最终可能被回滚。这种情况称为“脏读”。

并发问题

  • 脏读(Dirty Read):事务A读取了事务B尚未提交的数据,事务B随后回滚,那么事务A读取的数据就是无效的。

  • 最不安全的隔离级别,几乎没有隔离效果。

场景:通常不建议使用这个级别,因为数据的一致性无法得到保证。

2. 读已提交(Read Committed)

概念:在这种隔离级别下,一个事务只能读取到其他事务已提交的更改。未提交的更改对其他事务是不可见的。

并发问题

  • 不可重复读(Non-Repeatable Read):同一个事务在不同的时间点读取同一行数据时,可能得到不同的结果。这是因为在同一事务内两次读取之间,另一个事务提交了对该数据的更改。

  • 可以避免脏读,但无法避免不可重复读。

场景:大多数数据库(如Oracle)使用这个级别。适用于需要读取最新数据而不是历史数据的场景。

3. 可重复读(Repeatable Read)

概念:在这种隔离级别下,一个事务在开始时看到的数据,在整个事务过程中都是一致的(即使有其他事务修改了这部分数据并提交)。这意味着在一个事务内多次读取同一行数据,会得到相同的结果。

并发问题

  • 幻读(Phantom Read):在同一个事务内两次读取某个范围的数据时,另一个事务插入了新数据,这会导致第二次读取出现“幻影行”。比如第一次查询某条件下有5行数据,第二次查询可能有6行。

  • 可以避免脏读和不可重复读,但无法避免幻读。

场景:MySQL InnoDB默认的隔离级别。适用于需要保证读取数据一致性的场景,例如金融交易系统。

4. 串行化(Serializable)

概念:最高的隔离级别。所有事务依次排队执行,类似于单线程执行,这样就不会发生并发操作。因此,不会出现脏读、不可重复读和幻读。

并发问题

  • 无并发问题:所有并发问题都可以避免,因为一个时间点只能有一个事务执行。

  • 性能开销最大,几乎不实际应用于高并发场景。

场景:适用于对数据一致性要求非常高的场景,但会极大降低系统的并发性能。

总结

  • 读未提交:最不安全,可能会读到未提交的数据(脏读)。

  • 读已提交:避免了脏读,但仍然可能会出现不可重复读。

  • 可重复读:避免了脏读和不可重复读,但可能会出现幻读。MySQL的默认隔离级别。

  • 串行化:最高的隔离级别,没有并发问题,但性能最差。

选择哪个隔离级别取决于应用程序对数据一致性和性能的需求

存储引擎

存储引擎的特点

视图

视图的使用

Mysql 管理

Mysql 的权限管理

细节补充