平时实际开发的时候,其实并不太依赖 MySQL 作为 关系型数据库 中的 “关系” 这一属性,更多地只是把 MySQL 作为数据存储的介质。因此 MySQL 语句其实很少写,所以本文用于记录一些 MySQL 在常规数据操作中的常用语法,备查。少用或者不用的知识就不列了。
本文地址:https://cloud.tencent.com/developer/article/1455009
基础 CURD
Create,添加数据
代码语言:txt复制INSERT INTO 表名 (列名, 列名, ...)
VALUES (值, 值)
Update,更新数据
代码语言:txt复制UPDATE 表名 SET 列名=值, 列名=值, ...
WHERE 条件 ...
Read,读取
基本操作
代码语言:txt复制SELECT 列名, 列名, ... WHERE 条件 ...
获取数据并去掉重复项
代码语言:txt复制SELECT DISTINCT 列名, 列名, ... WHERE 条件 ...
Delete,删除
代码语言:txt复制DELETE FROM 表名 WHERE 条件 ...
Find or Create 逻辑
这是一个很实际的需求,业务需要依据条件获取一个条目,如果不存在,则创建该条目。如果用 select insert 组合,那么这个操作并不原子。理想情况下是使用 UNIQUE,但很多时候并不行。那么可以采用以下的语句:
代码语言:txt复制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
数据表操作、调整
获取表信息
代码语言:txt复制desc 表名
获取表创建语句
代码语言:txt复制show create table 表名
添加字段
代码语言:txt复制# 非空、带默认值:
ALTER TABLE 表名 ADD 列名 数据类型 NOT NULL DEFAULT 默认值 COMMENT 注释
# 不带默认值:
ALTER TABLE 表名 ADD 列名 数据类型 COMMENT 注释
# 指定添加字段的位置
ALTER TABLE 表名 ADD 列名 数据类型 COMMENT 注释 AFTER 前一列名
修改字段
代码语言:txt复制# 修改字段类型
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。