********* 0103数据库 **********
1.命令行数据库备份和还原
首先配置数据库的环境变量:在mysql数据库中的bin目录下
方式一:使用命令行备份和还原
备份:cmd输入命令mysqldump -u root -p 密码 --databases 数据库名 > sql文件路径
回车输入密码进行备份数据库
还原:执行还原命令之前,首先要登录到mysql:mysql -u root -p 回车输入密码
然后要选择一个还原的目标数据库:use 数据库名
在输入命令source sql文件路径 还原成功
方式二:借助Navicat工具高效备份和还原
借助Navicat工具的【转储SQL文件】和【运行SQL文件】进行数据库的备份和还原
2.软件迭代时数据库如何测试
1.题目的意思是:
1)软件1.0升级到软件2.0,软件必然会有一些功能上的变动,直接会体现到数据库表上面去(1.0页面新增一个会员需要3个要素,现在2.0新增会员5个要素-->数据库会员表会增加2个列),而且还有一个诉求生产数据不能丢失(1.0会员有20000个,生产迭代后2.0的数据中会员表中会员有20000个,新增加的两列要不就用默认值,要不就是null)
2)软件2.0新增加了模块,那么数据库就会增加新的表,里面数据看需求。--简单
2.要测试的是:生产数据不丢失,新增加的列可以正常显示。
3.答题思路:
--1)查询数量是否一致
--2)比对表结构,比对表数据(联合查询union)
语法:select * from a.id union select * from b.id(也可以用count(*)查询)
3.事务的特性有哪些
1)原子性
举例:转账张三5000元,要么我就转成功扣5000,要么就是失败不扣钱,不会出现扣3000元的现象。emp表更新emo的工资为3000,emp表中有14条数据,要么都更新成功,要么一个都不更新。
2)隔离性(事务与事务之间是相互隔离的)
举例:锁的概念,数据库服务器上表a中有3条数据,c1发起一个事务:添加数据1条,在c1客户端上查询4条数据,c2查询的话3条数据,c2也添加一个数据1条数据,c3查询3条数据。(等级)
3)持久性
举例:一但提交永久生效。
4)一致性
举例:张三转给李四1000元,张三余额扣款1000元,李四余额增加1000元
4.如何测试数据到底是从redis读取还是从mysql读取
题目意思:页面上有个数据,如何判断数据是从redis拿的还是从mysql拿过来的
答案:把redis服务器停掉,页面上这个数据如果丢失了那么就说明数据是从redis读取的。
延申问题:如何保持redis和mysql的数据一致性(结合登陆的bug一起说)
--1)一般是定时轮询同步,缓存时间一般5分钟、10分钟
--2)清空redis,然后再从mysql同步redis,然后再读取redis
5.mysql预埋数据如何处理
题月意思:测试之前的数据准备工作,一般数据量比较大的
答案:存储过程创造大量数据
--1 )下个问题就是如何创建
--2)存储过程的语法
create procedure 存储过程名字(in,out,inout)
begin
过程体
end;
--3)循环语法
6.mysql的错误码1045、1068、1064、10038等如何处理
1045就是表示输入的用户名或者密码错误从而导致访问数据库被拒绝了
1)如果是在是记不起起来正确的账号密码并且数据不多的话可以直接将整个mysql数控卸载后再重新安装,这样重装后的mysql数据库就会提供一个初始的默认账号进行登录了。
2)如果保证账号是正确的话可以跳过密码登录再修改整个账号的密码,在mysql数据库的安装目录下打开配置文件my.cnf,在这个文件的末尾添加skip-grant-tables这么一行内容就可以跳过密码登录了。
打开命令行然后输入mysql -uxxx就可以登录进这个账号的mysql数据库里面了,这里的xxx是账号。登录进这个账号后在命令行执行下面的命令去修改密码,如下所示:
ALTER USER 'xxx'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'
1068错误的原因:是因为主键一旦被定义,就无法再进行更改,直接修改主键属性会被看作定义第二个主键,从而导致出错。需要先去掉主键的主键约束,修改完再给它加上主键约束。
首先删除主键,找到PHPmyadmin,找到表所在的数据库点击sql
然后输入代码点击执行删除原有主键
1064错误意思是说我的SQL语法错误,然后显示错误的具体位置
字段和表名都用""括起来
10038在mysql提示出现错误的时候首先需要去看错误的提示信息是什么就知道它是为什么发生了,10038错误的提示信息是(2003)can't connect to MySQL server on '127.0.0.1'(10038).。
从错误信息就可以看出来错误的意思是mysql数据库无法连接到127.0.0.1地址,也就是无法连接本地服务器。而无法连接本地服务器一般是由于mysql服务没有启动或者是防火墙拦住了端口操作所导致的,知道原因就很好解决了。
解决方法:输入命令net start mysql启动数据库或者关闭防火墙
7.存储过程有几种形参类型,分别有什么用
IN输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
OUT输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
8.truncate、delete 与 drop 区别?
执行速度:drop > truncate > detele。
delete 和 truncate 只删除表数据,而 drop 会删除表数据和表结构以及表的索引、约束和触发器。
delete 可以加 where 条件实现部分数据删除,而 truncate 和 drop 不能加 where 条件是整体删除。
truncate 和 drop 是立即执行,且不能恢复;而 delete 会走事务,可以撤回和恢复。
truncate 会重置自增列为 1,而 delete 不会重置自增列。
truncate 和 drop 是 DDL 语句,而 delete 是 DML 语句。