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/

原文地址:https://www.cnblogs.com/maxiaofang/p/7132428.html