配置数据库
本地登陆数据库
mysql -u root -p
复制代码
修改root密码
alter user user() identified by "abc123456"
复制代码
好用的CURD操作
- 数据插入
- 批量插入数据,因为一条记录的问题,全部数据都写入失败
- 实现不存在就插入,存在就更新sql语句
INSERT INTO table_name(id, props) VALUES
(4, xxx),
(5, xxx)
ON DUPLITCATE KEY UPDATE ip=VALUES(props)
复制代码
ON DUPLITCATE KEY UPDATE
这个语句的是如果制定字段已经存在就执行update语句
- Mysql数据库默认关闭了缓存,所以每个子查询都是相关子查询
- 相关子查询就是要循环执行多次的子查询
下面这个sql语句每查询一条记录都执行一次子查询
SELECT id, props
FORM table_name
WHERE props > (
SELECT props
FORM table1_name
WHERE props = value
)
复制代码
- 使用FORM子查询,替代WHERE子查询,FORM子查询只会执行一次,所以不是相关子查询
SELECT t.id,t.props FORM table_name t
JOIN (SELECT props FORM table2_name) ON props = value
复制代码
- 内连接里,查询条件写在ON子句或者WHERE子句,效果相同
SELECT e.ename, d.dname FROM t_emp e
JOIN t_dept d ON e.deptno = d.deptno AND d.deptno = 10;
SELECT e.ename, d.dname FROM t_emp e
JOIN t_dept d ON e.deptno = d.deptno
WHERE d.deptno = 10;
复制代码
- 外连接里,查询条件写在ON子句或者WHERE子句,效果不同
SELECT e.ename, d.dname FROM t_emp e
LEFT JOIN t_dept d ON e.deptno = d.deptno AND d.deptno = 10;
SELECT e.ename, d.dname FROM t_emp e
LEFT JOIN t_dept d ON e.deptno = d.deptno
WHERE d.deptno = 10;
复制代码
因为是left连接表,查询会把左表也就是t_emp全部查询出来,并用右表t_dept去判断条件是否满足,满足的话把右表记录跟左表连在一起,否则NULL连接左表
- UPDATE语句中的WHERE子查询如何改成表连接
优化前,相关子查询
UPDATE t_emp SET sal = 10000
WHERE deptno =
(SELECT deptno FROM t_dept WHERE dname = 'SALES')
复制代码
优化后,表连接,不仅可以修改t_emp,也修改t_dept
UPDATE t_emp e JOIN t_dept d ON e.deptno = d.deptno
AND d.dname='SALES'
SET e.sal = 10000, d.dname="销售部"
复制代码
- DELETE语句中也可以使用表连接
DELETE e, d FROM t_emp e JOIN t_dept d
ON e.deptno =d.deptno AND d.dname = "销售部"
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END