持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情
前言
上篇我们学习了MySQL数据库的概念,命名规则以及如何创建数据库。有兴趣的小伙伴可以阅读(# MySQL学习-数据库的概念,命名规则以及创建数据库)。
下面学习MySQL的常见数据类型与如何创建表。
MySQL中的数据类型
| 类型 | 类型举例 |
|---|---|
| 整数类型 | TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT |
| 浮点类型 | FLOAT、DOUBLE |
| 定点数类型 | DECIMAL |
| 位类型 | BIT |
| 日期时间类型 | YEAR、TIME、DATE、DATETIME、TIMESTAMP |
| 文本字符串类型 | CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT |
| 枚举类型 | ENUM |
| 集合类型 | SET |
| 二进制字符串类型 | BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB |
| JSON类型 | JSON对象、JSON数组 |
| 空间数据类型 | 单值:GEOMETRY、POINT、LINESTRING、POLYGON 集合:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION |
常见的几类类型
| 数据类型 | 描述 |
|---|---|
| INT | 从-2^31到2^31-1的整型数据,存储大小为4个字节 |
| CHAR(size) | 定长字符数据,若未指定,默认为1个字符,最大长度255 |
| VARCHAR(size) | 可变长字符数据,根据字符串实际长度保存,必须指定长度 |
| FLOAT(M,D) | 单精度,占用4个字节,M=整数位+小数位,D=小数位。D<=M<=255,0<=D<=30,默认M+D<=6 |
| DOUBLE(M,D) | 双精度,占用8个字节,D<=M<=255,0<=D<=30,默认M+D<=15 |
| DECIMAL(M,D) | 高精度小数,占用M+2个字节,D<=M<=65,0<=D<=30,最大取值范围与DOUBLE相同 |
| DATE | 日期型数据,格式'YYYY-MM-DD' |
| BLOB | 二进制形式的长文本数据,最大可达4G |
| TEXT | 长文本数据,最大可达4G |
创建表
方式一
CREATE TABLE IF NOT EXISTS myemp1(
id INT,
name VARCHAR(15),
hire_date DATE
);
这里创建表,其中包含3个字段。
创建完表,查看表结构:
DESC myemp1;
查看创建表的语句结构
SHOW CREATE TABLE myemp1;
如果创建表时没有指明使用的字符集,则默认使用表所在的数据库的字符集。
方式二
基于现有的表创建新的表。
CREATE TABLE myemp2 AS SELECT employee_id, name, salary FROM employees;
查看表数据
SELECT * FROM myemp2;
可以看到myemp2表中还有数据,所有使用AS方式创建的表,同时会导入数据。
说明:
- 查询语句中字段的别名,可以作为新创建表中的字段的名称。
- 此时的查询语句可以结构比较丰富,使用前面学习过的各种SELECT。
CREATE TABLE myemp3
AS
SELECT e.employee_id emp_id, name, d.department_name dname
FROM employees e JOIN departments d
ON e.department_id = d.department_id;
练习一
创建一个表employees_copy,实现对employees表的复制,包括表数据。
CREATE TABLE employees_copy
AS
SELECT *
FROM employees;
练习二
创建一个表employees_blank,实现对employees表的复制,不包括表数据。
不包括表数据,可以通过过滤条件过滤,使得查出的结果是空。
CREATE TABLE employees_copy
AS
SELECT *
FROM employees
WHERE 1 = 2;
这里使用1 = 2过滤,条件肯定为FALSE,所有查不出结果。
今天先学习到这里,明天继续。