平时实际开发的时候,其实并不太依赖 MySQL 作为 关系型数据库 中的 “关系” 这一属性,更多地只是把 MySQL 作为数据存储的介质。因此 MySQL 语句其实很少写,所以本文用于记录一些 MySQL 在常规数据操作中的常用语法,备查。少用或者不用的知识就不列了。
本文地址:https://cloud.tencent.com/developer/article/1455009
INSERT INTO 表名 (列名, 列名, ...)
VALUES (值, 值)UPDATE 表名 SET 列名=值, 列名=值, ...
WHERE 条件 ...SELECT 列名, 列名, ... WHERE 条件 ...SELECT DISTINCT 列名, 列名, ... WHERE 条件 ...DELETE FROM 表名 WHERE 条件 ...这是一个很实际的需求,业务需要依据条件获取一个条目,如果不存在,则创建该条目。如果用 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 1desc 表名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 列名 新列名 数据类型 ...tinyint:相当于 int8_tsmallint:相当于 int16_tint:相当于 int32_tbigint:相当于 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 年问题本文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
原作者: amc,欢迎转载,但请注明出处。
原文标题:MySQL 速查笔记
发布日期:2019-07-02
原文链接:https://cloud.tencent.com/developer/article/1455009。