当前位置: 首页 > 后端技术 > PHP

PHP面试三:MySQL数据库

时间:2023-03-29 18:52:12 PHP

基本测试点MySQL数据类型整型:tinyint、smallint、mediumint、int、bigint小数类型:float、double、decimal字符串类型:varchar、char、text、blob时间日期类型:time、date、datetime、timestamp枚举类型:enum定义整型数据类型时,经常看到int(4)括号指定显示长度,不限制取值的合法范围。这个显示长度只有配合zerofill属性才有意义。1.VARCHAR比CHAR更节省空间2.CHAR比VARCHAR有更好的存储效率3.VARCHAR和CHAR的长度如果存储内容超过指定长度会被截断4.存储频繁变化的数据,CHAR不易产生碎片并尽量避免使用BLOB/TEXT类型导致严重的性能开销1.有时可以使用枚举类型代替字符串类型2.枚举类型在内部存储为整数(节省空间)3.避免使用数字作为enum枚举的常量,容易混淆1.尝试使用TIMESTAMP来保存时间和日期数据。2、如果需要存储微秒,可以使用BIGINT类型连接和关闭MySQL基本操作:mysql-u-p-h-PMySQL存储引擎(数据表)MyISAM和InnoDB的区别1.InnoDB支持事务,而MyISAM不支持事务。2、InnoDB支持行级锁,而MyISAM支持表锁。3、InnoDB数据存储在共享表空间中,MyISAM数据存储在MyD文件和MyI文件中。4、InnoDB支持崩溃后安全恢复,MyISAM不支持5、InnoDB对主键查询的性能高于其他存储引擎6、MyISAM具有全文索引、压缩、空间功能MySQL锁机制由于并发操作的产生,需要用到锁来进行并发控制锁分为两种:共享锁和排它锁分别是读锁和写锁。共享锁(读锁)不会被阻塞。多个用户可以同时读取同一个资源,互不干扰。独占锁(写锁),一个写锁会阻塞其他的读锁和写锁,这样只允许一个人写,防止其他人读或写注意:InnoDB支持行级锁,MyISAM支持表锁MySQL事务processing注意:使用事务的前提是表必须是InnoDB引擎安全测试点SQL注入使用预处理来防止SQL注入转义特殊字符。写入数据库的数据必须转义特殊字符。这个操作是在应用层记录错误。当出现查询错误时,无法将错误信息返回给用户,并将错误记录在日志索引中。使用索引的优缺点:1、减少服务器扫描的数据量2、避免排序和临时表3、将随机I/O改为顺序I/O4、提高查询速度缺点:1、减少写入速度2.占用磁盘索引使用场景非常小的表(1~1000)不要使用中型索引(1000~100W)使用大型索引(100W~1000W)使用超大索引(1000W以上)索引+分区技术索引类型1、普通索引2、唯一索引(在普通索引的基础上,加上唯一约束)3、主键索引(在唯一索引的基础上,加上不能为Null)4、复合索引5、全-文本索引(少用,只适合英文)6.外键索引(少用,用业务逻辑进行数据关联)索引创建原则1.最适合做索引的列是出现在where子句中的列,或者出现在where子句中的列连接子句,而不是出现在SELECT关键字之后的列2.大r索引列的基数越大,效果越好3.对字符串进行索引,要制定一个前缀Length,可以节省很多索引空间4.根据情况创建复合索引,复合索引可以提高查询效率5.避免创建过多的索引6.主键尽量选择较短的数据类型索引注意事项1.复合索引遵循前缀原则(重要,按顺序)2.like查询,%不能在前面(索引在前面会失效,如果要在前面使用第三方全文索引)3.列为Null也可以使用索引4.如果要在OR条件下使用索引,字段beforeandafteror必须是索引字段5.当列为字符串类型时,查询时必须使用引号(单引号或双引号),这样索引才会生效SQL语句关联检查点关联操作1,关联更新2一、关联查询连接方法1.交叉连接(无条件)select*fromACROSSJOINBCROSSJOINC;2.内连接INNERJOIN(条件交叉连接)简称JOINselect*fromAINNERJOINBINNERJOINCONA.id=B.id;从A、B中选择*,其中A.id=B.id;select*fromAT1INNERJOINAT2ONT1.id=T2.id;3.LEFTJOINright外连接RIGHTJO4.联合连接(union重复合并,UNIONALL重复不合并)SELECT*FROMpositionUNIONSELECT*FROMteam;SELECT*FROMpositionUNIONALLSELECT*FROMteam;**UNIONALL性能高于UNION**5、全连接(MySQL不支持)MySQL高扩展高可用分库分表(横向和纵向)读写分离主从复制负载均衡