MySQL问题总结

一、视图更新操作规则

  • 允许更新的试图
    由一个基表定义的视图,只含有基表的主键或候补键,并且视图中没有用表达式或函数定义的属性,才允许更新。
  • 不允许更新的试图
    (1)若视图的字段是来自字段表达式或常数,则不允许对此视图执行INSERT、UPDATE操作,允许执行DELETE操作;
    (2)若视图的字段是来自库函数,则此视图不允许更新;
    (3)若视图的定义中有GROUP BY子句或聚集函数时,则此视图不允许更新;
    (4)若视图的定义中有DISTINCT任选项,则此视图不允许更新;
    (5)若视图的定义中有嵌套查询,并且嵌套查询的FROM子句中涉及的表也是导出该视图的基表,则此视图不允许更新;
    (6)若视图是由两个以上的基表导出的,此视图不允许更新;
    (7)一个不允许更新的视图上定义的视图也不允许更新;

二、truncate表之后,主键的自增值如何改变?

如果想让自增主键不从1开始,建表时需要在语句外加上auto_increment=1001
例如:
MySQL问题总结_第1张图片

注意: truncate表之后,自增主键的默认值会改为1,而不是1001

三、mysql索引类型

  • 唯一索引(unique)
  • 普通索引(normal)
  • 全文索引(full text)(InnoDB不支持,MyISAM支持)

四、mysql索引方法

  • BTREE
  • HASH

五、drop、delete与truncate比较

  • drop
    • 删除整个表以及与该表有关的所有索引、约束和触发器
    • 依赖于该表的存储过程或函数不会被删除,但状态被置为无效
    • 释放表所占的所有空间
    • 不可回滚
    • 速度最快
  • truncate
    • 只删除表中所有数据
    • 不删除表结构
    • 表和索引所占空间恢复到初始大小
    • 不可回滚
    • 速度比delete快,原因是truncate使用的系统和事务日志资源少,通过释放存储表数据所用的数据页来删除表数据,并且只在事务日志中记录数据页的释放。
  • delete
    • 逐行删除数据,可以带where语句
    • 不会清除表和索引所占空间
    • 可回滚,每删除一行,均将被记录事务日志,之后可以根据事务日志中的内容回滚
    • 速度比drop和truncate慢

六、候选键、超键

候选键又称候选码,是某个关系变量的一组属性所组成的集合。同时满足以下两个条件的就是候选键:

  • 这个属性集合始终能够确保在关系中唯一标识元组(超键
  • 在这个属性集合中找不出合适的子集能够满足条件

满足第一个条件的属性集合称为超键,因此我们也可以把候选键定义为”最小超键“,即不含有多余属性的超键。

七、数据完整性约束

八、范式、反范式、冗余

你可能感兴趣的:(MySQL)