06-MySQL数据库
06-MySQL数据库
001-改变原表格的构造,比如加多一列,sql语句是什么?
语法:ALTER TABLE tablename ADD 列名 数据类型
举例:ALTER TABLE lemon ADD user_name varchar(100);
002-低主键、外键和索引的区别?
主键:表中唯一标识一条记录,不能有重复的,不允许为空
外键:用来和其他表建立联系用的,表的外键是另一表的主键, 外键可以有重复的, 可以是空值
索引:对数据库中的某些关键字段进行存储,类似于书籍中的目录,里面包含了关键数据和数据的位 置,通常需要对where条件后的字段加索引,但是不能加的太多,一般一个表不超过4个索引
003-两张关联表a和b,关联字段为id,删除a表中没有关联的数据?
delete from a where id not in (select a.id from a,b where a.id = b.id);
004-数据库有哪些类型?
数据库共有3种类型,为关系数据库、非关系型数据库和键值数据库:
1、关系数据库,以下数据库都是关系数据库: MySQL、MariaDB、Percona Server、PostgreSQL、Microsoft Access、Microsoft SQL Server、Google Fusion Tables、FileMaker、Oracle数据库、Sybase、dBASE、Clipper、FoxPro、foshub。 几乎所有的数据库管理系统都配备了一个开放式数据库连接驱动程序,令各个数据库之间得以互相集成。
2、非关系型数据库(NoSQL): BigTable(Google)、Cassandra、MongoDB、CouchDB。
3、键值(key-value)数据库: Apache Cassandra(为Facebook所使用):高度可扩展、Dynamo、LevelDB(Google)。
005-如何启动数据库和如何停止数据库
启动命令:oninit -vy
停止命令:onmode -ky
006-多表查询用过吗?内连接和左右连接的区别?
1、多表查询用过,语法是:select * from table1,table2 where 关联条件
2、区别:
左连接(left join)是显示左表所有数据,及右表满足条件的数据,右表无数据则显示null。
右连接(right join)则是显示右表的所有数据,及左表满足条件的数据,左表无对应数据则显示null。
内连接(inner join)是显示左右两张表连接字段相等的数据。
007-低SQL语句的执行顺序?
1、最先执行from tab;
2、where语句是对条件加以限定;
3、分组语句【group by…… having】;
4、聚合函数;
5、select语句;
6、order by排序语句。
008-熟悉数据库吗?平时数据库用的多吗?
1、比较熟,常用的是增删改查操作:(有序思维说出来)
比如插入数据: insert into 表名 values(值1,值2,值3,...)
删除数据:delete from 表名 where 条件
更新数据:update 表名 set 列名 = 新值
查询数据:select * from 表名 ,查询语句最长使用结构: select * from 表名 where 条件 group by 分组列名 having 分组后的条件 order by 列名。
2、数据库用的还行(大概测试过程的1/4时间在查数据库),一般出现问题,遇到bug,就要去查询数据库,初步定为问题。
开发会给到我们一个库表设计的excel(数据字典),里面有描述表名和表中的字段,我把交易过程的一些唯一标识,把他作为where条件去查询数据。初步分析后,再把问题暴露给开发。(比如淘宝支付时,输入支付密码后,已经返回了支付成功的提示信息,然后界面上的订单查询还是待付款,这个时候就要去查询订单表的数据,找到自己刚才做的交易的那一笔订单,去分析一下错误,再暴露给开发)
009-Mysql的事物隔离级别?
Mysql的事物隔离级别分别是:
1、Read Uncommitted(读取未提交内容)
2、Read Committed(读取提交内容)
3、Repeatable Read(可重读)
4、Serializable(可串行化)
010-SQL连表查询,去重查询,查询重复的数据
1、连表查询: SELECT 字段1,字段2,字段3,…… FROM 表名1 INNER JOIN 表名2 ON 关联条件;
2、去重查询: SELECT distinct ...;
3、查询重复的数据: select 列名 from 表名 group by 列名 having count(列名) > 1;
011-mysql使用程度是简单使用还是多表联查?
自己会写多表联查的sql语句,工作中简单查询比较多,单表和多表查询都会有。
012-什么是事务?
事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操 作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操 作集合(工作逻辑单元);
1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要 么均不执行。
2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行 的结果相一致。
3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事 务必须是透明的。
4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不 被丢失
013-内连接和左右连接的区别?工作中有无用过?
工作中用过左右连接和内连接查询;
左连接(left join)是显示左表所有数据,及右表满足条件的数据,右表无数据则显示null。
右连接(right join)则是显示右表的所有数据,及左表满足条件的数据,左表无对应数据则显示null。
内连接(inner join)是显示左右两张表连接字段相等的数据。
014-索引的作用?缺点是什么?
索引可以用来提高sql的检索速度
缺点:会增加表的维护成本,占用磁盘空间
015-你是手写sql还是用现成的进行检验的?多表联查怎么查询的?
我们工作中主要是用查询数据库的数据分析问题和确认测试数据的;所以查询用的最多;当然,插入、修改和删除也会用;我们都是手写sql脚本;
多表关联查询:
select 要查询的字段 from 查询涉及的表 where 关联条件
016-对数据库熟不熟悉? 哪些地方用到过?
熟悉的,工作中都用过;
场景比如:
- 功能测试的时候,涉及搜索功能,依据不同条件检索符合条件的数据,要确认数据的数量及正确性,会需要查库确认
2)接口测试的时候,无界面,因为是直接校验后端业务逻辑的,要确认接口操作的正确性,会需要查库确认。
3)还有就是,功能测试中如果有bug,也需要通过数据库去分析错误的原因的
017-请写出内连接,左链接,右链接的关键字,并分别简述其作用。
请回答以上问题
LEFT JOIN:左连接,会读取左表全部数据,即便右表没有对应数据。左连接从左表产生一套完整的记录,和右表匹配的记录 .如果右边没有匹配记录,右侧结果集字段将为null
RIGHT JOIN: 右连接,以右表为基础,与LEFT JOIN相反
INNER JOIN :内连接,或等值连接,可以获取两个表中字段匹配关系的记录。
018-数据库索引有哪两种实现方式
019-连表的方式都有哪些?具体说说。
1、多表连接查询
2、inner join、left join、right join
020-左连接和右连接的区别?
左连接是以左边的表为主,把左表的数据全部显示出来,再和右表匹配,右表没有匹配数据则显示为Null,而右连接正好是和左连接相反
021-会用mysql造数据吗?用SQL语句辅助测试在哪些场景会用到
mysql造数据的场景偶尔会用到的。
比如我们需要很多小区信息或者楼栋信息的时候,检查页面的显示和数据的搜索,就不会一个个手动添加,会去数据库里插入数据。用的mysql的 insert语句。
其他场景就是查询会更多一些,单表查询和多表查询等。
SQL辅助测试场景主要有:
1、界面不好确认测试数据准确性的,就需要去数据库里确认数据,主要用的查询;
2、需要大量的测试数据时,会用sql造数据;
3、定位问题的时候,会通过数据库排查问题;
022-假如说我现在要对我筛选出来数据进行排序?用什么语句?
通过order by 字段来进行排序,升序用asc,降序用desc.
023-物业费缴纳过程中,后台数据是如何交互的?
1、后台设置物业费,并针对房屋范围及状态生成缴费,生成后,记录到数据库,后台可以看到需缴费的数据,同时登录前台小程序业主账号,需缴费的业主端同步可查看到需缴费的账单
2、业主端,缴费成功后,业主小程序端缴费记录清除,数据库费用表会同步更新缴费状态,同时生成缴费记录;登录后台,同步可查看到业主缴纳的物业费状态及记录
024-你之前工作写sql是因为什么原因呢?
比如接口测试的时候,没有界面,遇到一些有问题的时候我们需要去数据库里确认测试结果,就需要去数据库里做一些增删改查等操作;
还有系统测试的时候,遇到一些问题需要定位分析,我们也会去数据库里查询结果确认测试结果辅助定位分析问题。
以及测试的时候造数据,会用sql脚本去构造大量的测试数据。
025-测试数据来源怎么处理?
1、可以去数据库里面新增测试数据(编写SQL脚本新增,但是会有些数据需要关联多张表会比较复杂)
2、可以调用一个接口批量生成测试数据(例如需要很多个订单,可以调用下单接口,生成大量的订单数据)
026-利息本来是我3.21,实际到账3.20,这个分析下原因?
原因可能多种,比如后端格式化保留小数有误
027-说说数据库事务的四个特性及含义。
数据库事务(transanction)正确执行的四个基本要素: ACID,原子性(Atomicity)、一致性(Correspondence)、隔离性(Isolation)、持久性(Durability) 原子性:整个事务中的所有操作,要么全部完成,要么全部不完成。 一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。 隔离性: 是当多个用户并发访问数据库时,多个并发事务之间要相互隔离。 持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
028-会用多表查询吗?具体怎么做的?
会用多表查询,其中内连接用的比较多,语法:select 。。 from。。表A inner join 表B on 关联条件。在电商项目中查询分类商品,用到ds_goods 和ds_goods_category,还有查询一笔订单详情就要查多张表呀,比如用户表,订单表,商品表,地址表
029-有一张表,有id name 科目 成绩,每一门大于60分的学生中取前十的学生。
select * from table group by id having min(成绩) > 60 order by 成绩 limit 10;
030-说一下数据库增删改查的关键字?多表查询和连接查询?
插入数据:insert into..; 删除数据:delete from.. ; 修改数据:update..set; 查询数据:select..from
多表查询:select.. from 表1,表2 where 关联条件 and 其他条件;
连接查询:
内连接:select ..from 表1 inner join 表2 on 关联条件 and 其他条件;
左连接:select ..from 表1 left join 表2 on 关联条件 and 其他条件;
右连接:select ..from 表1 right join 表2 on 关联条件 and 其他条件;
031-什么是数据库?什么是关系型数据库?
数据库:
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
关系型数据库:
是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。
032-排序关键字
关键字是order by。
升序排列:select .. from 表名 order by 字段 asc;
降序排列:select .. from 表名 order by 字段 desc;
033-Mysql查询是否分区大小写?
mysql是弱语法,不区分大小写的
034-数据库会吗?常用的是数据库操作是什么?接触过国产的数据库吗?
我们之前的项目主要用的是Mysql数据库,也知道有oracle/sql server数据库,国产的数据库目前没有接触过,但是只要是关系型数据库,基本SQL语法都是一样的,我相信我能尽快使用。
对于数据库常用的操作是增删改查,其中查用的频率最高,用来辅助测试以及定位bug等。
035-查询学过"张三"老师授课的同学的信息
select Student.* from Student, SC where Student.S# = SC.S# and SC.C# in (select C# from Course,Teacher where Course.T# = Teacher.T# and Tname = “张三”)
036-条件后面where和having的区别是什么?
1、用的地方不一样 where 可以用于 select、update、delete 和 insert 语句中。 having 只能用于 select 语句中
2、执行的顺序不一样 where 的搜索条件是在执行语句进行分组之前应用 having 的搜索条件是在分组条件后执行的 即如果 where 和 having 一起用时,where 会先执行,having 后执行
3、子句有区别 where 子句中的条件表达式 having 都可以跟,而 having 子句中的有些表达式 where 不可以跟; having 子句可以用聚合函数(sum、count、avg、max 和 min),而 where 子句不可以。
037-你们平常那个sql语句都用什么语句?
主要是查询,单表查询、多表查询、连接查询等会用的比较多
038-用什么命令可以查看表的字段?
方法一:show columns from table_name;
方法二: desc table_name;
039-数据库引擎类型有哪些?
MyIASM、InnoDB、HEAP、ISAM、MERGE、DBD以及Gemeni(一般只知道前两者即可)
040-数据库怎么批量添加数据?超过1000如何处理?
方法一:使用excel表格
方法二:使用insert语句
但是数据太多的话,可能会选择寻求开发的帮助了。
041-InnoDB 索引和 MyISAM 索引的区别,索引的优缺点
1)存储结构(主索引/辅助索引) InnoDB 的数据文件本身就是主索引文件。而 MyISAM 的主索引和数据是分开的。 InnoDB 的辅助索引 data 域存储相应记录主键的值而不是地址。 而 MyISAM 的辅助索引和主索引没有多大区别。 innoDB 是聚簇索引,数据挂在逐渐索引之下。
2)锁: MyISAM 使用的是表锁;InnoDB 使用行锁
3)事务: MyISAM 没有事务支持和 MVCC;InnoDB 支持事务和 MVCC
4)全文索引: MyISAM 支持 FULLTEXT 类型的全文索引;InnoDB 不支持 FULLTEXT 类型的全 文索引,但是 InnoDB 可以使用 sphinx 插件支持全文索引,并且效果更好
5)主键: MyISAM 允许没有任何索引和主键的表存在,索引都是保存行的地址; InnoDB 如果没有设定主键或非空唯一索引,就会自动生成一个 6 字节的主键,数据是主索引的一部 分,附加索引保存的是主索引的值
6)外键: MyISAM 不支持;InnoDB 支持
042-什么是数据库的交叉连接(完全连接)?
1.概念:没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。 2.交叉连接:cross join 3.sql语句: select * from table1 cross join table2
注释:返回笛卡尔积的结果。
与下列执行效果相同: A:select * from table1,table2
043-用SQL写出查询student表中score的字段,并且从大到小排序?
select score from student order by score desc;
044-linux 系统下,数据库备份脚本如何实现
通过编写Shell脚本
1. -password 如果密码出现括号或下划线请将password用双引号引用起来
2. 该脚本是将数据库DBName进行备份,并进行压缩处理
3. 备份后的文件名前缀DBName,并附带时间戳
mysqldump -u root -p password DBName | gzip > /usr/local/backup/DBName_$(date +%Y%m%d_%H%M%S).sql.gz
045-什么是mysql?
MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理
046-储存过程怎么使用?
在MySQL中,使用CALL 存储过程名(参数列表)调用即可,传递使用的入参和出参。
#MySQL存储过程 #定义存储过程 CREATE PROCEDURE if_else_proc(IN in_param INT) BEGIN IF in_param = 1 THEN SELECT '1...'; ELSEIF in_param=2 THEN SELECT '2...'; ELSE SELECT 'other...'; END IF; END; --执行(调用存储过程) CALL if_else_proc(2);
047-执行SQL脚本工具的是?
navicator等工具,也可以使用代码
048-数据库会在什么场景用?什么时候用数据库,怎么用数据库
在确认bug或者是校验数据的时候,就会使用到数据库。
一般情况下面我们还是用查询比较多,比如查询一些订单信息,商品信息。
增删改的话可能就是当功能业务受到影响无法执行的时候,就可能会用到,比如修改订单的状态。
049-一个表A有id,sex两个字段,统计男女的人数?
Select sex,count(sex) from A group by sex;
050-用一条sql语句查出这个月涨薪的人
select * from user where date = sysdate();
051-什么时候会用内连接,举工作中用到的查询例子说说,与外连接的区别
需要查找两张表匹配的数据,使用内连接
查找了两表匹配之外还需要其中某一个表不匹配的记录,那么就用外连接,是左还是右 取决于那个表是放在左边还是右边
052-內连接与左连接的区别?
内连接是获取两个表中字段匹配关系的记录 左连接是读取左表全部数据,即使右表没有关联数据;
左连接会从左表产生一套完整的记录,和右表匹配的记录。如果右边没有匹配记录,则右侧结果集字段为null
053-数据库的范式有哪些类型?
第一范式(1NF):每一列属性都是不可再分的属性值,确保每一列的原子性。
第二范式(2NF):每一行的数据只能与其中一列相关,即一行数据只做一件事,只要数据列中出现数据重复,就要把表拆分开来。
第三范式(3NF):数据不能存在传递关系,即每个属性都跟主键有直接关系而不是间接关系。
054-数据库二个表直接关联是用什么命令
可以用连接查询语法:比如inner join
也可以用多表关联查询语法: select * from t1,t2 where 关联条件
055-数据库你们一般用来干什么?
(1)定位问题:系统测试时界面上看不到数据,前端不显示,需数据库确认
(2)修改数据:比如预约秒杀活动限制时间,修改时间
(3)接口测试:用作接口的断言,注册接口,查询这些注册人员信息,判断预期和实际是否相符
(4)性能测试:通过数据库准备大量的性能测试数据
056-对升序该用哪个关键词?
asc,不写也默认是升序。
057-数据库中常用的聚合函数都有哪些?
max():最大值
min():最小值
avg():平均值
sum():求和
count():统计总数
058-drop、delete、truncate 三者的区别?
都表示删除,但是三者有一些差别, Delete 用来删除表的全部或者一部分数据行,执行 delete 之后,用户需要提交(commmit) 或者回滚(rollback)来执行删除或者撤销删除。会触发这个表上所有的 delete 触发器 Truncate 删除表中的所有数据,这个操作不能回滚,也不会触发这个表上的触发器, TRUNCATE 比 delete 更快,占用的空间更小; Drop 命令从数据库中删除表,所有的数据行,索引和权限也会被删除,所有的 DML 触 发器也不会被触发,这个命令也不能回滚。
059-在MS SQL_Server 数据库中通过什么约束保证数据库的实体完整性
可以通过建立唯一的索引、PRIMARY KEY约束、UNIQUE约束或IDENTITY约束来实现实体完整性
060-写出一些你所知道的常用数据库。
常用数据库有MySQL、Oracle、SqlServer、SQLite、INFORMIX、Redis、MongoDB、HBase、Neo4J、CouchDB等。
061-说明主键、外键的作用,索引的好处与不足?
主键:是表中的唯一标示键。作用:保证实体的完整性;加快数据库的操作速度;增加新的表记录时,数据库会自动检索新记录的主键值,不允许该值与其他表中记录的主键重复;数据库会按主键值的顺序显示记录,如果没有设定主键,则按输入的顺序显示记录。
外键:是主键的从属,表示了两个表之间的联系。作用:使用外键可以避免冗余。 索引的优点:
1、通过创建唯一性的索引,可以保证表中数据的唯一性;
2、加速数据的检索速度;
3、加快表与表之间的连接;
4、在使用分组与排序数据检索时,可以显著检索分组与排序的时间;
5、在查询的过程中使用优化隐藏器,提供系统性能。
缺点:
1、创建索引需要时间,且随着数据量的增加而增加;
2、索引需要占用物理空间; 3、当对表中数据进行修改时,索引也要动态维护,降低了数据的维护速度。
062-请写出一个SQL来查询分数前五5的所有人?
select * from 成绩表 order by 分数 desc limit 0,5;
063-5.数据库,查询两个字段,反回前五行数据,升序和降序。
select a, b from table limit 5 order by id desc
064-你会多表查询么?你知道左连接么?
会的,单多表查询都会用到。
Select查询字段from两张表的表名where两张表关联的条件,左连接left join 查询是左表的所有数据和右表相关联的数据。
我们一般工作上不怎么用
065-数据库的存储过程与触发器的区别?
触发器与存储过程非常相似,触发器也是SQL语句集,两者唯一的区别是触发器不能用EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发(激活)执行。
触发器是在一个修改了指定表中的数据时执行的存储过程。
触发器不同于存储过程,触发器主要是通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用。
当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时,SQLSERVER就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则。
066-导入导出Oracle数据文件的相关命令
1,使用cmd命令行导入导出数据
1.1整库导出
整库导出:exp 管理员账号/密码 full=y;//参数full表示整库导出。导出后会在当前目录下生成一个EXPDAT.DMP的文件,此文件为备份文件。如果想导出数据到指定位置,并且取个名字,需要添加file参数。例如:exp system/123456 file= C:person.dmp full=y。
1.2整库导入
整库导入:imp 管理员账号/密码 full=y file=C:person.dmp。
1.3使用cmd命令按用户导出导入
1.3.1 按用户导出:exp 管理员账号/密码 owner=用户名 file=C:person.dmp。
1.3.2 按用户导入:imp 管理员账号/密码 file=C:person.dmp fromuser=用户名。
1.4使用cmd命令按表导出导入
1.4.1按表导出:exp 管理员账号/密码 file=person.dmp tables=t_person,t_student。
1.4.2按表导入:imp 管理员账号/密码 file =person.dmp tables=t_person,t_student。
2.)使用PL/SQL 开发工具导出导入数据
pl/sql工具包含三种方式导出oracle表结构和表数据,分别为:oracle export,SQL inserts,pl/sql developer。它们的含义如下:
第一种oracle export:导出的是.dmp格式的文件,.dmp文件是二进制文件,可以跨平台,包含权限等。
第二种SQL inserts :导出的是.sql格式的文件,可以用文本编辑器查看,通用性比较好,效率不如第一种,适合小数据量的导入导出。需要注意的是表中不能有大字段(blob,clob,long)如果有则不能导出。
第三种pl/sql:导出的是.pde格式的文件,.pde为/pl/sql自有的文件格式,只能用pl/sql工具导入导出,文本编辑器不能查看。
067-编辑sql语句时,年月日型时间字段如何表达
YEAR **( ***date *)
MONTH **( ***date *)
DAY **( ***date *)
068-用过存储过程吗?简述一下存储过程
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。
069-数据库索引有哪几种
主键索引.唯一索引.普通索引.全文索引.联合索引
070-有个表A,字段sex,(男女),怎样快速的查询有多少个男的,有多少个女的?
select sex,count(1) from A group by sex;
071-SQL 中常用的聚合函数都有哪些?
max():最大值
min():最小值
avg():平均值
sum():求和
count():统计总数
072-说一下数据库增删查改,更新的命令分别是什么?
答:
增:insert into 表名(字段1,字段2,....) values (值1,值2,值3,.....) ;
删:
drop : 删结构删数据。drop database 库名 /drop table 表名;
delete:不删结构删数据。delete from 表名 where 条件1 and(or) 条件2……;
改:update 表名 set 字段名1 = 新值1,字段名2 = 新值2 where 条件表达式1 and(or) 条件表达式2 …;
查:select 查询的字段/* from 表名 where 条件1 and(or) 条件2……;
073-数据库索引有哪两种实现方式 分别对应的数据结构是什么?
mysql索引主要有两种结构:b+tree索引和hash索引.
1.hash索引 mysql中,只有memory(memory表只存在内存中,断电会消失,适用于临时表)存储引擎显示支持hash索引,是memory表的默认索引类型,尽管memory表也可以使用b+tree索引。hsah索引把数据的索引以hash形式组织起来,因此当查找某一条记录的时候,速度非常快。当时因为是hash结构,每个键只对应一个值,而且是散列的方式分布。所以他并不支持范围查找和排序等功能。
2.b+树索引 b+tree是mysql使用最频繁的一个索引数据结构,是inodb和myisam存储引擎模式的索引类型。相对hash索引,b+树在查找单条记录的速度比不上hash索引,但是因为更适合排序等操作,所以他更受用户的欢迎。毕竟不可能只对进行单条记录的操作。
074-写出在windows上如何判断另一台计算机上的8080端口是否在监听。
telnet ip地址 端口号
075-你对那种数据库最为熟悉
mysql, redis
076-什么情况下用到数据库?
定位问题:系统测试时界面上看不到数据,前端不显示,需数据库确认
修改数据:比如预约秒杀活动限制时间,修改时间
3)接口测试:用作接口的断言,注册接口,查询这些注册人员信息,判断预期和实际是否相符
4)性能测试:通过数据库准备大量的性能测试数据
077-Function和procedure的区别?
function是函数,procedure是存储过程 。函数可以有返回值 ,存储过程没有的。
078-一个班语文、数学、英语三科总成绩前3名,排序出来?
select 学号,姓名,sum(成绩) from 表名 group by 学号 order by sum(成绩) desc;
079-什么是SQL?
SQL- 结构化查询语言(Structured Query Language), 是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
080-where和having的区别?
where: where是一个约束声明,使用where来约束来自数据库的数据; where是在结果返回之前起作用的; where中不能使用聚合函数。
having: having是一个过滤声明; 在查询返回结果集以后,对查询结果进行的过滤操作; 在having中可以使用聚合函数。
081-如何查看表是否包含索引
show index from table_name(表名)
082-MySQL平常都会做些什么操作呢?
数据库主要是增删改查,其中查询最多。
主要场景是做测试的时候,去确认测试结果,验证数据库的数据,定位和分析问题的时候用;
另外,也会去构造一些测试数据,在数据库里直接去添加数据,方便我们测试的执行。****
083-char和varchar的区别?
char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:
char类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.
在varchar类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).
varchar得适用场景:
1、字符串列得最大长度比平均长度大很多
2、字符串很少被更新,容易产生存储碎片 3、
3、使用多字节字符集存储字符串
Char得场景:
1、存储具有近似的长度(md5值,身份证,手机号)
2、长度比较短小的字符串(因为varchar需要额外空间记录字符串长度),更适合经常更新得字符串,更新时不会出现页分裂得情况,避免出现存储碎片,获得更好的io性能
084-左连接与右连接的区别
左连接:左边有的,右边没有的为null
右连接:左边没有的,右边有的为null
085-如何查一个学生表里面重复出现的名字
select 姓名 from students group by 姓名 having count(*) >1;
086-对数据库熟不熟悉,哪些地方用到过?
- 功能测试的时候,涉及搜索功能,依据不同条件检索符合条件的数据,要确认数据的数量及正确性,会需要查库确认 2)接口测试的时候,无界面,因为是直接校验后端业务逻辑的,要确认接口操作的正确性,会需要查库确认。 3)还有就是,功能测试中如果有bug,也需要通过数据库去分析错误的原因的
087-数据库多表查询的关键字是什么?
多表查询--select * from tables1,tab2 where 关联条件 ;
也可以用内连接-inner join,左连接-left join, 右链接 -right join等。
088-查询user表中,phone字段值以137开头的,前20行数据?
select * from user where phone like "137%" limit 20;
089-数据库的增删改查命令分别是什么?
增加:insert
删除:delete
修改:update
查询:select
090-数据库中的条件后面where和having的区别是什么?
1、用的地方不一样 where 可以用于 select、update、delete 和 insert 语句中。 having 只能用于 select 语句中
2、执行的顺序不一样 where 的搜索条件是在执行语句进行分组之前应用 having 的搜索条件是在分组条件后执行的 即如果 where 和 having 一起用时,where 会先执行,having 后执行
3、子句有区别 where 子句中的条件表达式 having 都可以跟,而 having 子句中的有些表达式 where 不可以跟; having 子句可以用聚合函数(sum、count、avg、max 和 min),而 where 子句不可以。
091-在Sybase数据库中注册用户与数据库用户有什么区别?
注册用户是有权限使用sybase的产品的用户;数据库用户是指可以对某一个具体的数据库进行实际的操作的用户,能进行数据表结构处理、数据增删改查等操作。
092-MySQL的多表查询有哪些实现方式
1、内连接
2、外连接
3、子查询
093-union all作用
对两个结果集进行并集操作,包括重复行,不进行排序。 如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
094-介绍下union和union all的区别 ?
union方式不会有重复记录,union all存在重复记录
095-数据库主要是对()和()进行操作?
数据库,数据库表
096-如何创建数据库索引
1、普通索引:
创建索引
CREATE INDEX indexName ON mytable(username(length)); 创建表的时候直接指定普通索引: CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) ); 2、唯一索引 它与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。 创建索引: CREATE UNIQUE INDEX indexName ON mytable(username(length)) 修改表结构: ALTER table mytable ADD UNIQUE [indexName] (username(length)) 创建表的时候直接指定唯一索引: CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );
097-你在测试过程中使用数据库的场景是什么?
(1)系统上测试界面上不能看到数据 ,前端不显示,数据库进行确认(问题定位) (2)修改数据,预约秒杀活动限制了时间 ,数据库修改时间 (3)接口测试,还没有界面,数据库校验数据 (4) 性能测试/自动化测试,需要用户数据,需要在数据库中去造数据 (5)大数据测试、报表统计等
098-请写出truncate和delete,drop表数据的差别?
TRUNCATE 和DELETE只删除数据, DROP则删除整个表(结构和数据)。 在速度上,一般来说,drop> truncate > delete
099-有没有了解mongo db?
如果是问到跟所掌握的mysql之外的数据库,可以这么回答: 这个我没了解过,我工作中主要接触的是mysql数据库,如果公司是用mongo db这种数据库的话,我可以学习,毕竟SQL语法大同小异,学习掌握起来应该不会太难
100-sql server 与Oracle的差别
oracle 是甲骨文公司的
sql server 是微软的。
101-mysql造数据的在测试过程中会用到么?什么场景下会用到?
mysql造数据的场景偶尔会用到的。
比如我们需要很多小区信息或者楼栋信息的时候,检查页面的显示和数据的搜索,就不会一个个手动添加,会去数据库里插入数据。用的mysql的 insert语句。
其他场景就是查询会更多一些,单表查询和多表查询等。
102-有没有了解过索引,用过索引?
一般是某个表里面的某个字段建立了索引,其实我们在使用where条件的时候就已经使用了索引,大概分为是分为四种的,唯一索引,主键索引,全文索引,富文本索引, 索引其实就是一个目录,我们可以通过目录去查询
主键和唯一索引的区别:唯一性索引列的值允许空值,而主键列不允许为空值 共同点:他们的值都是唯一的
索引的缺点是[创建和维护索引需要耗费时间 占用磁盘空间 提高查询速度,会减慢写入,修改的速度 索引并不是越多越好,一个表里面的索引数最好不要超过6个 所以:我们在建索引需要慎重考虑,视具体情况而定
103-修改表信息的关键字
update 表名 set 字段名1=新值,字段名2=新值... where 条件;
104-Sql相关:1、如何修改数据 2、如何删除数据
修改数据:使用update语句。 删除数据使用delete语句。
105-主键、外键和索引的区别?
1)定义 主键:唯一标识一条记录,不能有重复的,不允许为空 外键:表的外键是另一表的主键, 外键可以有重复的, 可以是空值 索引:该字段没有重复值,但可以有一个空值
2)作用 主键:用来保证数据完整性 外键:用来和其他表建立联系用的 索引:提高查询排序的速度
3)个数 主键:只能有一个 外键:一个表可以有多个外键 索引:一个表可以有多个索引
106-sql排序关键字?sql分组关键字?
排序 order by;
分组 group by;
107-说一下数据库的索引的工作原理及其种类。
1)数据库索引: 是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这种数据结构,就是索引。 为表设置索引要付出代价的: 一是增加了数据库的存储空间, 二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。
2)根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引。
a. 唯一索引是不允许其中任何两行具有相同索引值的索引。
b. 主键索引 :数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。 在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。
c. 聚集索引 :在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,聚集索引表优点是查询速度快,缺点是对表进行修改速度较慢
108-什么是内连接?以及语法是什么?
内连接概念:内联接是用比较运算符比较要联接列的值的联接;
关键字是:join 或 inner join sql 语句: select * from table1 join table2 on table1.id=table2.id
与下列执行效果相同:
A:select a.,b. from table1 a,table2 b where a.id=b.id B:select * from table1 cross join table2 where table1.id=table2.id (注:cross join后加条件只能用where,不能用on)
109-“outer join”是什么?
outer join即外连接,不需要连接表的每一条记录都匹配连接条件,不匹配连接条件的记录也将返回。即两个表的并集。outer join又包括left join以及right join。 mysql没有outer join 相关语句,但可以对left join和right join的结果用union连接来实现。 select * from A a left join B b on a.ID = b.ID union select * from A a right join B b on a.ID = b.ID;
110-悲观锁和乐观锁的区别?
为什么需要锁? 在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就 是著名的并发性问题。
并发控制机制
悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性
乐观锁原理 使用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。
何谓数据版本?即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的“version” 字段来实现。当读取数据时,将 version 字段的值一同读出,数据每更新一次,对此 version 值加一。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的 version 值进行比对,如果数据库表当前版本号与第一次取出来的 version 值相等,则予以更 新,否则认为是过期数据.
悲观锁原理 需要使用数据库的锁机制,比如 MySQL,
先关闭 auto commit 属性,改为手动提交事务
在事务内通过 select...for update 语句锁定数据, 如:select * from t_goods where id=1 for update
此时在 t_goods 表中,id 为 1 的 那条数据就被我们锁定了,其它的事务必须等本 次事务提交之后才能执行。这样我们可以保证当前的数据不会被其它事务修改
111-update与Alter的区别?
他们存在功能上的区别: Alter可以修改表结构,update只能修改表数据
112-查询user表中,“李”姓用户的数量?(表中字段有u_id 、 username)
select count(*) from user where username like '李%';
113-什么叫索引值?
索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。
索引是针对表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据。
114-上家公司数据库数据总大小是多少??线上生产环境数据量是多大 ?
这个说个大概就好了,根据业务量情况,比如有xx万的用户数,xx万的订单,xx记录数等 至于生产环境的数据库情况,可以说自己不清楚,因为自己并没有生产环境数据的相关权限,日常测试工作也没有涉及到。面试官不一定是想了解你的真实业务数据量,可能只是确定你是真的项目实战经验,已经确实有在实际工作中应用数据库
115-一条sql执行过长的时间,你如何优化,从哪些方面?
- 1、查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表(业务和算法的优化)- 2、涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合- 3、如果以上两种都不能操作,非要链表查询,那么考虑对相对应的查询条件做索引。加快查询速度- 4、针对数量大的表进行历史表分离(如交易流水表)- 5、数据库主从分离,读写分离,降低读写针对同一表同时的压力,至于主从同步,mysql有自带的binlog实现 主从同步- 6、explain分析sql语句,查看执行计划,分析索引是否用上,分析扫描行数等等- 7、查看mysql执行日志,看看是否有其他方面的问题
116-Sequence的作用是什么?举个使用sequence的案例
sequence是oracle的序列,可以用来生成唯一数据,作为记录的主键值,在mysql中使用自动增长auto_increment
117-查看t表格里的a字段,如果字段为空,设置为xxx
update t set a='xxx' where a is null;
118-请列举一些Oracle数据库中的SID语句
select instance_name from V$instance;
119-mysql查询字段区不区分大小写?
不区分,值也不区分大小写
120-数据库中列举几种表连接的方式,有什么区别?
左连接: 以左表为基础,展示左表所有数据+左右两个表同时存在的数据
右连接: 以右表为基础,展示右表所有数据+左右两个表同时存在的数据
内连接: 展示两个表中同时存在的数据 PS. 如果再问其他的连接方式,就说用的比较多的就是这三种,其他的工作中没怎么用过
121-工作中的哪些方面会使用到数据库?如何使用?
(1)查询数据(查看数据的准确性) 比如卡里有 1000 元,商品 300 元。下单购买成功,提示扣费成功。 查看数据库库存是否从 300(原库存)变为 299,查看卡里的钱是否变为 700。
(2)造数据(方便测试) 比如参加领券活动,一个用户只能领一次。如果准备多个手机号测试会很麻烦。用券 有一个属性字段,如果参加过了就设置字段为 0,没参加过就设置字段为 1。测试 1 次, 字段由 1 变为 0。下次再测试,可以将字段改为 1 来继续测试。
(3)初始化、备份还原数据
122-数据库中drop、delete、truncate三者的区别?
都表示删除,但是三者有一些差别
(1)drop(丢弃数据): drop table 表名 ,直接将表都删除掉,在删除表的时候使用。 (2)truncate (清空数据) : truncate table 表名 ,只删除表中的数据,再插入数据的时候自增长id又从1开始,在清空表中数据的时候使用。 (3)delete(删除数据) : delete from 表名 where 列名=值,删除某一列的数据,如果不加 where 子句和truncate table 表名作用类似。
truncate和drop 属于DDL(数据定义语言)语句,操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发 trigger。而 delete 语句是DML (数据库操作语言)语句,这个操作会放到 rollback segement 中,事务提交之后才生效。
123-数据链接查询有哪些?
INNER JOIN: 如果查询的表中都有至少一个匹配,则返回行 LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行 FULL JOIN: 只要其中一个表中存在匹配,就返回行 UNION:合并多个SELECT 语句的结果集
124-分组使用到什么关键字
group by
125-触发器的作用是什么?
相当于一个触发装置 ,在进行增删改查操作时可以触发需要的操作,如写入时,时行数据校验,发生错误时回滚数据等等。
126-数据库中的连接(Join)是什么?有哪些类型的连接?
连接是将两个或多个表中的行关联起来的操作。常见的连接类型包括内连接(Inner Join)、左连接(Left Join)、右连接(Right Join)和全连接(Full Join)。
127-列举几种表连接的方式,有什么区别?
左连接: 左边为主表表数据全部显示, 匹配表的不匹配部分不显示
右连接: 右边为主表表数据全部显示, 匹配表的不匹配部分不显示
内连接: 只有两个元素表相匹配的才能在结果集中显示 全外连接: 连接中的不匹配的数据全部会显示出来 交叉连接: 笛卡尔乘积, 显示的结果是连接表数的乘积
128-说下mysql的多表查询?
MySQL中可以通过JOIN关键字来实现多表查询,常见的JOIN类型有:
- INNER JOIN:只返回两个表中共有的数据行,即交集部分。- LEFT JOIN:返回左表中所有数据行,以及右表中与左表匹配的数据行,右表中未匹配的数据行用NULL填充。- RIGHT JOIN:返回右表中所有数据行,以及左表中与右表匹配的数据行,左表中未匹配的数据行用NULL填充。- FULL OUTER JOIN:返回左表和右表中所有数据行,左表和右表未匹配的数据行用NULL填充。 示例:
假设有两个表格,一个是用户表user,包含字段id和name;另一个是订单表order,包含字段id和user_id。
我们想要查询每个订单所对应的用户名称,可以使用如下的SQL语句:
SELECT order.id, user.name FROM order INNER JOIN user ON order.user_id = user.id;
这条SQL语句使用了INNER JOIN来连接order和user两个表,并根据user_id和id这两个字段进行匹配,返回结果包含order表中的id字段和user表中的name字段。
129-用过MySQL吗?大概聊一下MySQL的join的几个语法?
嗯,用过嗯我公司就是用的mysql数据库。
左连接,右连接和内连接。左连接left join。两张表连接查询,左表的全部显示,右表有关联的就显示没有的就显示null。
右连接right join。两张表连接查询,右表的全部显示,左表有关联的就显示没有的就显示null。
内连接inner join,显示两张表有关联的所有的数据。
