mysql必知必会知识点汇总

摸鱼看完的书,笔记扔在这里记录一下:)

  • mySQLINOR的速度快,原因?
    • 对于IN来说,会将匹配的行的值r与二叉搜索树(r1,r2,r3)进行查找,时间复杂度为 O ( l o g n ) O(logn) O(logn)
    • 对于OR来说,会将匹配的行的值r与全部的值进行依次匹配,时间复杂度为 O ( n ) O(n) O(n)
  • IN的最大优点?
    IN能够包含其他SELECT语句
  • MYSQLNOT支持对什么语句进行取反?
    NOT支持对INBETWEENEXISTS取反
  • MYSQLLIKE是什么?
    LIKE是谓词,不是操作符
  • NULL能被%通配符匹配吗?
    NULL不能被%通配符匹配
  • 使用通配符%_的技巧
    • 花费时间更长,能不使用就不适用
    • 尽量不要置于开头,匹配时间最长
    • 仔细注意位置
  • 正则表达式匹配的谓词?
    REGEXP
  • LIKEREGEXP的区别?
    • LIKE匹配整个列值
    • REGEXP匹配时,当匹配文本在列值中出现,就会返回
    • REGEXP在匹配的时候,开头和结尾分别加上^$就可以实现和LIKE一样的作用
  • MYSQL中正则表达式匹配区分大小写的关键字?
    BINARY
  • SOUNDEX函数的作用?
    采用算法,将串变成其语音表示的字母数字算法,实现能够对串进行发音比较。
  • COUNT(*)会对NULL进行匹配吗?
    COUNT(*)会对NULL进行匹配,但是COUNT(column)就不会对该列为NULL的行进行计数
  • DISTINCT能用于COUNT(*)吗?
    不能,如果使用的话,语句为COUNT(DISTINCT),产生错误,故不能
  • GROUP BY对于NULL值的处理?
    当分组列中存在NULL值的时候,把所有的NULL值放在一起,作为一个单独的分组
  • GROUP BYORDER BY的语句顺序?
    GROUP BY一定要放在WHERE语句后,ORDER BY
  • WITH ROLLUP的作用
    当使用GROUP BY的时候,在GROUP BY语句后加上WITH ROLLUP,会在每一个分组下面加上一行,表示该分组的汇总数据
  • SLECT语句顺序?
    • SELECT
    • FROM
    • WHERE
    • GROUP BY
    • HAVING
    • ORDER BY
    • LIMIT
  • 给表名起别名的理由?
    • 缩短SQL语句
    • 允许在单条SELECT语句中多次使用相同的表
  • 自联结通常比子查询要更加迅速?
  • MYSQL中的自然联结需要自己实现,内部没有预实现
  • *==*MYSQL中不支持,在其他DBMS中用于表示左外部联结和右外部联结
  • 使用UNION的规则
    • UNION必须由两条及以上的SELECT语句组成,SELECT语句中用关键字UNION分隔
    • UNION中每个查询中必须包含相同的列、表达式或聚集函数
    • 列数据类型必须兼容
  • UNION会自动去除重复的行吗?
    UNION会自动去除重复的行,如果不想要去除重复的行,可以使用UNION ALL
  • UNION的输出进行排序?
    此时的ORDER BY必须放在最后一条SELECT语句之后,并作用在整个UNION并集中
  • 所有引擎都支持全文本搜索吗?
    并不是,常见的引擎有MyISAMInnoDB,其中MyISAM支持全文本搜索,InnoDB不支持全文本搜索(MYSQL 5.6后两者均支持)
  • 使用全文本搜索的时候,MYSQL不会分别查看每个行,不需要分别分析和处理每个词。而是创建列中各词的索引,搜索可以针对这些词进行。
  • 全文本搜索必须索引搜索的列
  • 使用FULLTEXT(column, column, ...)来标明全文本搜索的列
  • 导入数据时,应当先不开始全文本搜索,待所有数据导入到新表中,再开启全文本搜索,时间更快?
  • 全文本搜索会对结果进行排序,等级高的行先返回
  • 布尔文本搜索一定要在FULLTEXT开启的情况下才能进行吗?
    不是,即使没有定义FULLTEXT索引,也可以使用,只是非常缓慢
  • 布尔方式搜索时,会进行排序吗?
    不会,在布尔方式中,不按等级值降序排序返回的行
  • 全文本搜索的重要说明?
    • 索引全文本数据时,短词(具有3个或3个以下字符的词)被忽略并从索引中删除
    • MYSQL中有内建的非用词(stopword)列表,其中的词在创建索引时会被忽略
    • MYSQL中有50%规则:如果一个词出现在50%的行中,会作为非用词
    • 表中的行少于3行,全文本搜索不返回结果
    • 全文本搜索忽略词中的单引号
  • INSERT语句一般不会产生输出
  • 简单的INSERT语句中各个列必须以他们在表定义中出现的次序进行填充
  • 当使用INSERT语句的时候,总是使用包含列的列表的INSERT语句
  • INSERT语句的列名可以被省略,省略的列应当满足的条件:
    • 该列允许被定义为NULL
    • 表定义中存在默认值
  • 插入多个行数据时,尽量在一条INSERT语句中解决,因为用单条INSERT语句处理插入比使用多条INSERT语句快
  • UPDATE更新多行,如果其中一行发生错误,整个UPDATE操作被取消;如果想要发生错误也可以继续,那么要使用UPDATE IGNORE tableName
  • 为什么TRUNCATE TABLEDELETE FROM TABLE更快?
    因为TRUNCATE相当于是删掉原来的表,并重新建立一个新的表
  • 如何仅在创建的表明不存在时创建新表?
    CREATE TABLE tableName IF NOT EXISTS
  • 主键只能使用NOT NULL的列
  • AUTO_INCREMENT允许存在一个表的多列上吗?
    不允许,每个表只允许一个AUTO_INCREMENT,而且它必须被索引
  • MYSQL在使用默认值DEFAULT的时候,允许函数定义吗?
    MYSQL不允许使用函数作为默认值,只允许使用常量
  • MYSQL中常见的引擎类型?
    • InnoDB:事务处理引擎,5.6前不支持全文本搜索
    • MEMORY:功能上等同于MyISAM,但是数据存储在内存中,速度很快,适用于临时表
    • MyISAM:性能很高,支持全文本搜索,但不支持事务处理
  • 外键不能跨引擎使用
  • MYSQL 5之后提供了对视图的支持
  • 多个联结和过滤创建了复杂的视图或者嵌套了视图,可能会造成性能下降很厉害
  • 视图不能有索引,也不能有关联的触发器或者默认值
  • CREATE OR REPLACE VIEW常用于更新视图
  • 如果从视图检索数据时使用了一条WHERE字句,那么在视图中的WHERE字句和传递给视图的WHERE字句会自动合并
  • 更新一个视图将更新其基表
  • 应将视图用于检索而不是更新
  • 存储过程:多条MYSQL语句的集合
  • 使用存储性能的三个主要好处:
    • 简单
    • 安全
    • 高性能
  • 仅当存在时删除过程:DROP PROCEDURE IF EXISTS
  • 所有的MYSQL变量必须以@开头
  • MYSQL游标只能用于存储过程(和函数)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值