mysql insert批量插入数据,怎样避免因为一条记录的问题,全部数据都写入失败
使用关键字 ignore
INSERT IGNORE INTO t_user ( id, username )
VALUES
( 1, "张三" ),
( 1, "李四" ),
( 2, "王五" ),
( 3, "王二" );
因为主键约束,李四这条信息会插入失败,但是不影响其它三条数据插入成功
一条sql语句如何实现不存在就插入,存在则更新
使用 ON DUPLICATE KEY UPDATE 语句
INSERT INTO t_user ( id, username )
VALUES( 1, "赵六" )
ON DUPLICATE KEY UPDATE username = VALUES(username);
要不要使用子查询
MySQL数据库默认关闭了缓存,所以每个子查询都是相关子查询 相关子查询就是要循环执行多次的子查询 因为MyBatis等持久层框架开启了缓存功能,其中一级缓存就会保存子查询的结果,所以可以放心使用子查询
子查询示例sql
SELECT empno, ename FROM t_emp
WHERE sal > ( SELECT sal FROM t_emp WHERE empno = 7499 )
AND empno != 7499;
如何替代子查询
使用from子查询,替代where子查询,from子查询只会执行一次,所以不是相关子查询
SELECT e.empno, e.ename FROM t_emp e
JOIN ( SELECT sal FROM t_emp WHERE empno = 7499 ) t ON e.sal > t.sal
AND e.empno != 7499;
update语句中的where子查询如何改成表连接
where子查询
UPDATE t_emp SET sal = 10000
WHERE deptno = (SELECT deptno FROM t_dept WHERE dname = 'SALES');
表连接
UPDATE t_emp e JOIN t_dept d ON e.deptno = d.deptno
AND d.dname = 'SALES'
SET e.sal = 10000, d.dname = "销售部";
delete语句也可以使用表连接
MySQL AES加密
SELECT HEX(AES_ENCRYPT('HelloWord','test_key'));
AES解密
SELECT AES_DECRYPT( UNHEX('AD0BDBFC67A8668428BCE6AC19D1A38F'),'test_key');