加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 插入或更新(如果存在)没有主键

发布时间:2020-12-13 21:56:47 所属栏目:PHP教程 来源:网络整理
导读:我有以下数据库 MySQL表. id(PK,AI) 电子邮件 国家 lastlogin 我在PHP中有一个常规查询,将其插入表中. 但是,从逻辑上讲,如果此代码运行多次,则每次都会向数据库插入相同的行. 我希望我的检查和复制参考是电子邮件字段,如果电子邮件是相同的,请更新国家和last
我有以下数据库 MySQL表.

> id(PK,AI)
>电子邮件
>国家
> lastlogin

我在PHP中有一个常规查询,将其插入表中.
但是,从逻辑上讲,如果此代码运行多次,则每次都会向数据库插入相同的行.

我希望我的检查和复制参考是电子邮件字段,如果电子邮件是相同的,请更新国家和lastlogin.

我检查了类似问题的其他问题,建议的方法是使用ON DUPLICATE KEY这样

INSERT INTO <table> (field1,field2,field3,...) 
VALUES ('value1','value2','value3',...)
ON DUPLICATE KEY UPDATE
field1='value1',field2='value2',field3='value3',...

但是,我的主键不是电子邮件字段而是id,但我不想对其进行检查.

解决方法

一个选项是使电子邮件字段唯一,然后它应该与主键相同,至少关于MySQL的ON DUPLICATE KEY UPDATE:

ALTER TABLE yourTable ADD UNIQUE INDEX `idx_email` (`email`);

然后:

INSERT INTO yourTable (email,country,lastlogin)
VALUES ('tony9099@stackoverflow.com','value3')
ON DUPLICATE KEY UPDATE
    email='value1',country='value2',lastlogin='value3'

如果您的表中已存在电子邮件tony9099@stackoverflow.com,则更新将使用其他值启动.

来自MySQL documentation:

If you specify ON DUPLICATE KEY UPDATE,and a row is inserted that would cause a duplicate value in a UNIQUE index or PRIMARY KEY,MySQL performs an UPDATE of the old row.

此方法不仅适用于主键,还适用于具有唯一索引的任何列.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读