MySQL 存储引擎、数据类型


 

存储引擎

mysql提供了多种存储引擎,最常见的有2种:MyISAM 、InnoDB 。
 

MyISAM

  • 不支持事务、外键
  • 默认使用表级锁,不支持行级锁,并发支持差。读时自动给表加上读锁(也叫作共享锁),其它事务可以读、但不能写,其它事务要执行写操作需要等待表被释放;写时自动给表加上写锁(也叫作x锁、排它锁),其它事务不能读、写,直到表被释放。
  • 支持全文索引,但全文索引一般用ES、Solr,基本不使用mysql的全文索引
     

MyISAM是5.5之前默认的存储引擎,适合创建

  • 不需要事务、不使用外键的表
  • 主要进行读操作的表。由于MyISAM写时要加表锁,性能差,所以不适合创建频繁增删改的表

 

InnoDB

  • 支持外键。mysql的存储引擎中只有InnoDB支持外键
  • 支持事务。默认的事务隔离级别是可重复读
  • 默认使用行级锁,也支持表级锁,并发支持好。读时自动给使用的行加读锁,写时自动给使用的行加写锁。
     

InnoDB是mysql5.5及其之后的默认存储引擎,适合创建

  • 需要使用外键的表
  • 对安全性要求高、要使用事务的表
  • 频繁增删改的表

 

mysql常用数据类型

数值型

数据类型 描述
tinyint -128 ~ 127
smallint 正负3w+
mediumint 正负800w+
int 正负21亿+
bigint 正负900千万亿+
float 单精度,4字节,10的-38次方
double 双精度,8字节,10的-308次方
decimal 定点型

整型可以指定最大位数,eg. int(11),不指定默认为可存储的最大位数。

浮点型、decimal可以指定总位数、小数位数,eg. double(10,2),最长10位,小数2位(超出会四舍五入),decimal不指定默认为(10,0)。

float、double有误差,如果对精度要求很高,比如涉及到钱财,用decimal。

 

字符串

数据类型 最大字节数
char 255
varchar 6w+
tinytext 255
text 6w+
mediumtext 1千万+
longtext 42亿+

char、varchar可指定字符数,eg. varchar(5) 最多只能存储5个字符,其它字符串类型不能指定。

char是定长字符串,内容长度不够时自动补空格,varchar是变长字符串。

 

日期时间

数据类型 范围
date yyyy-MM-dd,1000-01-01 ~ 9999-12-31
datetime yyyy-MM-dd hh:mm:ss ,1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
timestamp yyyy-MM-dd hh:mm:ss,1970-01-01 00:00:00 ~ 2038-01-19…

操作数据库时,使用的就是上面的格式,eg. timestamp

insert into tb_user (create_time) values ('2019-02-02 09:02:20');

增删改是这个格式,查询返回的也是这个格式,注意要引起来。

datetime、timestamp的区别是能表示的范围不同,datetime 8字节,timestamp 4字节,datetime能表示的范围更大。

 

mysql标识符命名规则

mysql标识符标识符包括表名、字段名、数据库编程中的变量名

  • 可包含字母、数字、三个特殊字符(#_$),必须以字母开头
  • 使用多个单词组成时,单词之间用下划线_连接
  • 不能使用mysql的关键字、保留字
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章