Mysql
char、varchar的区别是什么?
(1)、varchar是变长而char的长度是固定的。如果你的内容是固定大小的,你会得到更好的性能。
(2)、varchar(50)中50的涵义最多存放50个字符,varchar(50)和(200)存储hello所占空间一样,但后者在排序时会消耗更多内存,因为order by col采用fixed_length计算col长度(memory引擎也一样)
(3)、int(20)中20的涵义是指显示字符的长度但要加参数的,最大为255,比如它是记录行数的id,插入10笔资料,它就显示00000000001 ~~~00000000010,当字符的位数超过11,它也只显示11位,如果你没有加那个让它未满11位就前面加0的参数[ZEROFILL],它不会在前面加020表示最大显示宽度为20,但仍占4字节存储,存储范围不变;
(是指显示字符的长度,不影响内部存储,只是当定义了ZEROFILL时,前面补多少个 0)
请说明varchar和text的区别
-
varchar可指定字符数,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。
-
text类型不能有默认值。
-
varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引几乎不起作用。
-
查询text需要创建临时表。
什么是触发器,MySQL中都有哪些触发器?
触发器是指一段代码,当触发某个事件时,自动执行这些代码。在MySQL数据库中有如下六种触发器:
-
1、Before Insert
-
2、After Insert
-
3、Before Update
-
4、After Update
-
5、Before Delete
-
6、After Delete
MySQL事务处理
-
MySQL提供事务处理的表引擎,也就是InnoDB。
-
服务器层不管理事务,由下层的引擎实现,所以同一个事务中,使用多种引擎是不靠谱的。
-
需要注意,在非事务表上执行事务操作,MySQL不会发出提醒,也不会报错。
请说明InnoDB和MyISAM的区别
-
InnoDB支持事务,MyISAM不支持;
-
InnoDB数据存储在共享表空间,MyISAM数据存储在文件中;
-
InnoDB支持行级锁,MyISAM只支持表锁;
-
InnoDB支持崩溃后的恢复,MyISAM不支持;
-
InnoDB支持外键,MyISAM不支持;
-
InnoDB不支持全文索引,MyISAM支持全文索引;