mysql篇二面试题

Mysql二

16.如果一个表有一列定义为 TIMESTAMP,将发生什么?

  • 每当行被更改时,时间戳字段将获取当前时间戳。
    在这里插入图片描述

勾上下面根据当前时间戳更新,然后在表中修改除time,id以外其他两个两个字段会看到time时间是修改的系统时间。

注:通过测试,因为是根据系统时间来更新,所以当系统时间有严重误差时,更新的时间会影响判断

  • 列设置为 AUTO INCREMENT 时,如果在表中达到最大值,会发生什么情况?

它会停止递增,任何进一步的插入都将产生错误,因为密钥已被使用。

  • 怎样才能找出最后一次插入时分配了哪个自动增量?

LAST_INSERT_ID 将返回由 Auto_increment 分配的最后一个值,并且不需要指定表名称。

17.什么是通用 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) – 确定两个日期之间的差异,通常用于计算年龄

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BkicLxmH-1614309719473)(C:\Users\15409\AppData\Roaming\Typora\typora-user-images\image-20210226095641474.png)]

8、SUBTIMES(A,B) – 确定两次之间的差异。
9、FROMDAYS(INT) – 将整数天数转换为日期值。

18.MySQL 支持事务吗?

在缺省模式下,MySQL 是 autocommit 模式的,所有的数据库更新操作都会即时
提交,所以在缺省情况下,MySQL 是不支持事务的。
但是如果你的 MySQL 表类型是使用 InnoDB Tables 或 BDB tables 的话,你的
MySQL 就可以使用事务处理,使用 SET
AUTOCOMMIT=0 就可以使 MySQL 允许在非 autocommit 模式,在非
autocommit 模式下,你必须使用 COMMIT 来提交你的更改,或者用 ROLLBACK
来回滚你的更改。

19.MySQL 里记录货币用什么字段类型好?

NUMERICDECIMAL 类型被 MySQL 实现为同样的类型,这在 SQL92 标准允
许。他们被用于保存值,该值的准确精度是极其重要的值,例如与金钱有关的数
据。当声明一个类是这些类型之一时,精度和规模的能被(并且通常是)指定。
例如:
salary DECIMAL(9,2)
在这个例子中,9(precision)代表将被用于存储值的总的小数位数,而 2(scale)代
表将被用于存储小数点后的位数。
因此,在这种情况下,能被存储在 salary 列中的值的范围是从-9999999.99 到
9999999.99。

19.MySQL 有关权限的表都有哪几个?

MySQL 服务器通过权限表来控制用户对数据库的访问,权限表存放在 MySQL 数
据库里,由 MySQL_install_db 脚本初始化。这些权限表分别 user,db,table_priv,
columns_priv 和 host。

20.列的字符串类型可以是什么?

字符串类型是:
1、SET
2、BLOB
3、ENUM
4、CHAR
5、TEXT

详解参考

enum和set使用参考

21.锁的优化策略?

1、读写分离
2、分段加锁
3、减少锁持有的时间
4.多个线程尽量以相同的顺序去获取资源
不能将锁的粒度过于细化,不然可能会出现线程的加锁和释放次数过多,反而效
率不如一次加一把大锁。

22.索引的底层实现原理和优化?

B+树,经过优化的 B+树
主要是在所有的叶子结点中增加了指向下一个叶子节点的指针,因此 InnoDB 建
议为大部分表使用默认自增的主键作为主索引

23.什么情况下设置了索引但无法使用?

1、以“%”开头的 LIKE 语句,模糊匹配
2、OR 语句前后没有同时使用索引
3、数据类型出现隐式转化(如 varchar 不加单引号的话可能会自动转换为 int 型)

24.实践中如何优化 MySQL?

最好是按照以下顺序优化:
1、SQL 语句及索引的优化
2、数据库表结构的优化
3、系统配置的优化
4、硬件的优化

参考

25.优化数据库的方法?

1、选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置 NOTNULL,
例如’省份’、’性别’最好适用 ENUM
2、使用连接(JOIN)来代替子查询
3、适用联合(UNION)来代替手动创建的临时表
4、事务处理
5、锁定表、优化事务处理
6、适用外键,优化锁定表
7、建立索引
8、优化查询语句

26.数据库中的事务是什么?

事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有
操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所
有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作
失败,则事事务特性:
1、原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。
2、一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状

3、隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何
其他事务,
4、持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后
有了其他故障,事务的处理结果也会得到保存。
或者这样理解:
事务就是被绑定在一起作为一个逻辑工作单元的 SQL 语句分组,如果任何一个语
句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上
有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作
为事务考虑,就需要通过 ACID 测试,即原子性,一致性,隔离性和持久性。务将回滚,该事务所有操作的影响都将取消。

27.SQL 注入漏洞产生的原因?如何防止?

SQL 注入产生的原因:程序开发过程中不注意规范书写 sql 语句和对特殊字符进
行过滤,导致客户端可以通过全局变量 POST 和 GET 提交一些 sql 语句正常执行。
防止 SQL 注入的方式:开启配置文件中的 magic_quotes_gpc 和 magic_quotes_runtime 设置
执行 sql 语句时使用 addslashes 进行 sql 语句转换
Sql 语句书写尽量不要省略双引号和单引号。
过滤掉 sql 语句中的一些关键词:update、insert、delete、select、 * 。
提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不
易被猜到的

28.存储时期

Datatime:以 YYYY-MM-DD HH:MM:SS 格式存储时期时间,精确到秒,
占用 8 个字节得存储空间,datatime 类型与时区无关
Timestamp:以时间戳格式存储,占用 4 个字节,范围小 1970-1-1 到 2038-1-19,
显示依赖于所指定得时区,默认在第一个列行的数据修改时可以自动得修改
timestamp 列得值
Date:(生日)占用得字节数比使用字符串.datatime.int 储存要少,使用 date 只
需要 3 个字节,存储日期月份,还可以利用日期时间函数进行日期间得计算
Time:存储时间部分得数据
注意:不要使用字符串类型来存储日期时间数据(通常比字符串占用得储存空间小,
在进行查找过滤可以利用日期得函数)
使用 int 存储日期时间不如使用 timestamp 类型

29.SQL 语言包括哪几部分?每部分都有哪些操作关键字?

SQL 语言包括数据定义(DDL)、数据操纵(DML),数据控制(DCL)和数据查询(DQL)
四个部分。
数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index 等
数据操纵:Select ,insert,update,delete,
数据控制:grant,revoke
数据查询:select

30.说说对 SQL 语句优化有哪些方法?(选择几条)

1、Where 子句中:where 表之间的连接必须写在其他 Where 条件之前,那些可
以过滤掉最大数量记录的条件必须写在 Where 子句的末尾.HAVING 最后。
2、用 EXISTS 替代 IN、用 NOT EXISTS 替代 NOT IN。
3、 避免在索引列上使用计算
4、避免在索引列上使用 IS NULL 和 IS NOT NULL
5、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉
及的列上建立索引。
6、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃
使用索引而进行全表扫描
7、应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用
索引而进行全表扫描

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值