- 返回目录 : MySQL 学习笔记
- 下一章 : 1.2 : 数据库初识 DML
MYSQL 数据库初识 DDL
链接数据库
mysql [-h 127.0.0.1] [-p 3306] [-u root] [-p]
mysql -u root -p
代码注释
- 单行注释: -- 开头 (#开头 mysql特有)
- 多行注释: /* */
- 不区分大小写 , 关键字建议大写
SQL 分类 (定义,操作,查询,控制)
| 分类 | 全程 | 说明 |
|---|---|---|
| DDL | Data Definition Language | 数据定义,用来定义数据对象(库,表,字段) |
| DML | Data Manipulation Language | 数据操作,用来对表中的数据进行增删改查 |
| DQL | Data Query Language | 数据查询,用来对表的数据查询 |
| DCL | Data Control Language | 数据控制,用来创建数据库用户、控制数据库的访问权限 |
DDL 数据库操作
数据库操作
- 查询
-- 查询所有数据库
SHOW DATABASES;
-- 查询当前数据库
SELECT DATABASE();
- 创建
-- CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
CREATE DATABASE test;
CREATE DATABASE test DEFAULT CHARSET utf8mb4;
CREATE DATABASE IF NOT EXISTS test DEFAULT CHARSET utf8mb4;
- 删除
-- DROP DATABASE [IF EXISTS] 数据库名;
DROP DATABASE test;
DROP DATABASE IF EXISTS test;
- 使用
-- USE 数据库名;
USE test;
-- 查询当前使用的数据库
SELECT DATABASE();
表操作-查询
- 查询当前库的所有表
SHOW TABLES;
- 查询表结构
-- DESC 表名;
DESC test;
- 查询指定表的建表语句
-- SHOW CREATE TABLE 表名;
SHOW CREATE TABLE test;
- 创建表
CREATE TABLE 表名(
字段1 字段1类型 COMMENT 字段1注释,
字段2 字段2类型 COMMENT 字段2注释,
...
字段n 字段n类型 COMMENT 字段n注释
)[COMMENT 表注释]
数据类型
主要包括以下五大类: 整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT
浮点数类型:FLOAT、DOUBLE、DECIMAL
字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB
日期类型:Date、DateTime、TimeStamp、Time、Year
其他数据类型:BINARY、VARBINARY、ENUM、SET、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等
- 数值类型
整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT
浮点数类型:FLOAT、DOUBLE、DECIMAL
定义无符号范围 age TINYINT UNSIGNED
定义有符号范围 age TINYINT SIGNED
小数点后1位
小数点前3位
score double(4,1)
| 类型 | 描述 | 大小 | 范围-有符号(SIGNED) | 范围-无符号(UNSIGNED) |
|---|---|---|---|---|
| TINYINT | 小整形 | 1字节 | -2^7到(2^7)-1 | 0到(2^8)-1 |
| SMALLINT | 短整形 | 2字节 | -2^15到(2^15)-1 | 0到(2^16)-1 |
| MEDIUMINT | 中整形 | 3字节 | -2^23到(2^23)-1 | 0到(2^24)-1 |
| INT或INTEGER | 整形 | 4字节 | -2^31到(2^31)-1 | 0到(2^32)-1 |
| BIGINT | 大整形 | 8字节 | -2^63到(2^31)-1 | 0到(2^32)-1 |
| FLOAT | 单浮点 | 4字节 | ||
| DOUBLE | 双浮点 | 8字节 | ||
| DECIMAL | 小数 | - | 依赖于M(精度)和D(标度)的值 | 依赖于M(精度)和D(标度)的值 |
- 字符串类型
字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB
| 类型 | 描述 | 大小 | 备注 |
|---|---|---|---|
| CHAR | 定长字符串 | 0-255字节 | 0到(2^8)-1 |
| VARCHAR | 变长字符串 | 0-65535字节 | 0到(2^16)-1 |
| TINYBLOB | 二进制数据的短文本数据 | 0-255字节 | 0到(2^16)-1 |
| TINYTEXY | 短文本字符串 | 0-255字节 | 0到(2^16)-1 |
| BLOB | 二进制的长文本数据 | 0-65535字节 | 0到(2^16)-1 |
| TEXT | 文本字符串 | 0-65535字节 | 0到(2^16)-1 |
| MEDIUMBLOB | 二进制的中等长度文本数据 | 0-16777215字节 | 0到(2^24)-1 |
| MEDIUMTEXT | 中等长度文本字符串 | 0-16777215字节 | 0到(2^24)-1 |
| LONGBLOB | 二进制的长文本数据 | 0-4294967295字节 | 0到(2^32)-1 |
| LONGTEXT | 长文本字符串 | 0-4294967295字节 | 0到(2^32)-1 |
-- 定义 `tyep(length)` type类型,length可存储长度
-- 存入数据长度不足10 自动补满10位,超过10 报错
char(10)
-- 存入数据长度不足15 不自动补位, 超过15 报错
varchar(15)
-- char 与 varchar 的性能对比 char > varchar
-- 原因 varchar 在使用中需要动态计算内容
- 日期类型
日期类型:Date、DateTime、TimeStamp、Time、Year
| 类型 | 描述 | 大小 | 范围 | 格式 |
|---|---|---|---|---|
| Date | 日期 | 3字节 | 1000-01-01 至 9999-12-31 | YYYY-MM-DD |
| Time | 时间or持续时间 | 3字节 | -833:59:59 至 833:59:59 | HH:MM:SS |
| Year | 年份 | 1字节 | 1901 至 2155 | YYYY |
| DateTime | 混合日期和时间 | 8字节 | 1000-01-01 00:00:00 至 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS |
| TimeStamp | 混合日期和时间,时间戳 | 4字节 | 1970-01-01 00:00:01 至 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS |
表操作-修改
- 添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
- 修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
- 修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
- 删除字段
ALTER TABLE 表名 DROP 字段名;
- 修改表名
ALTER TABLE 表名 RENAME TO 新表名
- 删除表
DROP TABLE [IF EXISTS] 表名;
- 删除指定表,并重新创建该表
TRUNCATE TABLE 表名;
总结
- DDL 数据库操作
SHOW DATABASES;
CREATE DATABASE IF NOT EXISTS 数据库名;
USE 数据库名;
SELECT DATABASE();
DROP DATABASE 数据库名;
- DDL 表操作
SHOW TABLES;
CREATE TABLE 表名 (
字段1名 字段1类型,
字段2名 字段2类型
);
DESC 表名;
SHOW CREATE TABLE 表名;
ALTER TABLE 表名 ADD/MODIFY/CHANGE/DROP/RENAME TO/...;
DROP TABLE 表名;
- 返回目录 : MySQL 学习笔记
- 下一章 : 1.2 : 数据库初识 DML
练习
- 题1
设计一个员工信息表,要求如下:
- 编号(纯数字)
- 员工工号(字符串,长度max10)
- 员工姓名(字符串,长度max10)
- 性别(男/女,存一个汉字)
- 年龄(正常年龄,不可能存负数)
- 身份号(二代身份证均为18位,含有X字符)
- 入职时间(年月日即可)
- 答1
-- 创建练习库
CREATE DATABASE IF NOT EXISTS exercises DEFAULT CHARSET utf8mb4;
-- 选择要使用的库
USE exercises;
-- 查看当前使用的库
SELECT DATABASE();
-- 创建员工信息表
CREATE TABLE emp(
id INT COMMENT '编号',
work_no VARCHAR(10) COMMENT '工号',
name VARCHAR(10) COMMENT '姓名',
gender CHAR(1) COMMENT '性别',
age TINYINT UNSIGNED COMMENT '年龄',
id_card CHAR(18) COMMENT '身份证号',
entry_date DATE COMMENT '入职时间'
) COMMENT '员工信息表';
-- 查看表详情
DESC emp;
- 题2
为emp表增加一个新的字段 '昵称' 为nickname,类型为VAARCHAR(20)
- 答2
-- 给表emp 添加字段 nick_name
ALTER TABLE emp ADD nick_name VARCHAR(20) COMMENT '昵称';
-- 查看表详情
desc emp;
- 题3
将emp表的nick_name字段修改为username,类型为 VARCHAR(30)
- 答3
-- 修改字段 nick_name 的字段名以及类型
ALTER TABLE emp CHANGE nick_name username VARCHAR(30) COMMENT '用户名';
-- 查看表详情
desc emp;
- 题4
将emp表的username字段删除
- 答4
-- 删除字段 username
ALTER TABLE emp DROP username;
-- 查看表详情
desc emp;
- 题5
将emp表的表名修改为employee
- 答5
-- 修改表名
ALTER TABLE emp RENAME TO employee;
-- 查看当前库所有表
show tables;
- 题6
删除表 employee 并重新创建该表,
- 答6
-- 删除表,并重建
TRUNCATE TABLE employee;
-- 查看当前库所有表
show tables;
- 题7
删除表 employee
- 答7
-- 删除表 employee ,不存在时报错
DORP TABEL employee;
-- 删除表 employee , 有则删除,无也不报错
DORP TABEL IF EXITS employee;
-- 查看当前库所有表
show tables;
- 返回目录 : MySQL 学习笔记
- 下一章 : 1.2 : 数据库初识 DML