mysql必须在15到40之间_别啦!都在这,MySQL40道常见
⾯试题与答案!
1、MySQL 中有哪⼏种锁?
1、表级锁: 开销⼩, 加锁快; 不会出现死锁; 锁定粒度⼤, 发⽣锁冲突的概率最⾼, 并发度最低。
2、⾏级锁: 开销⼤, 加锁慢; 会出现死锁; 锁定粒度最⼩, 发⽣锁冲突的概率最低, 并发度也最⾼。
3、页⾯锁: 开销和加锁时间界于表锁和⾏锁之间; 会出现死锁; 锁定粒度界于表锁和⾏锁之间, 并发度⼀般。
2、MySQL 中有哪些不同的表格?
共有 5 种类型的表格: 1、MyISAM2、Heap 3、Merge 4、INNODB 5、MISAM
3、简述在MySQL 数据库中 MyISAM 和InnoDB 的区别
MyISAM:
不⽀持事务, 但是每次查询都是原⼦的; ⽀持表级锁, 即每次操作是对整个表加锁; 存储表的总⾏数;
⼀个 MYISAM 表有三个⽂件: 索引⽂件、表结构⽂件、数据⽂件;
采⽤菲聚集索引, 索引⽂件的数据域存储指向数据⽂件的指针。辅索引与主索引基本⼀致, 但是辅索引不⽤保证唯⼀性。
InnoDb:
⽀持 ACID 的事务, ⽀持事务的四种隔离级别; ⽀持⾏级锁及外键约束: 因此可以⽀持写并发; 不存储总⾏数:
⼀个 InnoDb 引擎存储在⼀个⽂件空间( 共享表空间, 表⼤⼩不受操作系统控制,
⼀个表可能分布在多个⽂件⾥), 也有可能为多个( 设置为独⽴表空, 表⼤⼩受操作系统⽂件⼤⼩限制, ⼀般为 2G), 受操作系统⽂件⼤⼩的限制;
主键索引采⽤聚集索引( 索引的数据域存储数据⽂件本⾝), 辅索引的数据域存储主键的值; 因此从辅索引查数据, 需要先通过辅索引到主键值, 再访问辅索引; 最好使⽤⾃增主键, 防⽌插⼊数据时, 为维持 B+树结构, ⽂件的⼤调整。
4、MySQL 中InnoDB ⽀持的四种事务隔离级别名称,以及逐
级之间的区别?SQL 标准定义的四个隔离级别为:
1、read uncommited : 读到未提交数据
2、read committed: 脏读, 不可重复读
3、repeatable read: 可重读
4、serializable : 串⾏事物
5、CHAR 和VARCHAR 的区别?
1、CHAR 和 VARCHAR 类型在存储和检索⽅⾯有所不同
2、CHAR 列长度固定为创建表时声明的长度, 长度值范围是 1 到 255 当 CHAR 值被存储时, 它们被⽤空格填充到特定长度, 检索CHAR 值时需删除尾随空格。
6、主键和候选键有什么区别?
表格的每⼀⾏都由主键唯⼀标识,⼀个表只有⼀个主键。
主键也是候选键。按照惯例, 候选键可以被指定为主键, 并且可以⽤于任何外键引⽤。
7、myisamchk 是⽤来做什么的?
它⽤来压缩 MyISAM 表, 这减少了磁盘或内存使⽤。
MyISAM Static 和 MyISAM Dynamic 有什么区别?
提取符合条件的多行数据
在 MyISAM Static 上的所有字段有固定宽度。动态 MyISAM 表将具有像 TEXT, BLOB 等字段, 以适应不同长度的数据类型。
MyISAM Static 在受损情况下更容易恢复。
8、如果⼀个表有⼀列定义为TIMESTAMP,将发⽣什么?
每当⾏被更改时, 时间戳字段将获取当前时间戳。列设置为 AUTO INCREMENT 时, 如果在表中达到最⼤值, 会发⽣什么情况?它会停⽌递增, 任何进⼀步的插⼊都将产⽣错误, 因为密钥已被使⽤。
怎样才能出最后⼀次插⼊时分配了哪个⾃动增量?LAST_INSERT_ID 将返回由 Auto_increment 分配的最后⼀个值, 并且不需要指定表名称。
9、你怎么看到为表格定义的所有索引?
索引是通过以下⽅式为表格定义的:
SHOW INDEX FROM ;
10、LIKE 声明中的%和_是什么意思?% 对应于 0 个或更多字符,_只是 LIKE 语句中的⼀个字符。
如何在 Unix 和 MySQL 时间戳之间进⾏转换?UNIX_TIMESTAMP 是从 MySQL 时间戳转换为 Unix 时间戳的命令FROM_UNIXTIME 是从 Unix 时间戳转换为 MySQL 时间戳的命令
11、列对⽐运算符是什么?
在 SELECT 语句的列⽐较中使⽤=,<>,<=, =,>,<>,<=>,AND, OR 或 LIKE 运算符。
12、BLOB 和TEXT 有什么区别?如何写自己的网站
BLOB 是⼀个⼆进制对象, 可以容纳可变数量的数据。TEXT 是⼀个不区分⼤⼩写的 BLOB。
BLOB 和 TEXT 类型之间的唯⼀区别在于对 BLOB 值进⾏排序和⽐较时区分⼤⼩写, 对 TEXT 值不区分⼤⼩写。
13、MySQL_fetch_array 和MySQL_fetch_object 的区别是什么?
以下是 MySQL_fetch_array 和 MySQL_fetch_object 的区别:
MySQL_fetch_array( ) – 将结果⾏作为关联数组或来⾃数据库的常规数组返回。 MySQL_fetch_object – 从数据库返回结果⾏作为对象。
14、MyISAM 表格将在哪⾥存储,并且还提供其存储格式?
每个 MyISAM 表格以三种格式存储在磁盘上:
·“.frm” ⽂件存储表定义
·数据⽂件具有“.MYD”( MYData)
扩展名索引⽂件具有“.MYI”( MYIndex) 扩展名
15、MySQL 如何优化DISTINCT?
DISTINCT 在所有列上转换为 GROUP BY, 并与 ORDER BY ⼦句结合使⽤。SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;
16、如何显⽰前 50 ⾏?
在 MySQL 中, 使⽤以下代码查询显⽰前 50 ⾏: SELECT*FROM TABLE LIMIT 0,50;
17、可以使⽤多少列创建索引?
任何标准表最多可以创建 16 个索引列。
18、NOW()和 CURRENT_DATE()有什么区别?
NOW() 命令⽤于显⽰当前年份, ⽉份, ⽇期, ⼩时, 分钟和秒。CURRENT_DATE() 仅显⽰当前年份, ⽉份和⽇期。
19、什么是⾮标准字符串类型?
1、TINYTEXT
2、TEXT
3、MEDIUMTEXT
4、LONGTEXT
20、什么是通⽤ SQL 函数?
1、CONCAT(A, B) – 连接两个字符串值以创建单个字符串输出。通常⽤于将两个或多个字段合并为⼀个字段。
2、FORMAT(X, D)- 格式化数字 X 到 D 有效数字。
3、CURRDATE(), CURRTIME()- 返回当前⽇期或时间。
4、NOW() – 将当前⽇期和时间作为⼀个值返回。
5、MONTH(), DAY( ), YEAR(), WEEK(), WEEKDAY() – 从⽇期值中提取给定数据。
6、HOUR(), MINUTE(), SECOND() – 从时间值中提取给定数据。
7、DATEDIFF( A, B) – 确定两个⽇期之间的差异, 通常⽤于计算年龄
8、SUBTIMES( A, B) – 确定两次之间的差异。
9、FROMDAYS( INT) – 将整数天数转换为⽇期值。
21、MySQL ⽀持事务吗?
在缺省模式下,MySQL 是 autocommit 模式的,所有的数据库更新操作都会即时提交, 所以在缺省情况下, MySQL 是不⽀持事务的。
但是如果你的 MySQL 表类型是使⽤ InnoDB Tables 或 BDB tables 的话, 你的MySQL 就可以使⽤事务处理,使⽤ SET
AUTOCOMMIT=0 就可以使 MySQL 允许在⾮ autocommit 模式, 在⾮
autocommit 模式下,你必须使⽤ COMMIT 来提交你的更改,或者⽤ ROLLBACK 来回滚你的更改。
22、MySQL ⾥记录货币⽤什么字段类型好
NUMERIC 和 DECIMAL 类型被 MySQL 实现为同样的类型, 这在 SQL92 标准允许。他们被⽤于保存值, 该值的准确精度是极其重要的值, 例如与⾦钱有关的数据。当声明⼀个类是这些类型之⼀时, 精度和规模的能被(并且通常是)指定。
例如:
salary DECIMAL(9,2)
在这个例⼦中, 9(precision)代表将被⽤于存储值的总的⼩数位数,⽽ 2(scale)代表将被⽤于存储⼩数点后的位数。因此, 在这种情况下, 能被存储在 salary 列中的值的范围是从-9999999.99 到9999999.99。
23、MySQL 有关权限的表都有哪⼏个?
MySQL 服务器通过权限表来控制⽤户对数据库的访问, 权限表存放在 MySQL 数据库⾥,由 MySQL_install_db 脚本初始化。这些权限表分别 user,db,table_priv, columns_priv 和 host 。
24、列的字符串类型可以是什么?
字符串类型是: 1、SET
2、BLOB
3、ENUM
4、CHAR
5、TEXT
25、MySQL 数据库作发布系统的存储,⼀天五万条以上的增量, 预计运维三年,怎么优化?
1、设计良好的数据库结构, 允许部分数据冗余, 尽量避免 join 查询, 提⾼效率。
2、选择合适的表字段数据类型和存储引擎, 适当的添加索引。
3、MySQL 库主从读写分离。
4、规律分表, 减少单表中的数据量提⾼查询速度。
5、添加缓存机制, ⽐如 memcached, apc 等。
6、不经常改动的页⾯, ⽣成静态页⾯。
7、书写⾼效率的 SQL。⽐如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.
26、锁的优化策略
1、读写分离
2、分段加锁
3、减少锁持有的时间多个线程尽量以相同的顺序去获取资源
不能将锁的粒度过于细化, 不然可能会出现线程的加锁和释放次数过多, 反⽽效率不如⼀次加⼀把⼤锁。
27、索引的底层实现原理和优化
类风湿因子高吃什么药B+树, 经过优化的 B+树
主要是在所有的叶⼦结点中增加了指向下⼀个叶⼦节点的指针, 因此 InnoDB 建议为⼤部分表使⽤默认⾃增的主键作为主索引。28、什么情况下设置了索引但⽆法使⽤
1、以“%” 开头的 LIKE 语句, 模糊匹配
2、OR 语句前后没有同时使⽤索引
3、数据类型出现隐式转化( 如 varchar 不加单引号的话可能会⾃动转换为 int 型)
29、实践中如何优化 MySQL
最好是按照以下顺序优化:
1、SQL 语句及索引的优化
2、数据库表结构的优化
3、系统配置的优化
4、硬件的优化
30、优化数据库的⽅法
1、选取最适⽤的字段属性,尽可能减少定义字段宽度,尽量把字段设置 NOTNULL, 例如’ 省份’、’ 性别’ 最好适⽤ ENUM
2、使⽤连接(JOIN)来代替⼦查询
3、适⽤联合(UNION)来代替⼿动创建的临时表
4、事务处理
5、锁定表、优化事务处理
6、适⽤外键, 优化锁定表
css hover特效
7、建⽴索引
8、优化查询语句
31、简单描述 MySQL 中,索引,主键,唯⼀索引,联合索引
的区别,对数据库的性能有什么影响(从读写两⽅⾯)php里explode
索引是⼀种特殊的⽂件(InnoDB 数据表上的索引是表空间的⼀个组成部分), 它们包含着对数据表⾥所有记录的引⽤指针。
普通索引(由关键字 KEY 或 INDEX 定义的索引)的唯⼀任务是加快对数据的访问速度。
普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值, 在为这个数据列创建索引的时候就应该⽤关键字 UNIQUE 把它定义为⼀个唯⼀索引。也就是说, 唯⼀索引可以保证数据记录的唯⼀性。
主键, 是⼀种特殊的唯⼀索引, 在⼀张表中只能定义⼀个主键索引, 主键⽤于唯⼀标识⼀条记录, 使⽤关键字 PRIMARY KEY 来创建。
索引可以覆盖多个数据列,如像 INDEX(columnA, columnB)索引,这就是联合索引。
索引可以极⼤的提⾼数据的查询速度, 但是会降低插⼊、删除、更新表的速度, 因为在执⾏这些写操作时, 还要操作索引⽂件。
32、数据库中的事务是什么?
事务( transaction) 是作为⼀个单元的⼀组有序的数据库操作。如果组中的所有操作都成功, 则认为事务成功, 即使只有⼀个操作失败,事务也不成功。如果所有操作完成, 事务则提交, 其修改将作⽤于所有其他数据库进程。如果⼀个操作失败, 则事务将回滚, 该事务所有操作的影响都将取消。
事务特性:
1、原⼦性: 即不可分割性, 事务要么全部被执⾏, 要么就全部不被执⾏。
2、⼀致性或可串性。事务的执⾏使得数据库从⼀种正确状态转换成另⼀种正确状 态
3、隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何 其他事务,
4、持久性。事务正确提交后, 其结果将永久保存在数据库中, 即使在事务提交后有了其他故障, 事务的处理结果也会得到保存。或者这样理解:事务就是被绑定在⼀起作为⼀个逻辑⼯作单元的 SQL 语句分组, 如果任何⼀个语句操作失败那么整个操作就被失败, 以后操作就会回滚到操作前状态, 或
者是上有个节点。为了确保要么执⾏, 要么不执⾏, 就可以使⽤事务。要将有组语句作为事务考虑, 就需要通过 ACID 测试, 即原⼦性, ⼀致性, 隔离性和持久性。
33、SQL 注⼊漏洞产⽣的原因?如何防⽌?
SQL 注⼊产⽣的原因: 程序开发过程中不注意规范书写 sql 语句和对特殊字符进⾏过滤,导致客户端可以通过全局变量 POST 和 GET 提交⼀些 sql 语句正常执⾏。防⽌ SQL 注⼊的⽅式:
mysql面试题基础知识开启配置⽂件中的 magic_quotes_gpc 和 magic_quotes_runtime 设置
执⾏ sql 语句时使⽤ addslashes 进⾏ sql 语句转换Sql 语句书写尽量不要省略双引号和单引号。
过滤掉 sql 语句中的⼀些关键词: update、insert、delete、select、 * 。
提⾼数据库表和字段的命名技巧, 对⼀些重要的字段根据程序的特点命名, 取不易被猜到的。
34、为表中得字段选择合适得数据类型
字段类型优先级: 整形>date,time>enum,char>varchar>blob,text
优先考虑数字类型, 其次是⽇期或者⼆进制类型, 最后是字符串类型, 同级别得数据类型, 应该优
先选择占⽤空间⼩的数据类型
35、存储时期
Datatime:以 YYYY-MM-DD HH:MM:SS 格式存储时期时间, 精确到秒, 占⽤ 8 个字节得存储空间, datatime 类型与时区⽆关

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。