本篇作为 SQL Server 的补充。SQL Server 有不少很不错的功能。
MySQL 8 特性
在 MySQL 8 中写表的名字最好把数据库带上,如 test_tb.table1
。否则可能会报错。
表操作
创建表
设置主键自增
1 | CREATE TABLE user( |
- 主键自增是为了防止
id
重复,如果存NULL
,他就会设置为目前最大的id + 1
; - 主键自增只有主键可以设置;
修改表
表改名
1 | RENAME TABLE test.login TO test.login_backup |
更改表的定义
用下面这种方式可以修改属性名或属性定义。原表中该属性的分量也会自动转换类型。
1 | ALTER TABLE test.top100_count |
数据操作
数据处理
类型转换
在需要类型转换的时候(如将 A 表的 SELECT 的 TEXT
数据 INSERT 进 B 表的 INTEGER
属性),MySQL 会自动完成类型转换(如 TEXT
转为 VARCHAR(10)
或 INTEGER
)。
字符串替换、拼接、截取
- 字符串的替换使用
replace(date, '.', '')
,会将date
中的.
删去; - 字符串的拼接使用
concat(date, time)
,会将两个字符串进行拼接; date + time
会尝试将两个字符串转为数字以后相加。如果无法转为数字则报错;left(date, 3)
和right(date, 3)
分别取date
的左三个字符和右三个字符;
示例代码:
1 | INSERT IGNORE INTO test.online_count_2 (date_time, count) |
对于 online_count
中记录为 (07.01, 12:30, 12345)
的行,导入 online_count_2
的内容是 (7011230, 123450)
。
数据插入
插入子查询的结果
忽略部分错误
我们想要将 A 表的数据插入 B 表,但是直接插入的话部分行会是无法插入的(如 A 的部分行插入 B 会使得 B 的主键重复)。这会导致插入操作被终止,所有行都没有被插入 B 表。
如果我们想要在插入的时候忽略掉掉错误行,把其他正确行插入,可以使用 IGNORE
关键字:
1 | INSERT IGNORE INTO A(VALUE1, VALUE2) |
执行 .sql 代码
如执行 ~/run.sql
:
1 | source ~/run.sql |