MySQL 数据库知识
-
基本概念
-
MySQL 搭建
-
SQL 语句编写
-
约束
-
索引
-
事务
-
锁机制
-
设计数据库表
-
性能优化
学习建议
其中,SQL 语句编写 和 设计数据库表 这两个能力一定要有!
比如让你做一个学生管理系统,你要能想到需要哪些表,比如学生表、班级表;每个表需要哪些字段、字段类型。
这就要求大家多写 SQL、多根据实际的业务场景去练习设计能力。
经典面试题
- MySQL 索引的最左原则
- InnoDB 和 MyIsam 引擎的区别?
- 有哪些优化数据库性能的方法?
- 如何定位慢查询?
- MySQL 支持行锁还是表锁?分别有哪些优缺点?
入门
mysql 入门随便找一个教程就可以了,我看的是《mysql必知必会》这本书,跟着书敲代码即可,感觉几天时间就可以快速刷完了,反正命令不用死记硬背,需要用的时候,翻开书本会用就行了。
后面去刷一刷 sql 的练习题,例如去 牛客网把 sql 相关的几十道练习题安排了,就大致都记住了(链接直达:https://www.nowcoder.com/ activity /oj?tab=1)。
入门阶段最重要的就是要大致知道 mysql 有哪些关键字,还有就是关键字之间的执行顺序,例如像 join,have, order by ,聚合函数等等。
使用的时候,得知道他们之间的知识顺序,对于功能,知道个大概就行,之后要多练习,否则很容易一问三不知,至于去那里练习,我上面已经跟大家说了对应的练习网站了。
不过面试的话,其实面试大部分问的都是「原理」相关,而《mysql必知必会》这本书,就真的只是让你来使用 sql 而已,原理讲的比较少,单单只会用 sql,是无法应付面试的,所以我们必须学习一些相关原理。
进阶
数据库⼀般主流的有 MySQL 和 Oracle,不过建议⼤家学习 MySQL 了,因为⼤部分公司都是使⽤ MySQL,也是 属于⾯试必问,⽽且⼯作中 MySQL 也是接触的最多的,毕竟⼯作 crud 才是常态。
下⾯这些是我认为⽐较重要的知识点:
1、⼀条 sql 语句是如何执⾏的?也就是说,从客户端执⾏了⼀条 sql 命令,服务端会进⾏哪些处理?(例如验证身 份,是否启⽤缓存啥的)。 2、索引相关:索引是如何实现的?多种引擎的实现区别?聚族索引,⾮聚族索引,⼆级索引,唯⼀索引、最左匹 配原则等等(⾮常重要)。
3、事务相关:例如事务的隔离是如何实现的?事务是如何保证原⼦性?不同的事务看到的数据怎么就不⼀样了? 难道每个事务都拷⻉⼀份视图?MVCC 的实现原理(重要)等等。
4、各种锁相关:例如表锁,⾏锁,间隙锁,共享锁,排他锁。这些锁的出现主要是⽤来解决哪些问题?(重要)
5、⽇志相关:redolog,binlog,undolog,这些⽇志的实现原理,为了解决怎么问题?⽇志也是⾮常᯿要的吧, ⾯试也问的挺多。
6、数据库的主从备份、如何保证数据不丢失、如何保证⾼可⽤等等。
7、⼀些故障排查的命令,例如慢查询,sql 的执⾏计划,索引统计的刷新等等。
对于 2-4 这四个相关知识,⾯试被问到的频率是最⾼的,有时候⾯试会让你说⼀说索引,如果你知道的多的话就可 以疯狂扯⼀波了,
书籍:《MySQL必知必会》和咱们星球⾥的 MySQL实战45讲:MySQL实战45讲
《MySQL技术内幕:InnoDB存储引擎》
连接
005查看MySQL服务
任务管理器的MySQL
006启动和关闭服务
net stop 服务名称
net start 服务名称
007登录mysql数据库服务器
1.mysql-h 主机名-P端口-u用户名-p密码
2.登录前,保证服务启动
p-》 3306
使用bin目录下的mysq1.exe命令来连接mysq1数据库服务器
mysql -u root -phsq
连接到Mysq服务(Mysq|数据库)的指令
mysql-h 主机IP -P 端口 -u 用户名 -p密码(p与密码没空格)
如果没写主机、端口,取默认值,在实际工作中,端口名往往会修改
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)密码错误
选择数据库
USE关键字
use DATABASE_NAME;
输出:Database changed
了解数据库
- 显示可用数据库列表
SHOW DATABASES;
- 显示本数据库内的表的名称
SHOW TABLES;
也可以用来显示表列
SHOW COLUMNS FROM TABLE_NAME;
对每个字段返回一行,行中包含字段名/数据类型/是否允许null/键信息/默认值以及其他信息(如字段cusr_id的auto_increment)
DESXTIBE TABLE_NAME;
显示表列的快捷方式
- 其他SHOW语句
- SHOW STATUS, 用于显示广泛的服务器状态信息
- SHOW CREATE DATABASE和SHOW CREATE TABLE, 分别用来显示创建特定数据库或者表的MySQL语句;
- SHOW GRANTS,用来显示授予用户(所有用户或特定用户)的安全权限
- SHOW ERRORS 和SHOW WARNINGS,用来显示服务器错误或者警告信息
- HELP SHOW,显示允许的SHOW语句
点击查看代码
For information about MySQL products and services, visit:
http://www.mysql.com/
For developer information, including the MySQL Reference Manual, visit:
http://dev.mysql.com/
To buy MySQL Enterprise support, training, or other products, visit:
https://shop.mysql.com/
List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
? (\?) Synonym for `help'.
clear (\c) Clear the current input statement.
connect (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
ego (\G) Send command to mysql server, display result vertically.
exit (\q) Exit mysql. Same as quit.
go (\g) Send command to mysql server.
help (\h) Display this help.
notee (\t) Don't write into outfile.
print (\p) Print current command.
prompt (\R) Change your mysql prompt.
quit (\q) Quit mysql.
rehash (\#) Rebuild completion hash.
source (\.) Execute an SQL script file. Takes a file name as an argument.
status (\s) Get status information from the server.
tee (\T) Set outfile [to_outfile]. Append everything into given outfile.
use (\u) Use another database. Takes database name as argument.
charset (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
resetconnection(\x) Clean session context.
点击查看代码
有关MySQL产品和服务的信息,请访问:
http://www.mysql.com/
有关开发人员信息,包括MySQL参考手册,请访问:
http://dev.mysql.com/
要购买MySQL Enterprise支持、培训或其他产品,请访问:
https://shop.mysql.com/
所有MySQL命令的列表:
请注意,所有文本命令都必须位于第一行,并以“;”结尾
? (\?)“帮助”的同义词。
clear (\c)清除当前输入语句。
connect (\r)重新连接到服务器。可选参数为db和host。
delimiter (\d)设置语句分隔符。
ego (\G)向mysql服务器发送命令,垂直显示结果。
exit (\q)退出mysql。与退出相同。
go (\g)将命令发送到mysql服务器。
help (\h)显示此帮助。
notee (\t)不要写入outfile。
print (\p)打印当前命令。
prompt (\R)更改您的mysql提示符。
quit (\q)退出mysql。
rehash (\#)重新生成完成哈希。
source (\.)执行SQL脚本文件。将文件名作为参数。
status (\s)从服务器获取状态信息。
tee (\T)设置输出文件[to_outfile]。将所有内容附加到给定的外文件中。
use (\u)使用另一个数据库。将数据库名称作为参数。
charset (\C)切换到另一个字符集。可能需要处理具有多字节字符集的binlog。
warnings (\W)在每条语句后显示警告。
nowarning (\w)不要在每条语句后都显示警告。
resetconnection (\x)清除会话上下文。
MySQL数据库-普通表的本质仍然是文件
表的一行称之为一条记录-》在java程序中,一行记录往往使用对象表示
创建数据库
CREATE DATABASE hsp_db01
创建一个使用utf8字符集的hsp db02数据库
CREATE DATABASE hsp_02 CHARACTER SET utf8
创建一个使用utf8字符集,并带校对规则的hsp db03数据库
CREATE DATABASE hsp_db03 CHARACTER SET utf8 COLLATE utf8_bin
校对规则 utf8_bin 区分大小写 默认uft8_general_ci 不区分大小写
查看删除数据库
显示数据库语句:
SHOW DATABASES
显示数据库创建语句:
SHOW CREATE DATABASE db name
数据库删除语句:
DROP DATABASE [IF EXISTS] db name
练习:database02.sql
1.查看当前数据库服务器中的所有数据库
2.查看前面创建的hsp_db01数据库的定义信息
3.删除前面创建的hsp_db01数据库
备份数据库
- 练习 : database03.sql 备份 hsp_db02 和 hsp_db03 库中的数据,并恢复
- 备份, 要在 Dos 下执行 mysqldump 指令其实在 mysql 安装目录\bin
- 这个备份的文件,就是对应的 sql 语句
mysqldump -u root -p -B hsp_db02 hsp_db03 > d:\bak.sql
DROP DATABASE ecshop;
错误
Unknown command '\'
当作sql语句在mysql中执行了,得退出到bin目录执行备份语句
恢复数据库(注意:进入 Mysql 命令行再执行)
source d:\bak.sql
- 第二个恢复方法, 直接将 bak.sql 的内容放到查询编辑器中,执行