常用sql

mac2026-06-05  5

记录下平时常用的sql语句,防止遗忘。

一、.当行不存在时,赋值插入行,当存在该行时,去更新某字段的值

1-1:给一个具体的值去更新

REPLACE INTO `表名` SET `字段名`= '值', `字段名`= 值

1-2:不给具体的值,希望某字段的值自增或按规律增加(必须将不允许重复的字段设置为主键)

INSERT INTO `表名`(`字段名1`, `字段名2`, `字段名n` ) VALUES('值1',值2,值3) ON DUPLICATE KEY UPDATE `字段名` = `字段名`+1

还有另外一个写法,和上面这个条语句效果是一样的

INSERT INTO `表名` SET `字段名`= '值', `字段名`= 值,`字段名` =值 ON DUPLICATE KEY UPDATE `字段名`=`字段名`+1

二、多表联合查询

需求示例:有两张表:一张表是用户下载书本历史记录表:downloadHistory;一张表是书本详细信息表:bookInfo;

下载历史记录表有三个字段:id(主键,自增)、book_id(对应书本详细信息表中此书的id)、uid(用户唯一标识)。

现在需要一条sql语句查询出用户所有下载的书本详细信息。

SELECT `title`,//书本标题 `author`,//书本作者 `publisher`//出版社 FROM `materialsBook`//书本详细信息表名 WHERE `id` IN(//id是书本详细信息表的自增主键(唯一性) SELECT tmp.book_id FROM( SELECT `book_id` FROM `downloadHistory` WHERE `uid`= 'XXX' ORDER BY `id` DESC LIMIT 0, 10) AS tmp)

大致思路是先查询下载历史表中。此XXX用户下载的所有书本的id。这些id作为一个临时表tmp。接着再在书本详细表中根据临时表tmp中的书本id找到对应的详细书本信息。 

三、持续补充中...

最新回复(0)