MySQL中DML的常用操作


DML(Data Manipulation Language)数据操作语言,以INSERT、UPDATE、DELETE三种指令为核心,分别代表插入、更新与删除,是必须要掌握的指令,DML和SQL中的select熟称CRUD(增删改查)。


插入操作

插入单行

方式一

insert into 表名[(字段,字段)] values (值,值);

方式二

insert into 表名 set 字段 = 值,字段 = 值;

插入多行

方式一

insert into 表名 [(字段,字段)] values (值,值),(值,值),(值,值);

方式二

insert into 表 [(字段,字段)] 数据来源select语句;


更新操作

单表更新

update 表名 [[as] 别名] set [别名.]字段 = 值,[别名.]字段 = 值 [where条件];

多表更新

update 表1 [[as] 别名1],表名2 [[as] 别名2]
set [别名.]字段 = 值,[别名.]字段 = 值
[where条件]


删除操作

使用delete删除

delete单表删除

delete [别名] from 表名 [[as] 别名] [where条件];

delete多表删除

delete [别名1,别名2] from 表1 [[as] 别名1],表2 [[as] 别名2] [where条件];

使用truncate删除

truncate 表名;

drop,truncate,delete之间的区别
droptruncatedelete
条件删除不支持不支持支持
删除表结构支持不支持不支持
删除表内容支持支持支持
事务的删除方式不支持不支持支持
触发触发器
SQL语言DDLDDLDML
删除速度较快一般

查询操作

SELECT基础查询

查询常量

select 常量值1,常量值2,常量值3;
mysql> select 1,'b';
+---+---+
| 1 | b |
+---+---+
| 1 | b |
+---+---+
1 row in set (0.00 sec)

查询表达式

select 表达式;
mysql> select 1+2,3*10,10/3;
+-----+------+--------+
| 1+2 | 3*10 | 10/3  |
+-----+------+--------+
|  3 |  30 | 3.3333 |
+-----+------+--------+
1 row in set (0.00 sec)

查询指定的字段

select 字段1,字段2,字段3 from 表名;
mysql> select a,b from test1;
+---+---+
| a | b |
+---+---+
| 1 | a |
| 2 | b |
| 3 | c |
+---+---+
3 rows in set (0.00 sec)

查询所有的列

select * from 表名
mysql> select * from test1;
+---+---+
| a | b |
+---+---+
| 1 | a |
| 2 | b |
| 3 | c |
+---+---+
3 rows in set (0.00 sec)
SELECT条件查询

等于(=)

select 列名 from 表名 where 列 =;

不等于(<>、!=)

select 列名 from 表名 where 列 <>;
或者
select 列名 from 表名 where 列 !=;

大于(>)

select 列名 from 表名 where 列 >;

AND(并且)

select 列名 from 表名 where 条件1 and 条件2;

OR(或者)

select 列名 from 表名 where 条件1 or 条件2;

like(模糊查询)

select 列名 from 表名 where 列 like pattern;

pattern中可以包含通配符,有以下通配符:
%:表示匹配任意一个或多个字符
_:表示匹配任意一个字符。

BETWEEN AND(区间查询)

selec 列名 from 表名 where 列名 between 值1 and 值2;

IN查询

select 列名 from 表名 where 字段 in (值1,值2,值3,值4);

NOT IN查询

select 列名 from 表名 where 字段 not in (值1,值2,值3,值4);

IS NULL(返回值为空的记录)

select 列名 from 表名 where 列 is null;

IS NOT NULL(返回值不为空的记录)

select 列名 from 表名 where 列 is not null;
SELECT分组查询

单字段分组

mysql> SELECT
      user_id 用户id, COUNT(id) 下单数量
    FROM
      t_order
    GROUP BY user_id;
+----------+--------------+
| 用户id  | 下单数量   |
+----------+--------------+
|   1001 |       3 |
|   1002 |       4 |
|   1003 |       2 |
+----------+--------------+
3 rows in set (0.00 sec)

多字段分组

mysql> SELECT
      user_id 用户id, the_year 年份, COUNT(id) 下单数量
    FROM
      t_order
    GROUP BY user_id , the_year;
+----------+--------+--------------+
| 用户id  | 年份  | 下单数量   |
+----------+--------+--------------+
|   1001 |  2017 |       1 |
|   1001 |  2018 |       2 |
|   1002 |  2018 |       3 |
|   1002 |  2019 |       1 |
|   1003 |  2018 |       1 |
|   1003 |  2019 |       1 |
+----------+--------+--------------+
6 rows in set (0.00 sec)

分组前筛选数据(使用WHERE关键字)

mysql> SELECT
      user_id 用户id, COUNT(id) 下单数量
    FROM
      t_order t
    WHERE
      t.the_year = 2018
    GROUP BY user_id;
+----------+--------------+
| 用户id  | 下单数量   |
+----------+--------------+
|   1001 |       2 |
|   1002 |       3 |
|   1003 |       1 |
+----------+--------------+
3 rows in set (0.00 sec)

where后是不可以跟聚合函数的

分组后筛选数据(使用having关键字)

mysql> SELECT
     user_id 用户id, COUNT(id) 下单数量
    FROM
     t_order t
    WHERE
     t.the_year = 2018
    GROUP BY user_id
    HAVING count(id)>=2;
+----------+--------------+
| 用户id  | 下单数量   |
+----------+--------------+
|   1001 |       2 |
|   1002 |       3 |
+----------+--------------+
2 rows in set (0.00 sec)

having后是可以跟聚合函数的
SELECT排序与分页

排序查询(order by)

select 字段名 from 表名 order by 字段1 [asc|desc],字段2 [asc|desc];

单字段排序

mysql> select * from test2 order by a desc;
+------+----------+
| a   | b     |
+------+----------+
|  100 | javacode |
|  10 | jack   |
|   8 | tom    |
|   5 | ready   |
+------+----------+
4 rows in set (0.00 sec)

多字段排序

mysql> select * from stu order by age desc,id asc;
+------+-----+---------------+
| id  | age | name      |
+------+-----+---------------+
| 1004 |  20 | 张国荣     |
| 1005 |  20 | 刘德华     |
| 1010 |  19 | 梁朝伟     |
| 1001 |  18 | 路人甲Java   |
| 1003 |  18 | 张学友     |
+------+-----+---------------+
5 rows in set (0.00 sec)

分页查询(limit)

select 列 from 表 limit [offset,] count;

获取前n项记录

select 列 from 表 limit 0,n;
或者
select 列 from 表 limit n;

获取排名第n到m的记录

select 列 from 表 limit n-1,m-n+1;

开发过程中,分页我们经常使用,分页一般有2个参数:
page:表示第几页,从1开始,范围[1,+∞)
pageSize:每页显示多少条记录,范围[1,+∞)
如:page = 2,pageSize = 10,表示获取第2页10条数据。我们使用limit实现分页,语法如下:

select 列 from 表名 limit (page - 1) * pageSize,pageSize;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lw中

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值