存储引擎 就是如何存储数据、如何更新数据、如何查询数据、如何为存储的数据建立索引等一系列技术的实现方法。
使用如下语句查询MySQL的存储引擎
SHOW ENGINES;
下面是关于MySQL存储引擎的简单介绍:
存储引擎 | 描述 |
---|---|
MyISAM | 拥有较快的插入、查询速度,但不持支事务 |
InnoDB | 支持ACID事务,支持行级锁,支持外键;MySQL5.5版本后默认的存储引擎 |
MRG_MYISAM | 将一组结构相同的MyISAM表聚合成一个整体,再进行增删改查操作 |
Memory | 所有数据存储在内存中,响应快;MySQL重启时数据会全部丢失 |
Archive | 归档,且有压缩机制,适用于历史数据归档 |
CSV | 逻辑上由逗号分隔数据,会为每张表创建一个.csv文件 |
MySQL的数据类型大致可以分为3类,数值、日期/时间和字符串(字符)和二进制数据类型。
数据类型 | 所占字节数 | 说明 |
---|---|---|
TINYINT | 1 | 小整数值 |
SMALLINT | 2 | 大整数值 |
MEDIUMINT | 3 | 大整数值 |
INT(或INTEGER) | 4 | 大整数值 |
BIGINT | 8 | 大整数值 |
FLOAT | 4 | 单精度浮点数 |
DOUBLE | 8 | 双精度浮点数 |
DECIMAL | Max(D+, M+) | 含小数值,例如金额,一般使用DECIMAL(8, 2) |
数据类型 | 所占字节数 | 说明 |
---|---|---|
DATA | 3 | 格式为YYYY-MM-DD |
TIME | 3 | 格式为HH:MM:SS |
YEAR | 1 | 用两位数字表示,范围为70(1970年)~69(2069年),用四位表示,范围时1991年~2155年 |
DATATIME | 8 | 格式为YYYY-MM-DD HH:MM:SS |
TIMESTAMP | 8 | 格式为YYYYMMDDHHMMSS |
MySQL中有两种字符串类型,分别为 定长串 和 变长串 。
定长串 是指接受固定长度的字符串,其长度在创建表时指定。
变长串 是指存储长度可变的文本,有些变长串指定了最大的定长,有些没有指定,不管是哪种。只有指定的数据得到保存。
MySQL处理定长列远比处理变长列快得多!
数据类型 | 所占字节数 | 说明 |
---|---|---|
CHAR | 0~255 | 定长串,它的长度必须在创建时被指定,否则会被假定为CHAR(1) |
VARCHAR | 0~255 | 长度可变,最多存储255个字节。如果创建时指定VARCHAR(n),则可存储0~n个字符的变长串 (n < 255) |
TEXT | 0~64K | 最大长度为64K的变长文本 |
LONGTEXT | 0~4G | 与TEXT相同,但最大长度为4G |
MEDIUMTEXT | 0~16K | 与TEXT相同,但最大长度为16K |
二进制数据可以以二进制的形式存储任何数据,包括图像、多媒体、Word等等。
数据类型 | 所占字节数 | 说明 |
---|---|---|
BLOB | 0~64K | Blob最大长度为64K |
MEDIUMBLOL | 0~16M | Blob最大长度为16M |
LONGBLOB | 0~4G | Blob最大长度为4G |
TINYBLOB | 0~255 | Blob最大长度为255字节 |
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name [(create_definition,…)] [table_options][select_statement]
比如创建一个学生表,表中有学生的学号、姓名、性别、住址和电话
则可以使用下边的SQL语句创建这个学生表:
CREATE TABLE IF NOT EXISTS my_student (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20),
sex TINYINT,
address VARCHAR(40),
phone CHAR(11));
这里 NOT NULL 表示该字段不能为空, AUTO_INCREMENT 表示自动增长, PRIMARY KEY 表明该字段为主键。 也可以使用关键字 DEFAULT 指定默认值。
SHOW TABLES;
DESC my_student;
下图就是刚才所创建的表中的结构:
ALTER TABLE 表名 ADD 字段名称 数据类型; # 添加字段(列)
ALTER TABLE 表名 MODIFY 字段名称 数据类型; # 修改字段(列)
ALTER TABLE 表名 DROP COLUMN 字段名称; # 删除字段(列)
比如这里我想执行下面的操作
可以执行如下SQL语句:
ALTER TABLE my_student DROP COLUMN phone; # 删除字段
ALTER TABLE my_student ADD classNumber VARCHAR(10); # 添加字段
ALTER TABLE my_student MODIFY sex char(1); # 修改字段
DROP TABLE 表名;