记录下平时常用的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找到对应的详细书本信息。
三、持续补充中...