1.数据库
创建数据库
CREATE DATABASE mydb2;
不存在数据库才创建,并设置字符集和排序规则
CREATE DATABASE IF NOT EXISTS mydb DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
查看建库语句
查看当前数据库字符集
use mydb2;
show variables like 'character_set_database';
修改数据库字符集
alter database mydb2 CHARACTER SET gbk;
删除数据库
DROP DATABASE mydb2;
2.数据表
创建表
CREATE TABLE [IF NOT EXISTS] table_name (column_name column_type);
CREATE TABLE IF NOT EXISTS `blog`(
`id` INT AUTO_INCREMENT,
`author` VARCHAR(40) NOT NULL,
`phone` CHAR(11) NOT NULL,
`title` VARCHAR(100) NOT NULL,
`content` TEXT NOT NULL,
`publish_date` DATE,
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
查看创建表信息
show create table blog;
desc blog;
删除表全部数据和表结构,立刻释放磁盘空间,不管是 Innodb 和 MyISAM;
drop table table_name;
删除表全部数据,保留表结构,立刻释放磁盘空间,不管是 Innodb 和 MyISAM;
truncate table table_name;
删除表全部数据,表结构不变,对于 MyISAM 会立刻释放磁盘空间,InnoDB 不会释放磁盘空间;
delete from table_name;
带条件的删除,表结构不变,不管是 innodb 还是 MyISAM 都不会释放磁盘空间;
delete from table_name where 删除条件;
delete 操作以后,使用 optimize table table_name 会立刻释放磁盘空间
delete from 表以后虽然未释放磁盘空间,但是下次插入数据的时候,仍然可以使用这部分空间。
3.数据类型
整数类型
数据类型 | 数据范围 | 字节数 | 数据说明 |
---|---|---|---|
TINYINT | -128 – 127 | 1 | 很小的整数 |
SMALLINT | -32768 – 32767 | 2 | 小的整数 |
MEDIUMINT | -2^23 – 2^23-1 | 3 | 中等大小的整数 |
INT | -2^31 – 2^31-1 | 4 | 普通大小的整数 |
LONGINT | -2^63 – 2^63-1 | 8 | 大整数 |
小数类型
m 表示浮点数的总长度,n 表示小数点后有效位数。
数据类型 | 有效位数 | 字节数 | 数据说明 |
---|---|---|---|
Float(m,n) | 7 | 4 | 单精度浮点数 |
Double(m,n) | 15 | 8 | 双精度浮点数 |
Decimal(m,n) | 28 | 16 | 定点数 |
字符串类型
数据类型 | 字节范围 | 数据说明 |
---|---|---|
CHAR(m) | 0 – 255 | 定长字符串 |
VARCHAR(m) | 0 – 65535 | 变长字符串 |
TINYTEXT | 0 – 255 | 短文本数据 |
TEXT | 0 – 65535 | 文本数据 |
MEDIUMTEXT | 0 – 2^24 - 1 | 中等文本数据 |
LONGTEXT | 0 – 2^32 - 1 | 极长文本数据 |
TINYBLOB | 0 – 255 | 二进制短文本数据 |
BLOB | 0 – 65535 | 二进制长文本数据 |
MEDIUMBLOB | 0 – 2^24 - 1 | 二进制长中等文本数据 |
LONGBLOB | 0 – 2^32 - 1 | 二进制长极长文本数据 |
时间类型
数据类型 | 字节数 | 数据说明 |
---|---|---|
YEAR | 1 | 年份 YYYY |
TIME | 3 | 时间 HH:MM:SS |
DATE | 3 | 日期 YYYY-MM-DD |
TIMESTAMP | 4 | 时间戳 YYYY-MM-DD HH:MM:SS |
DATETIME | 8 | 日期时间 YYYY-MM-DD HH:MM:SS |
char、varchar、text比较
char固定长度,即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定。
char(n)中的n表示字符数,最大长度是255个字符; 如果是utf8编码方式, 那么char类型占255 * 3个字节。
char存储时尾部加空格补齐相应长度,读取时去掉尾部空格(包括写入的空格)
varchar可变长度,可以设置最大长度;适合用在长度可变的属性。
varchar(n)中的n表示字符数,最大空间是65535个字节, 存放字符数量跟字符集有关系;
MySQL5.0.3以前版本varchar(n)中的n表示字节数;以后版本varchar(n)中的n表示字符数;
varchar实际范围是65532或65533, 因为内容头部会占用1或2个字节保存该字符串的长度;如果字段default null(即默认值为空),整条记录还需要1个字节保存默认值null。
如果是utf8编码, 那么varchar最多存65532/3 = 21844个字符。
text不设置长度, 当不知道属性的最大长度时,适合用text
理论上最多保存65535个字符, 实际上text占用内存空间最大也是65535个字节;
考虑到字符编码方式, 一个字符占用多个字节, text并不能存放那么多字符;
跟varchar的区别是text需要2个字节空间记录字段的总字节数。
按照查询速度: char最快, varchar次之,text最慢。