增加多个列
增加多个列(column)在指定已存在的列(exit_column)后,赋默认值,指定注释。如果在首行添加,将“AFTER ..”换成“FIRST”。
ALTER TABLE `test_table`
ADD COLUMN `column1` INT(11) DEFAULT -1 COMMENT 'commit1' AFTER `exit_column1`,
ADD COLUMN `column2` INT(11) DEFAULT -1 COMMENT 'commit2' AFTER `exit_column2`;
更新表中字段使其与另一表中的字段一致
假设现在有两个表table_A和table_B如下,table_A可以看作table_B的等级映射。table_A.a_no = table_B.b_no,如果B表中b_level大于4的映射到A表中a_high_level=A,否则为B。
a_no | a_high_level |
no1 | B |
no2 | A |
b_no | b_level |
no1 | 1 |
no2 | 5 |
UPDATE table_a, table_b
SET table_a.`a_high_level` = 'A'
WHERE table_b.`b_level`>4
AND table_a.`a_no` = table_b.`b_no`
两个Unsigned字段做数值操作
如下sql报错:BIGINT UNSIGNED value is out of range
UPDATE table1 SET `column_a`= `column_b`-`column_c`
在进行数值操作时,将UNSIGNED转换成SIGNED,改进后的sql为
UPDATE table1 SET `column_a`= CAST(`column_b` AS SIGNED)-CAST(`column_c` AS SIGNED);
查询多个字段重复的数据
查看表table_1种 column1,column2,column3重复的数据,使用IN即可,注意
- 最外层的表需要起别名
- 最外层的WHERE后面列需要加括号
SELECT * FROM `table_1` a WHERE (a.column1,a.column2,a.column3) IN(
SELECT column1,column2,column3 FROM `table_1`
WHERE `is_delete` = 0
GROUP BY column1,column2,column3
HAVING COUNT(*)>1)