项目中对接一个单点登陆的回调api,需要判断用户是否在库,不在库新增用户,在库更新登陆次数,大概代码如下:
<?php
$isExist = true;
if ($isExist)
{
insert([
'id' => 392223903,
'username' => 'gaojiufeng',
'password' => '123456',
'login' => 1, //登陆次数
]);
}
else
{
update([
'login' => '+1'
]);
}上面的代码在高并发下会出现问题,主键会重复插入报错。于是我们使用MySQL ON DUPLICATE KEY UPDATE语句,不存在直接新增,存在就更新,代码如下:
INSERT INTO member ( id, username, PASSWORD, login ) VALUES ( 392223903, 'gaojiufeng', '123456', 1 ) ON DUPLICATE KEY UPDATE login = login + 1;
其实在thinkphp自带了这种方案,但是使用的REPLACE INTO语句,REPLACE INTO语句发现主键重复会删除原来的数据,再次新增一条。虽然能够达到我的要求,但是我并不想更新全部字段,目前看来ON DUPLICATE KEY UPDATE语句性能更高。
下面的是商品数据表,id是主键,catename是分类,titile是标题,price是价格,现在要求计算每种分类下的商品平均价格.id catename &n...
我们要明白Mysql字段的长度能存多少东西,首先需要明白Mysql是计算字节长度,还是计算字符长度。在mysql4.x的版本长度代表的是字节长度.例如在mysql4.x的版本中varchar(10)能储存的中英文长度如下:(1).采用ISO8859-1编码方式时,一个中/英文都只占一个字节;(2)....
由于在开发中不小心删除客户上传的商品数据,客户本身也不好说话,只好恢复数据库,记录下过程。原理是数据库开启bin-log功能,然后再通过备份的bin-log进行数据库恢复。先查找备份的数据库日志二进制文件。一般在mysql的data文件夹中,文件名大概为mysql-bin.00001,具体看文件的修...
海量表,数据量较大,并且每个字段的值具有唯一性。如果你创建的海量表只是数据多,索引是毫无意义的。构建海量时我们要使用存储过程。学习自韩顺平(1).创建一个测试数据库create database testdb;set names gbk;use testdb(2).创建dep...
通常我们使用自定义排序的语法是:ORDER BY FIELD(`字段名称`, 值1, 值2, 值3),但是如果我想强制值1到值3永远在前面,这个语法是满足不了的.(1).基本的会员数据表:id name &n...
_通配符只匹配单个字符。假如products表存在以下数据: 需要匹配到prod_nameprod_id prod_name JP1000 JetPack 1000 JP2000 JetPack 2000SQL语句: SE...