平时实际开发的时候,其实并不太依赖 MySQL 作为 关系型数据库 中的“关系”这一属性,更多地只是把 MySQL 作为数据存储的介质。因此 MySQL 语句其实很少写,所以本文用于记录一些 MySQL 在常规数据操作中的常用语法,备查。少用或者不用的知识就不列了。
本文地址:https://segmentfault.com/a/1190000019659700
基础 CURD
Create,添加数据
INSERT INTO 表名 (列名, 列名, ...)
VALUES (值, 值)
Update,更新数据
UPDATE 表名 SET 列名 = 值, 列名 = 值, ...
WHERE 条件 ...
Read,读取
基本操作
SELECT 列名, 列名, ... WHERE 条件 ...
获取数据并去掉重复项
SELECT DISTINCT 列名, 列名, ... WHERE 条件 ...
Delete,删除
DELETE FROM 表名 WHERE 条件 ...
Find or Create 逻辑
这是一个很实际的需求,业务需要依据条件获取一个条目,如果不存在,则创建该条目。如果用 select + insert 组合,那么这个操作并不原子。理想情况下是使用 UNIQUE,但很多时候并不行。那么可以采用以下的语句:
INSERT INTO 表名 (列名 1, 列名 2, 列名 3, ...)
SELECT * FROM (SELECT 值 1 AS 列名 1, 值 2 AS 列名 2, 值 3 AS 列名 3, ...) AS tmp
WHERE NOT EXISTS (
SELECT id FROM 表名
WHERE 条件 ...
) LIMIT 1
数据表操作、调整
获取表信息
desc 表名
获取表创建语句
show create table 表名
添加字段
# 非空、带默认值:ALTER TABLE 表名 ADD 列名 数据类型 NOT NULL DEFAULT 默认值 COMMENT 注释
# 不带默认值:ALTER TABLE 表名 ADD 列名 数据类型 COMMENT 注释
# 指定添加字段的位置
ALTER TABLE 表名 ADD 列名 数据类型 COMMENT 注释 AFTER 前一列名
修改字段
# 修改字段类型
ALTER TABLE 表名 MODIFY 列名 数据类型 ... # 后面的 ... 需要和前面添加字段的“数据类型”后面的那些项一致
# 修改字段名
ALTER TABLE 表名 CHANGE 列名 新列名 数据类型 ...
MySQL 常用数据类型
整型数值
-
tinyint
:相当于int8_t
-
smallint
:相当于int16_t
-
int
:相当于int32_t
-
bigint
:相当于int64_t
,建议用 bigint 存 timestamp 类型 - 上述四种数据,可以加上
unsigned
表示无符号数,比如tinyint unsigned
相当于uint8_t
定义整型数值时,可以在后面加上括号,写一个数字,如 int(11)
,这个数字仅仅表示显示长度(十进制),不影响实际数据位宽。
字符串
-
char(n)
:固定长度字符串,长度为n
,最大为 255。 -
varchar(n)
:变长字符串,最长长度为n
,最大为 65535。
日期和时间
-
date
:日期,格式为 “2008-12-2” -
time
:仅时间,格式为 “13:15:55” 或 “13:15:55:123” -
datetime(m)
:日期和时间,m
表示秒小数点后的位数 -
timestamp
:不建议用,该值相当于int32_t
,有 2038 年问题
参考资料
- MySQL: Insert record if not exists in table
本文章采用 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 进行许可。
原作者:amc,欢迎转载,但请注明出处。
原文标题:MySQL 速查笔记
发布日期:2019-07-02
原文链接:https://cloud.tencent.com/developer/article/1455009。