引擎:
引擎就好像是汽车的发动机,但在数据库中的引擎没有好坏之分,只有适合不适合。
数据库的存储引擎分为:BLACKHOLE,CSV,MEMORY,ARCHIVE,MYISAM,InnoDB;
但其中最常用的是MYISAM和InnoDB;其它对现在都不常用;
MYISAM:
1.支持全文索引(full text)
2.不支持事务
3.表级锁(通俗来说就是将表封锁起来,一个一个进)
4.崩溃恢复支持不好
InnoDB:
1.支持事务
2.不支持全文索引,但5.6版本之后开始支持
3.行级锁 (将表里的行锁起来,一个一个进,这个相对于MYISAM效率高些)
4.崩溃恢复支持性比MYISAM好些;
mysql5.6版本之后默认引擎是InnoDB;
MYISAM在数据少的时候速度相对快点,但差距0.0几毫秒,也就察觉不出有多快了;
相对来说推荐InnoDB,速度更快些;
show table status; 查看数据表的引擎
show table status \G;查看所有表的引擎;
show engines \G;该数据库所支持的引擎;
create table 表名 (列名 属性) engine = InnoDB/MYISAM;
建表时,不指定的话默认用的是默认文件里的指定引擎;
关于int char varchar :
一个字节有8位:
对于英文字符----> 一个字符一个字节
对于汉字---->一个字符2个字节
在mysql中对于gbk和utf8的不同:
GBK包含全部中文字符;UTF-8则包含全世界所有国家需要用到的字符
gbk中占2个字节,utf8中占3个字节;
int(n)中 n不能够表示能够存储的最大长度;
char(n) n是字符的长度;
varchar(n)和char(n)基本一样;
select length(列名) from 表名;列出字节数;
select char_length(列名) from 表名;列出字符数;
sql_mode=ANSI/STRICT_TRANS_TABLES/TRADITIONAL
ANSI模式 是 宽松的,当插入数据时即使有错误,也会插进去,然后出现1warning;
STRICT_TRANS_TABLES模式严格:
在该模式下,当插入数据时,mysql会严格的进行数据的校验,当发现插入值未满足要求,直接报告error错误,保证了错误数据无法插入到数据库中。
TRADITIONAL模式:
在该模式下,对所有的事务存储引擎,非事物存储引擎检查,日期类型中的月和日部分不能包含0,不能有0这样的日期(0000-00-00),数据不能除0,禁止grant自动创建新用户等一写校验;
查看模式:show @@sql_mode;
设置数据库模式:set session sql_mode=' ';
事务:
开启事务:
start transaction;
如存入数据有错,roll back; 事务结束,将失败恢复成功;
数据无错,commit;提交;
事务经历:数据先到内存中---->是否成功---->成功---->存入磁盘;
不成功的话将失败恢复成功;