2018秋招面试问题(十六、MySQL面试问题)

查看表的主键

show fields from product;

关系型数据库

MYSQL就是关系型数据库。非关系型数据库就是key_value模型的数据库,通常会用到哈希表

  • 非关系型数据库的优点:
  1. 基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
  2. 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
  • 关系型数据库的优点:
  1. 可以做非常复杂的数据查询,比如join等。
  2. 保持数据的一致性(支持事务处理)

关系型数据库的缺点:

  1. 大量数据的写入处理。
  2. 对简单查询需要快速返回结果的处理。

如果一个数据库有大量数据的写入处理,那么怎么设计比较好?

  1. 使用数据库主从模式。数据的写入由主数据库负责,数据的读入由从数据库负责,可以比较简单地通过增加从数据库来实现规模化。
  2. 要想将数据的写入规模化,可以考虑把主数据库从一台增加到两台。这样可以把每台主数据库的负荷减少一半。把对每个表的请求分别分配给合适的主数据库来处理,避免冲突造成数据不一致。

可以考虑把数据库分割开来,分别放在不同的数据库服务器上,比如将不同的表放在不同的数据库服务器上,数据库分割可以减少每台数据库服务器上的数据量。不同服务器上的表之间无法进行Join处理,数据库分割的时候就需要预先考虑这些问题。MYSQL如何备份和导入

exit退出mysql。然后mysqldump -h;就可以开始备份

  • 导出整个数据库

mysqldump -u 用户名 -p 数据库名 > 导出的文件名

文件名随便定,要给路径,.\表示导出在桌面上

mysqldump -u root -p view > .\root.sql;(存在桌面上)

mysqldump -u root -p view > d:\git\tang.sql; (存在d盘的git文件夹中)

  • 导出一个表

mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

  • 导出全部数据库,--all-databases

mysqldump -uroot -p --all-databases;

  • 导出全部,--all-databases --all-tablespaces

mysqldump -uroot -p --all-databases --all-tablespaces;

  • 导入一个表,先进入mysql中,用source导进来

source 文件名;        (文件名中的路径必须得是绝对路径)

数据库的表与表之间有几种关系

一对一、一对多、多对多

有两个表,在第一个表中的某一行只与第二个表中的一行相关,同时第二个表中的某一行,也只与第一个表中的一行相关,我们称这两个表为一对一关系。

有多张表,第一个表中的行可以与第二个表中的一到多个行相关联,但是第二个表中的一行只能与第一个表中的一行相关联。

有两个表,第一个表的一行可以与第二个表中的一到多个行相关联,同时,第二个表中的一行可以与第一个表中的一到多个行相关联。

设计数据库表所要遵循的三大范式

第一范式:强调列的原子性,字段不可分。

第二范式:非主键的字段必须完全依赖于主键,而不能只依赖于主键的一部分。

比如:比如有一个订单表,主键是(OrderID,ProductID)。显而易见折扣字段,数量字段完全依赖(取决)于主键,而单价字段,产品名字段只依赖于 ProductID。所以这个订单表不符合第二范式。不符合 2NF 的设计容易产生冗余数据有些数据会多次重复
可以把订单表拆分为表A(OrderID,ProductID,折扣,数量)和B(ProductID,单价,产品名)来消除原订单表中UnitPrice,ProductName多次重复的情况。这样两个表都满足第二范式。

第三范式:非主键的列必须直接依赖主键,不能传递依赖。比如不能存在:非主键列A依赖非主键列B,非主键列B依赖主键C。

事务的四大特性和四大隔离级别、脏读、幻读、锁

找出表中成绩最好的学生

select name from mathclass order by grade desc limit 1;

//从表中将grade降序,取第一个的名字,前三名就是limit 3

找出表中数学成绩最好的学生

select name from class where project='数学' order by grade desc limit 1;

找出每个科目成绩最好的学生

select * from class a where grade=(select max(grade) from class where project=a.project);

查询结果是:

找出每个学生三科中成绩最高的那一门和分数

select * from class a where grade=(select max(grade) from class where name=a.name);

找出表中三科平均成绩最好的学生

select name,avg(grade) from class group by name order by avg(grade) desc limit 1;

//先由name来分组,再由平均成绩的降序,输出第一个的名字和平均成绩。注意,group by 和order by同时使用时,group by 在前面,order by在后面。

有一个表1,里面包括用户名和所在城市,有一个表二,里面包括订单号和用户名。我们查询所有成都用户的订单号。

select customer,id from table2 where customer in (select customer from table1 where city=’成都’);

有empoyee雇员表、department部门表如下:

输出属于科技部的员工姓名:

Selete name from employee where d_id = (selete d_id from department where d_name=’科技部’);

输出科技部的员工个数:

select count(d_id) from employee where d_id = (selete d_id from department where d_name=’科技部’);

输出科技部的女生个数:

select count(d_id) from employee where sex = ‘女生’ and d_id = (selete d_id from department where d_name=’科技部’);

输出科技部的平均年龄、最大年龄:

select avg(age),max(age) from employee where d_id = (selete d_id from department where d_name=’科技部’);

一个表A有6个字段,另一个表B有8个字段,那么左外连接、右外连接、外连接、内连接、全外连接的字段范围或大小是?

左外连接中字段数是6~14

右外连接中字段数是8~14

外连接中字段数是6~14

内连接中字段数是0~6

全外连接是14

drop、deete、truncate的区别

  1. delete和truncate只删除表的数据不删除表的结构。
  2. 速度的话,是drop>truncate>delete。

drop和truncate都是dll,操作立即生效,不能回滚,操作不触发trigger。delete是dml,事务提交之后才会生效,如果有相应的trigger,执行的时候也会触发。

这三个分别在哪些场合使用

不再需要表时,用drop;

删除部分数据,用带where的delete;

保留表而删除所有数据时用truncate;

DML、DCL、DLL的区别

DML:数据操作语言。 INSTERT /UPDATE /DELETE /SELECT

DCL:数据控制语言。GRANT /REVOKE /COMMIT /ROLLBACK /LOCK

DLL:数据定义语言。CREATE TABLE /ALTER TABLE /DROP TABLE /CREATE INDEX /DROP INDEX

游标的作用是什么?如何知道游标已经到了最后

游标用于定位结果集的行。通过全局变量fetchstatus可以判断是否到了最后,通常此变量不等于0表示出错,或者已经到了最后。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值