java面试题整理(17)

一、什么是通用 SQL 函数?
数学函数
· Abs(num)求绝对值
· floor(num)向下取整
· ceil(num)向上取整
字符串函数
· insert (s1,index,length,s2) 替换函数
o S1 表示被替换的字符串
o s2 表示将要替换的字符串
o Index 表示被替换的位置, 从 1 开始
o Length 表示被替换的长度
· upper(str),ucase(str)将字母改为大写
· lower(str),lcase(str)将字母改为小写
· left(str,length)返回 str 字符串的前 length 个字符
· right(str,length)返回 str 字符串的后 length 个字符
· substring(str,index,length)返回 str 字符串从 index 位开始长度为length 个字符(index 从 1 开始)
· reverse(str)将 str 字符串倒序输出
日期函数
· curdate()、current_date( ) 获取当前日期
· curtime()、current_time( ) 获取当前日期
· now()获取当前日期和时间
· datediff(d1、d2)d1 和 d2 之间的天数差
· adddate(date,num)返回 date 日期开始,之后 num 天的日期
· subdate(date,num)返回 date 日期开始,之前 num 天的日期
聚合函数
· Count(字段)根据某个字段统计总记录数(当前数据库保存到多少条数据)
· sum(字段)计算某个字段的数值总和
· avg(字段)计算某个字段的数值的平均值
· Max(字段)、min(字段)求某个字段最大或最小值

二、MySQL 中有哪几种锁?
MyISAM 支持表锁,InnoDB 支持表锁和行锁,默认为行锁。
表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低。
行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高。
表级: 引擎 MyISAM ,理解为锁住整个表,可以同时读,写不行。
行级: 引擎INNODB ,单独的一行记录加锁,对指定的记录进行加锁,这样其它进程还是可以对同一个表中的其它记录进行操作。 表级锁速度快,但冲突多,行级冲突少,但速度慢。

三、MySQL 数据优化。
· 优化数据类型
o 避免使用 NULL,NULL 需要特殊处理, 大多数时候应该使用 NOTNULL,或者使用一个特殊的值,如 0,-1 作为默认值。
o 仅可能使用更小的字段,MySQL 从磁盘读取数据后是存储到内存中的,然后使用 cpu 周期和磁盘 I/O 读取它,这意味着越小的数据类型占用的空间越小.
· 小心字符集转换
o 客户端或应用程序使用的字符集可能和表本身的字符集不一样,这需要MySQL 在运行过程中隐含地进行转换,此外,要确定字符集如 UTF-8 是否支持多字节字符,因此它们需要更多的存储空间。
· _ 优化 count(my col) 和 count( ) *
· 优化子查询
o 遇到子查询时,MySQL 查询优化引擎并不是总是最有效的,这就是为什么经常将子查询转换为连接查询的原因了,优化器已经能够正确处理连接查询了,当然要注意的一点是,确保连接表 (第二个表) 的连接列是有索引的,在第一个表上 MySQL 通常会相对于第二个表的查询子集进行一次全表扫描,这是嵌套循环算法的一部分。
· 优化 UNION
o 在跨多个不同的数据库时使用 UNION 是一个有趣的优化方法,
UNION 从两个互不关联的表中返回数据,这就意味着不会出现重复的行,同时也必须对数据进行排序,我们知道排序是非常耗费资源的,特别是对大表的排序。
o UNION ALL 可以大大加快速度,如果你已经知道你的数据不会包括重复行,或者你不在乎是否会出现重复的行,在这两种情况下使用UNION ALL 更适合。此外,还可以在应用程序逻辑中采用某些方法避免出现重复的行,这样 UNION ALL 和 UNION 返回的结果都是一样的,但 UNION ALL 不会进行排序。

四、MySQL 的关键字。
添加索引:alter table tableName add 索引(索引字段)
主键:primary key
唯一:unique
全局:fulltext
普通:index
多列: index index_name

五、存储引擎。
存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
· MyISAM:这种引擎是 mysql 最早提供的。这种引擎又可以分为静态MyISAM、动态 MyISAM 和压缩 MyISAM 三种:
o 静态 MyISAM:如果数据表中的各数据列的长度都是预先固定好的,服务器将自动选择这种表类型。因为数据表中每一条记录所占用的空间都是一样的,所以这种表存取和更新的效率非常高。当数据受损时,恢复工作也比较容易做。
o 动态 MyISAM:如果数据表中出现 varchar、text 或 BLOB 字段时,服务器将自动选择这种表类型。相对于静态 MyISAM,这种表存储空间比较小,但由于每条记录的长度不一,所以多次修改数据后,数据表中的数据就可能离散的存储在内存中,进而导致执行效率下降。同时,内存中也可能会出现很多碎片。因此,这种类型的表要经常用optimize table 命令或优化工具来进行碎片整理。
o 压缩 MyISAM:以上说到的两种类型的表都可以用 myisamchk 工具压缩。这种类型的表进一步减小了占用的存储,但是这种表压缩之后不能再被修改。另外,因为是压缩数据,所以这种表在读取的时候要先行解压缩。但是,不管是何种 MyISAM 表,目前它都不支持事务,行级锁和外键约束的功能。
· MyISAM Merge 引擎:这种类型是 MyISAM 类型的一种变种。合并表是将几个相同的 MyISAM 表合并为一个虚表。常应用于日志和数据仓库。
· InnoDB:InnoDB 表类型可以看作是对 MyISAM 的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能。
· memory(heap):这种类型的数据表只存在于内存中。它使用散列索引,所以数据的存取速度非常快。因为是存在于内存中,所以这种类型常应用于临时表中。
· archive:这种类型只支持 select 和 insert 语句,而且不支持索引。
· Desc[ribe] tablename:查看数据表的结构。
· show engines:命令可以显示当前数据库支持的存储引擎情况。

六、数据库备份。
必须要在未登录状态下
· 导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
· 导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
· 导出一个数据库结构
mysqldump -u dbuser -p -d --add-drop-table
dbname >d:/dbname_db.sql
-d 没有数据 --add-drop-table 在每个 create 语句之前增加一个 drop table

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值