Mysql校招、实习常见⾯试题总结1(较基础)
1.如何避免 sql 注⼊?
PreparedStatement(简单⼜有效的⽅法)、使⽤正则表达式过滤传⼊的参数、字符串过滤、检查是否包函⾮法字符、页⾯判断代码。qt格式化代码快捷键
2.数据库的三范式是什么?
第⼀范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满⾜第⼀范式的,简记为1NF。满⾜第⼀范式是关系模式规范化的最低要
求,否则,将有很多基本操作在这样的关系模式中实现不了。
第⼆范式:如果关系模式R满⾜第⼀范式,并且R得所有⾮主属性都完全依赖于R的每⼀个候选关键属性,称R满⾜第⼆范式,简记为2NF。第三范式:设R是⼀个满⾜第⼀范式条件的关系模式,X是R的任意属性集,如果X⾮传递依赖于R的任意⼀个候选关键字,称R满⾜第三范式,简记为3NF.
3.⼀张⾃增表⾥⾯总共有 7 条数据,删除了最后 2 条数据,重启 MySQL 数据库,⼜插⼊了⼀条数据,此时 ID 是⼏?
北大复旦等52人学术不端被曝光create table语句创建表⼀般情况下,我们创建的表的类型是InnoDB,如果新增⼀条记录(不重启mysql的情况下),这条记录的id是18;但是如果重启(⽂中提到的)MySQL的话,这条记录的ID是15。因为InnoDB表只把⾃增主键的最⼤ID记录到内存中,所以重启数据库或者对表OPTIMIZE操作,都会使最⼤ID丢失。 但是,如果我们使⽤表的类型是MylSAM,那么这条记录的ID就是18。因为MylSAM表会把⾃增主键的最⼤ID记录到数据⽂件⾥⾯,重启MYSQL后,⾃增主键的最⼤ID也不会丢失。因此题⽬所问的ID应该是6。
4.Char 和 VarChar 的区别是什么?
(1)⾸先明确的是,char的长度是不可变的,⽽varchar的长度是可变的,mysql面试题sql
(2)定义⼀个char[10]和varchar[10],如果存进去的是‘abcd’,那么char所占的长度依然为10,除了字符‘abcd’外,后⾯跟六个空格,⽽varchar就⽴马把长度变为4了,取数据的时候,char类型的要⽤trim()去掉多余的空格,⽽varchar是不需要的,(3)char的存取数度还是要⽐varchar要快得多,因为其长度固定,⽅便程序的存储与查;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,⽽varchar是以空间效率为⾸位的。(4)char的存储⽅式是,对英⽂字符(ASCII)占⽤1个字节,对⼀个汉字占⽤两个字节;⽽varchar的存储⽅式是,对每个英⽂字符占⽤2个字节,汉字也占⽤2个字节,两者的存储数据都⾮unicode的字符数据。
5.MySQL 的内连接、左连接、右连接有什么区别?
1.内连接,显⽰两个表中有联系的所有数据;
2.左链接,以左表为参照,显⽰所有数据;
3.右链接,以右表为参照显⽰数据;
6.MySQL索引是怎么实现的?
7.怎么验证 MySQL的索引是否满⾜需求?
representational使⽤⽅法,在select语句前加上explain就可以了:EXPLAIN SELECT surname,first_name form a,b WHERE a.id=b.id
8.说⼀下数据库的事务隔离?
读未提交,读提交,可重复读,可串⾏。
9.说⼀下 MySQL常⽤的引擎?
在MySQL数据库中,常⽤的引擎主要就是2个:Innodb和MyIASM。
10.说⼀下 MySQL的⾏锁和表锁?
11.说⼀下乐观锁和悲观锁?
悲观锁:正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来⾃外部系统的事务处理)修改持保守态度(悲观),因此,在整个数据处理过程中,将数据处于锁定状态。 悲观锁的实现,往往依靠数据库提供的锁机制 (也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也⽆法保证外部系统不会修改数据)。
乐观锁( Optimistic Locking )是相对悲观锁⽽⾔,乐观锁假设数据⼀般情况下不会造成冲突,所以在事务对数据进⾏提交更新的时候,才会正式对数据的冲突与否进⾏检测,如果发现冲突了,则返回错误信息,让⽤户决定如何去做。
相对于悲观锁,在对数据库进⾏处理的时候,乐观锁并不会使⽤数据库提供的锁机制,⼀般⽤记录数据版本的⽅式实现乐观锁。
12.MySQL问题排查都有哪些⼿段?
事物级别select @@_isolation;输出数据当前状态–返回最近⼀次死锁场景,等等信息SHOW ENGINE INNODB STATUS ;可⽤于排查死锁问题,锁定⾏数等问题 查询数据库连接信息 select * fro
m information_schema.PROCESSLIST查询事务信息–观察事务启动时间,判断是否为最近的创建的 select * from information_schema.INNODB_TRX;。查询数据库锁等待信息–如果存在数据表⽰当前存在所等待情况 select * from information_schema.INNODB_LOCK_WAITS;⼿动杀掉某个进程–来源于select * from
information_schema.INNODB_TRX; kill trx_mysql_thread_id; 数据库客户端连接ip统计;查询数据库指定连接的当前执⾏sql 。 查询锁等待的前后事物和客户端调⽤的简单sql 。 数据库客户端连接简介
13.如何做 MySQL的性能优化?
(1)MySQL数据表字段要选取合适的字段属性。
(2)使⽤连接Join来代替字查询(sub-Query)。
(3)使⽤联合Union来代替⼿动创建临时表。
(4)使⽤事务机制来完成需要多个SQL操作的数据处理,保证数据的完整性和安全访问。事务⼀begin关键字开始,commit关键字结束,rollback命令可以把数据库恢复到begin开始之前的状态。(5)使⽤外键来优化关联表的性能,外键可以⽤来保证数据的关联性。(6)使⽤索引提⾼MySQL数据库的性能。索引是提⾼数据库性能的常⽤⽅法,它可以令数据库服务器以⽐没有索引快得多的速度
render into检索特定的⾏,尤其是在查询语句当中包含MAX(),MIN()和ORDER BY这些命令的时候,性能提⾼更为明显。
(7)通过优化查询语句提⾼查询速度。多数情况下索引可以提⾼查询速度,单如果SQL语句使⽤不恰当的话,索引将⽆法发挥他应有的作⽤。1)最好在相同类型的字段间进⾏⽐较2)在建有索引的字段上尽量不要使⽤函数操作.
(8)如果情况允许锁定表的⽅式会⽐采⽤事务的⽅式拥有更好的性能。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论