系统整理Mysql学习笔记——基础命令DML

前言

DML,即Data Manipulation Language, 数据操作语言,更加通俗一下就是对表中记录进行增删改操作。
DML语言分为

  • 插入:insert
  • 修改:update
  • 删除:delete

一、insert插入

这里的语法有两种方式,第一种

INSERT INTO 表名[(列名,...) ]VALUES (1,...)[,(1,...),...];

这里的列名可以省略,如果省略则默认对表中所有字段都需要在VALUES后面的括号中给出对应的值。对应的列名顺序就是默认顺序。
这里需要注意的是,不论列名是否省略,列名和值名一定是相互对应的,比如他们的类型、数量,必须一一对应,否则会报错或者出现意料之外的结果。
它支持同时插入多行数据,并且还支持子查询的方式进行插入,如下面语法

INSERT INTO 表名[(列名,...) ] SELECT '',''...

SELECT后面就是一个查询结果集了,这里可以是一些常量,也可以是一个对数据库表的查询返回的结果集,但是有一点很重要,就是一定要和前面的插入列名相对应。

第二种:

INSERT INTO 表名
SET 列名=值,列名=...

第二种方式使用的较少,因为第二种方式是不支持多行插入的,同时也是不支持子查询的,其实第二种方式和修改命令有点相似。

例子:

INSERT INTO `student`
(id,`name`,`address`)
VALUES
(7,'frank','china');

INSERT INTO `student`
(id,`name`,`address`)
VALUES
(8,'jake','American'),
(9,'lili','American');

INSERT INTO `student`
(id,`name`,`address`)
SELECT gra.id, gra.studentId, gra.class
FROM `grade` gra; # 这里没有放到括号里面

INSERT INTO `student`
SET id=13, `name`='zhonghua', address='Inuit';

二、update修改

修改可以对单表进行修改,当然也可以对多表进行修改
单表修改

UPDATE 表名
SET 列名=新值,=新值....
[WHERE 筛选条件]

多表修改
可以使用92年语法的多表修改,这里就不举例了

UPDATE 表名1 别名
INNER|LEFT|RIGHT JOIN 表名2 别名
ON 连接条件
SET 列名=新值,=新值....
[WHERE 筛选条件]

可以看到不管是单表修改还是多表修改都是可以加筛选条件,当然了正常情况下也是要加筛选条件,因为如果不加筛选条件mysql就认为你是对于所有记录都进行修改,正常情况下都是对特定的记录进行修改的,所以筛选条件是很重要的。
关于这里,我认为多表修改,它肯定是先进行一个查询操作,然后对查询出来的结果集进行一个数据更新,然后再将新的结果集赋值原来的结果集中。这有点像java多线程中免锁容器了。

例子:

UPDATE `student`
SET id=1, `name`='我不叫小明了', address='Inuit' 
WHERE id=1;

UPDATE `student`stu
JOIN `grade` gra 
ON gra.studentId=stu.id
SET stu.address='我是连表修改',gra.class='中学'
WHERE stu.id=1;

三、delete删除

删除同样有两种方式,第一种是DELETE,第二种是TRUNCATE
DELETE删除

DELETE FROM 表名 
[WHERE 筛选条件] # 单表删除

DELETE 要删除的表别名...
FROM1 别名
INNER|LEFT|RIGHT JOIN2 别名
[WHERE 筛选条件] # 多表删除,这是99年多表连接语法,92年就不介绍了

TRUNCATE删除

TRUNCATE TABLE 表名

对比一下这两个删除的不同呢,主要有以下几点

  1. DELETE可以加WHERE筛选条件,而·TRUNCATE不能加;
  2. TRUNCATE删除其实就是整表删除,不需要考虑那么多的条件,所以效率会高一些;
  3. TRUNCATE删除没有返回值,DELETE删除有返回值(删除的条数);
  4. 在事务中,TRUNCATE删除不能回滚,而DELETE删除可以回滚;
  5. 假设表中有自增字段,那么DELETE删除再插入数据,自增长列从断电开始;而TRUNCATE删除后,再插入数据,自增长列的值从1开始。

例子:

DELETE FROM `student` 
WHERE id=10;

DELETE stu,gra
FROM `student` stu
LEFT JOIN `grade` gra 
ON gra.studentId=stu.id
WHERE gra.id=10;

需要注意的就是当多表删除的时候,在DELETE后面的别名代表着要删除的记录,如果需要删除哪个表中的记录,那么就需要把哪个表的别名放到DELETE后面。反之,如果不将别名放到DELETE后面,哪怕是符合筛选条件的记录也不会被删除。

结语

这一篇博客比较简单,相对于上一节DQL的语法复杂程度来说差了很多,下一节是DDL,数据库定义语言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值