基本知识
1.char和varchar的区别是什么:
varchar是变长,而char的长度是固定的,如果需要的字符长度是固定的,那么会得到更好的性能。
2.truncate和delete的区别是什么?
DELETE命令是从一个表中删除某一行,或者多行,而TRUNCATE命令是永久地从表中删除每一行。
3.什么是触发器,MySql中都有哪些触发器?
触发器是指一段代码,当触发某个事件时,自动执行这些代码。在MySql数据库中如下六种触发器:
<1> before insert
2.After Insert
3。Before Update
4。After Update
5。before Delete
6。After Delte
4.Float 和Double 的区别是什么?
。FLOAT类型数据可以储存最多8位十进制数,并在内存中占4字节。
。Double类型数据可以存储最多18位十进制数,并在内存中占8字节。
5.如何在MySql中获取当前日期?
SELECT CURRENT_DATE();
6.查询第n高的工资?
SELECT DISTINCT(salary) from employee ORDER BY salary DESC LIMT n-1,1;
7.数据类型表达的意义:
1>整数类型:包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分别表示1字节、2字节、3字节、4字节、8字节整数。任何整数类型都可以加上UNSIGNED属性,表示数据是无符号的,即非负整数。
注意:假设类型设定位INT(5),属性位UNSIGNED ZEROFILL,如果用户插入的数据是12 的话,那么数据库实际存储数据为00012。
2>实数类型,包括FLOAT、DOUBLE、DECIMAL。
其中DECIMAL可以用于储存比BIGINT还大的整型,能存储精确的小数。
FLOAT和DOUBLE是有取值范围的,并支持使用标准的浮点进行近似计算。计算的时候FLOAT和DOUBLE要比DECIMAL效率更高一些,DECIMAL可以理解成是字符串进行处理的。
3>字符串类型:包括VARCHAR、CHAR、TEXT、BLOB。
其中VARCHAR用于存储可变长字符串,它比长类型更节省空间。
VARCHAR使用额外1或2个字节存储字符串长度。列长度小于255字节时,使用1字节表示,否则使用2字节表示。
VARCHAR存储的内容长度超出设置的长度时,内容会被截断。
CHAR是定长的,根据定义的字符串长度分配足够的空间。
CHAR会根据需要使用空格进行填充方便比较。
CHAR适合存储很短的字符串,或者所有值都接近同一个长度。
CHAR存储的内容超出设置的长度时,内容同样会被截断。
TEXT能最大存储65535字节数据。
注意:数据类型的使用策略:
对于经常变更的数据来说,CHAR比VARCHAR更好,因为CHAR不容易产生碎片。
对于非常短的列,CHAR比VARCHAR在存储空间上更有效率。
使用时要注意只分配需要的空间,更长的列排序时会消耗更多内存。
尽量避免使用TEXT/BLOB类型,查询会使用临时表,导致严重的性能开销。
4> 枚举类型(ENUM),把不重复的数据存储为一个预定义的集合。有时可以是哦那个ENUM代替常用的字符串类型。
ENUM存储非常紧凑,会把列表值压缩到一个或两个字节。
ENUM在内部存储时,其实村的是整数。
尽量避免使用数字作为ENUM枚举的常量,因为容易混乱。
排序是按照内部存储的整数。
5>日期和时间类型:尽量使用timestamp,空间效率高于datetime,用整数保存时间戳通常不方便处理。如果需要存储微妙,可以使用bigint存储。
MySql基础操作:
Mysql储存引擎:
1.InnoDB储存引擎:
默认事务型引擎,最重要最广泛的储存引擎,性能非常优秀,
数据存储在共享表空间,可以通过配置分开,也就是多个表和索引储存在一个表空间中,可以通过配置文件改变此配置。
对主键查询的性能高于其他类型的存储引擎。
内部做了很多优化,从磁盘读取数据时会自动构建hash索引,插入数据时自动构建插入缓存区。
通过一些机制和工具支持真正的热备份。
支持崩溃后的安全恢复。
支持行级锁。
支持外键。
注意:
1.在使用大多数场景下建议使用InnoDB。
2.InnoDB和MyISAm的区别:
InnoDB支持事务,MyISAM不支持
InnoDB数据存储在共享表空间,MyISAM数据存储在文件中;
InnoDB支持行级锁,MyISAM只支持表锁;
InnoDB支持崩溃后的恢复,MyISAM不支持;
InnoDB支持外键,MyISAM不支持;
InnoDB不支持全文索引,MyISAM支持全文索引
2.MyISAM存储引擎。
拥有全文索引,压缩,空间函数。
不支持事务和行级锁,不支持崩溃狗的安全恢复。
表存储在两个文件,MYD和MYI。
设计简单,某些场景下性能很好,比如获取整个表有多少条数据时,此时性能很高。
全文索引不是很常用,不如使用外部的的ElasticSearch或Lucene。
3.其他表引擎:
Archive、Blackhole、CSV、Memory
MySql锁机制:
表锁时日常开发中的常见问题,因此也时面试中最长见的考察点,当多个查询表同一时刻进行数据修改时,就会产生并发控制的问题。共享锁和排他锁,就时读锁和写锁。
共享锁:不堵塞,多个用户可以同时访问一个资质,互不干扰。
排他锁:一个写锁会阻塞其他的读锁和写锁,这样就可以只允许一个用户进行写入,防止其他用户读取正在写如的资源。
锁的粒度:
表锁:系统开销最小,会锁定整张表,MyIsam使用表锁。
行锁:最大程度的支持并发处理,但是也带来了最大的锁开销,InnoDb使用的是行锁。