存储引擎
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的关键字、保留字