DDL其实并不是开发的日常,往往因为好久不用而忘记语法,用的时候来看下笔记即可。
当时DML没什么好说的,手写也要做到丝毫不差,这是开发日常工作。
DML 主要包含insert-update-delete-select
1、插入记录
1.1、基本语法如下:
INSERT INTO tablename (field1,field2,....,fieldn) values(value1,value2,....,valuen);
1.2、 常规插入:
insert into t_employee(em_id,ename,hiredate,sal) values(1,'jack','2019-12-12','15892.34');
em_id ename hiredate sal
1 jack 2019-12-12 15892.34
和oracle不同,date类型字段竟然可以直接插入字符串。前提是这个格式能够和日期类型完全匹配才行。
1.3、 全字段插入
insert into t_employee values(1,'jack','2019-12-12','15892.34');
这个时候字段是可以不用写的,但是values后的值要覆盖全字段,并且顺序一致。
1.4、 批量插入 mysql高级特性
这个是个两点,mybatis做批量插入常用,一般分批操作,例如一次插入100条。
注意 , 分隔
语法:
INSERT INTO tablename (field1,field2,....,fieldn)
values
(value1,value2,....,valuen),
(value1,value2,....,valuen),
........,
(value1,value2,....,valuen);
示例:
insert into t_employee(em_id,ename,hiredate,sal)
values
(2,'jack','2019-12-12','15892.34'),
(3,'timer','2019-12-12','15892.34'),
(4,'rose','2019-12-12','15892.34'),
(5,'panda','2019-12-12','15892.34'),
(6,'miss','2019-12-12','15892.34'),
(7,'wakal','2019-12-12','15892.34');
查询结果插入用来是比较悲剧的,不会像oracle那样随心所欲。
2、更新记录
这个也是日常sql
update tablename
set field1 = value1,
field2 = value2,
....
fieldn = valuen
[where condition]
2.1、 示例单表更新:
给jack涨工资。
update t_employee t set t.sal = '20000' where t.ename='jack';
开发过程中注意的一个致命问题,mybatis中使用的where条件一定要考虑清楚,不要接受不到必要条件,导致全表更新
2.2、 多表关联更新
UPDATE t_employee em,
dept d
SET em.sal = em.sal * d.deptno + 100,
d.deptname = 'EID'
WHERE
em.deptno = d.deptno
AND em.ename = 'timer';
这是mysql的关联更新写法,做oracle的写这个会比较别扭,而且一旦结果记录集没把握准,会成为灾难。
夺标更新的语法更多地用在了根据一个表的字段来动态地更新另外一个表的字段。
3、删除数据
核心还是谨小慎微,如履薄冰。
例如做鲲鹏项目,条件忘记带了一下把所有数据清除了,后果可以想象,其实做DML前最好的方式是先做表备份。
mysql删除数据看起来和oracle没啥区别,其实比较坑,因为我们写sql习惯了用别名。
语法:
DELETE FROM tablename [WHERE CONDITION];
3.1、 单表删除实例:
delete t from t_employee t where t.ename = 'jack';
或
delete from t_employee where ename = 'jack';
如果有别名还要把别名写到from和delete之间。
3.2、 多表关联删除
select * from dept;
select * from t_employee
1 EID
2 java
3 ADF
3 timer 2019-12-12 15992.34 1
4 rose 2019-12-12 15892.34 1
5 panda 2019-12-12 15892.34 1
6 miss 2019-12-12 15892.34 1
7 wakal 2019-12-12 15892.34 1
DELETE t,
d
FROM
t_employee t,
dept d
WHERE
t.ename = 'rose'
AND t.deptno = d.deptno;
不管是单标删除还是多表删除,不加where条件将会把表的所有记录删除,所以操作时一定要小心。