MySQL使用小记
- 1、DELETE使用JOIN后的临时表作为删除添加
DELETE p FROM (SELECT id, MAX(time) AS time FROM schema1.table1 WHERE id IN (SELECT id FROM schema1.table1 GROUP BY id HAVING SUM(IF(type = 1, 1, - 1)) >= 2) GROUP BY id) t1 INNER JOIN schema1.table2 p ON p.id = t1.id AND p.time = t1.time
这里根据id和MAX(time)来删除table2中满足条件的记录,注意这里table2用了别名p,DELETE后面一定要使用别名。
官网参考链接:
https://dev.mysql.com/doc/refman/5.7/en/delete.html
- 2、MySQL字段指定为NOT NULL DEFAULT 'abc',INSERT INTO 插入NULL值报错
CREATE TABLE `t1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT 'a', `b` varchar(30) NOT NULL, `c` varchar(30) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; SELECT * FROM mytest.t1;
如上表结构,INSERT INTO语句如下将报错:
INSERT INTO mytest.t1 (id,a,b,c) values(3,null,'b','c');
语句如下正常插入,此时a为默认值'a'
mytest.t1 (id,b,c) values(3,'b','c');
也就是如果字段为NOT NULL要么你不指定该字段的值,指定的话必须是NOT NULL的值,否则就会报错。
- 2、EXCEL列转换为SQL where语句中in()的集合
经常处理数据发现需要将Excel数据转换为SQL语句,比如我有一个SELECT语句WHERE语句需要in(id),这个id是Excel的一列,并且数据很多。使用工具IDEA:
a,首先拷贝该列值到IDEA
b,按住alt+shift+Click选中所有行(列编辑)
c,在每行后面统一加逗号(',')
d,然后拷贝到SQL语句就OK了
列编辑更多用法参考:https://blog.jetbrains.com/idea/2015/02/multiple-selections-in-editor-using-mouse/