我有一组按钮,一次只能选择其中一个按钮,它们可以关闭,这意味着如果用户再次选择一个按钮,则应取消选择该按钮。
假设我的表位于buttons_id
,user_id
和value
列,buttons_id
和user_id
是主键(连接在一起)。
所以我想
value
,buttons_id
组合不存在(user_id
),则insert into
插入到表格中
buttons_id
,user_id
组合存在且值不同(on duplicate key update
)buttons_id
,user_id
组合并且值相同(delete ?
)我该怎么做才是一个查询?我可以在case
内使用on duplicate key update
吗?
答案 0 :(得分:1)
您需要使用事务(要求您的表使用事务存储引擎,例如InnoDB):
开始交易。这通常最好通过适当调用您正在使用的任何API来完成,但如果您绝对必须在SQL中执行,那么您可以这样做:
var pattern = /((https|http|ftp){1}:\/\/)?(www\.)?\w+\.\w{2,4}/ig;
var test = ['http://www.some.com/NotRelevant',
'https://www.some.com/NotRelevant',
':/www.some.com/NotRelevant',
'www.some.com/NotRelevant',
'some.com/NotRelevant'
];
for (var t = 0; t < test.length; t++) {
console.log(test[t], test[t].match(pattern));
}
发出locking read以发现当前值:
START TRANSACTION
根据上面收到的结果,在客户端应用程序中执行业务逻辑,即。问题SELECT `value` FROM `table` WHERE buttons_id = ? AND user_id = ? FOR UPDATE
如果没有结果,INSERT
如果UPDATE
不同,value
如果DELETE
匹配。
提交交易。同样,这通常最好通过API调用完成,但如果您在SQL中执行它:
value