mysql insert update 一句_MySQL INSERT/UPDATE/DELETE语句高级用法

INSERT语句用法

INSERT INTO 语句后面可以跟一个SELECT语句

当INSERT INTO 语句后面可以跟一个SELECT语句时,会把SELECT语句的查询结果全部插入到表里。

例如,我们创建一个和表qw_zoetis_user结构完全一样的新表qw_zoetis_user2。

CREATE TABLE `qw_zoetis_user2` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`user_id` int(11) DEFAULT '0' COMMENT '用户微信ID',

`donate_unit` int(11) DEFAULT '0' COMMENT '捐赠对象',

`total_price` decimal(8,2) DEFAULT '0.00' COMMENT '总捐赠金额',

`created_time` int(11) DEFAULT NULL COMMENT '创建时间',

`updated_time` int(11) DEFAULT NULL COMMENT '更新时间',

PRIMARY KEY (`id`),

KEY `idx_by_user_id` (`user_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

然后就可以用下面这条语句把表qw_zoetis_user的全部数据插入到表qw_zoetis_user2里。

// 清空qw_zoetis_user2里的现有数据

TRUNCATE qw_zoetis_user2;

INSERT INTO qw_zoetis_user2

SELECT * FROM qw_zoetis_user;

因为表qw_zoetis_user和qw_zoetis_user2的列数和顺序完全相同,所以我们不需要指定字段的列的排序,但当两个表的字段数不同或顺序不一致时和普通insert语句一样需要指定column的顺序。

INSERT INTO qw_zoetis_user2 (user_id, donate_unit, total_price, created_time, updated_time)

SELECT user_id, donate_unit, SUM(total_price), UNIX_TIMESTAMP(), UNIX_TIMESTAMP()

FROM qw_zoetis_donate

GROUP BY user_id

ORDER BY user_id ASC;

UPDATE语句

首先UPDATE语句的执行结果反馈信息里包含三个值:Rows matched,Changed和Warnings。其中Warnings表示有警告信息的列数,Rows matched和Changed的区别是Rows matched表示满足更新条件的记录数量,而Changed表示实际更新的记录数量。如下面这个语句执行两遍,Rows matched相同,但Changed不一样。

06ea0a8999588be7d6d0801babd7152b.png

UPDATE语句也可以跟ORDER BY和LIMIT子语句。

UPDATE qw_zoetis_donate

SET qw_zoetis_donate.donate_unit=0

WHERE qw_zoetis_donate.donate_unit=1

ORDER BY qw_zoetis_donate.user_id

LIMIT 10;

网上有人说UPDATE语句带LIMIT时像SELECT语句一样是带两个值,可能是我使用的MySQL版本是5.7.16的原因,只支持带一个参数。

ae81d825a1cb07ed61532750fb53046e.png

UPDATE语句跟JOIN语句(JOIN语句和ORDER BY LIMIT不能同时用)

UPDATE qw_zoetis_donate

INNER JOIN qw_zoetis_user ON qw_zoetis_donate.user_id=qw_zoetis_user.user_id

SET qw_zoetis_donate.donate_unit=0

WHERE qw_zoetis_donate.donate_unit=1 AND qw_zoetis_user.total_price>300

ORDER BY qw_zoetis_donate.id;

317ed569b1862a9ecaa8e209672a17e9.png

DELETE语句

DELETE语句跟ORDER BY和LIMIT子语句。

DELETE

FROM qw_zoetis_user

WHERE user_id > 1000

ORDER BY user_id DESC

LIMIT 10;

abc7f0bf1d7d253f5f27de9696c00608.png

DELETE语句跟JOIN语句(JOIN语句和ORDER BY LIMIT不能同时用)

DELETE

FROM qw_zoetis_user

USING qw_zoetis_user

LEFT JOIN qw_zoetis_donate ON qw_zoetis_donate.user_id=qw_zoetis_user.user_id

WHERE qw_zoetis_user.user_id > 1000 AND qw_zoetis_donate.city_id=0

网上很多人说DELETE JOIN时上面这行代码应把USING写成FROM,但经本人测试改成FROM会提示语法错误。另外,MySQL官网给的示例代码也是USING。

a24c9e7890476454dc5a929718bd8ee8.png

素材文件:链接: https://pan.baidu.com/s/1bpEJ82F 密码: ktfs

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值