Mysql数据库
1、通过表存储数据的数据库叫做关系型数据库
不通过表存储数据的数据库叫非关系型数据库
2、数据库中数据默认字符集不推荐utf8(最多中文占3个字节),因为有的字符是占4个字节的,可以使用utf8mb4.
3、between...and... 包含值在内,但顺序不能反,between后面跟最小值and后面跟最大值。
4、所有的null值不参与聚合运算
5、having后面是对分类后的结果进行判断,改成对count(*)的条件判断则不会报错
6、只有查询当前数据库,没有查询当前表的操作。
查询当前数据库:select database();
但可以查询当前数据库中所有表:show tables;
7、blob结尾的字符串数据类型用来存储二进制的长文本数据,text结尾的字符串存储长文本数据
8、即使向数据库中表插入数据没成功,当id设置为自增时,仍然会分配一个序号给它,下一个成功的在没成功基础上加1
9、具有外键的表称为子表,外键所关联的表为父表
10、定义别名之后,必须使用别名,原名在此查询语句中已不在
11、显示内连接和隐式内连接的区别?
隐式内连接先笛卡尔积,再过滤掉不符合的行
显示内连接先过滤掉不符合的行,再笛卡尔积,性能比较好。
其中内外连接的根本不同:当查询条件中字段的值为null时,结果将不会显示这条数据
而外连接中,若表中有一条数据字段即便为null,也会显示这条数据
12、只要是对数据库表里面的字段进行修改,前面都有alter table 表名 (add/modify/change/drop)
13、内连接得出的结果为交集,当条件为null值也需要查询出来时,使用外连接。
14、索引在存储引擎层实现,所以不同的存储引擎有不同的索引结构
15、通过红黑树解决二叉树顺序插入会形成链表的问题,红黑树可以自平衡
16、相比于b-tree,b+tree确保每次查询的效率相同,叶子节点形成双向链表,便于搜索和排序;Hash索引只支持等值匹配。
17、sql性能分析,当使用主键或者唯一索引进行查询时,连接类型type为const
使用非唯一性索引为ref
all代表全表扫描
index表示用了索引但是对索引进行扫描遍历整个索引数
18、最左前缀法则中要求最左边的列存在但并不是必须要放在查询语句中条件的最左边。
19、use index(索引名): 建议使用该索引
force index(索引名):强制使用该索引,叶子节点下面挂的是主键,一般为id
20、substring(字段,起始位置,长度)中开始位置下标为1不为0。
limit里下标一开始为0
21、数据分布影响中,若表中大部分数据都满足条件则有索引也会使用全表查询,若只有少部分数据满足条件,则使用索引查询
22、如果查询语句的条件字段有各自的单列索引,则只会选择一个索引,然后进行回表查询。
23、查看索引计划时,如果Extra列值为null表示进行了回表查询
Using index condition表示使用了索引,但是需要回表查询
为Using index表示为覆盖查询,没有回表
24、创建联合索引时必须要考虑字段的顺序,看16
25、二级索引又叫辅助索引,叶子节点挂的是主键,聚集索引叶子节点挂的是数据
26、一次性往数据库里插入多条记录可以使用手动控制事务,使得插入的数据一次性提交到磁盘
27、插入数据时,会根据主键的顺序插入,如果乱序插入可能会导致页分裂需要重新设置链表指针,比较耗能。如果乱序删除数据会导致页合并。而且主键的长度最好比较短,因此不建议使用身份证号等作为表的主键,最好定义一个自增长的id。
28、order by使用index时顺序必须和定义时的字段顺序相同,如图所示,Extra中有Using filesort
29、这里不满足最左前缀原则但是Extra中显示Using index是因为满足覆盖法则
30、当视图定义了with check option,如果它是根据另外一张视图表得到的,那么对于本视图表进行增加时,会连着原视图表的where条件一起check,但不影响对原视图表进行增加,无check仍不会检查。
31、当一条语句更新触发了多条数据库记录时,更新触发器将会记录下所有更改的记录条数,更新几行数据则记录几条更新日志,因为是行级触发,不支持语句级触发。
32、全局锁对所有数据库都会进行加锁。
33、表读锁不会阻碍别的客户端读表中数据,但会阻止当前客户端和其他客户端进行DML和DDL操作;
表写锁不会阻碍当前客户端读写数据,但会阻碍别的客户端读和写数据。
34、MySQl的系统全局变量有哪些?
局部变量有哪些?
35、表级锁当中的元数据锁是为了避免DML和DDL冲突
意向锁避免行锁和表锁的冲突问题,如果没有意向锁添加表锁时需要遍历表的每一行看是否有行锁,等行锁释放才可以加表锁。
36、间隙锁的出现是为了避免多个事务同时发生时出现幻读的现象,因为Innodb默认的事务隔离级别是Repeatable Read可以避免脏读和不可重复读但是没法避免幻读。
37、Innodb默认不支持Hash索引, 但在内存架构中存在自适应hash索引,用于优化对Buffer Pool数据的查询。
38、日志格式中statement记录的是sql语句,不论数据会修改多少条,只会存储一条语句
而row格式则记录数据修改前和后内容,改几条数据就存几行记录,默认为row
39、查询日志包括所有的操作,DDL、DML、DQL。
40、InnoDB的逻辑存储结构:表空间-》段-》区-》页-》行
区为1M,页为16k,一个区中有64个连续的页
41、双主双从读写分离中如果要读取数据,是随机从Master2、slave1、slave2中提取,相比于一主一从的读写分离实现了高可用。
42、使用Id作为分片字段,分片规则可使用范围分片、取模分片;
使用字符串作为分片字段,分片规则可使用一致性hash分片、字符串hash解析算法;
UUID(身份证)作为分片字段,可使用应用指定算法、固定分片hash算法;
按时间作为分片字段,可使用按天分片算法、自然月分片。
当status作为分片字段,可使用枚举分片