Uninote
Uninote
用户根目录
tmp
博客笔记

MySQL不一样的UPDATE更新操作

一条MySQL语句搞定 - “有就更新,没则新增”数据的操作。

在这个世界上,有很多很多的业务场景需要数据库的支持和操作。这期就讲讲站内通讯系统的一个需求,一起来看看吧!

	INSERT INTO message_global
		( message_text_id, rec_id, status )
	VALUES
		( :m,:n,:t )
	ON DUPLICATE KEY UPDATE
		message_text_id = :m ,
		rec_id = :n ,
		status = :t

这个SQL语句的意思是:新建一条数据,如果有就触发唯一索引执行更新数据操作,没有就新建一条数据。

表设计需求是为了缓解数据量一下更新太多对数据库造成冲击,所以用户每查看一次消息就更新一条数据状态而设计的,表结构如下:

-- 系统消息表建立
DROP TABLE IF EXISTS `message_global`;
CREATE TABLE IF NOT EXISTS `message_global`(
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `message_text_id` INT UNSIGNED NOT NULL COMMENT '消息ID',
    `rec_id` INT UNSIGNED NOT NULL COMMENT '接收者ID',
    `time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `status` TINYINT(1) NOT NULL DEFAULT '1' COMMENT '状态(单选):0=删除,1=未读,2=已读',
    PRIMARY KEY(`id`),
    UNIQUE KEY `id` (`id`),
    UNIQUE KEY `mr_id` (`message_text_id`, `rec_id`),
    KEY `message_text_id` (`message_text_id`),
    KEY `rec_id` (`rec_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统消息管理表';

其中这句UNIQUE KEY `mr_id` (`message_text_id`, `rec_id`),是组合唯一索引,所以新建相同的数据就会触发组合唯一索引,达到修改这条数据的作用。

这样一条SQL语句就达到了 “有就更新,没则新增”数据的操作,好神奇啊是不是?赶快收藏吧!

Thanks♪(・ω・)ノ 感谢你长得那么好看还来看我的博客!see you around ~

[hermit auto="1" loop="0" unexpand="1" fullheight="0"]remote#:8[/hermit]

thinkphp5 的 nginx 配置文件

一行代码设置ssh密钥,一条命令复制剪贴板,一句输入免密登录云服务。

点赞(0) 阅读(13) 举报
目录
标题