Php 更新多个数据的更好方法
我有一个MySQL表,其中行联系人id对于每个用户id都是唯一的Php 更新多个数据的更好方法,php,mysql,Php,Mysql,我有一个MySQL表,其中行联系人id对于每个用户id都是唯一的 history: - hist_id: int(11) auto_increment primary key - user_id: int(11) - contact_id: int(11) - name: varchar(50) - phone: varchar(30) 服务器将不时收到特定用户id的新联系人列表,需要更新此表,插入、删除或更新与以前信息不同的数据 例如,当前数据为: 因此,服务器将接收以下数据: 新的数据
history:
- hist_id: int(11) auto_increment primary key
- user_id: int(11)
- contact_id: int(11)
- name: varchar(50)
- phone: varchar(30)
服务器将不时收到特定用户id的新联系人列表,需要更新此表,插入、删除或更新与以前信息不同的数据
例如,当前数据为:
因此,服务器将接收以下数据:
新的数据是:
如您所见,第一行(John)被更新,第二行(Mary)被删除,其他一些行(Jeniffer)被包括在内
今天我要做的是删除具有特定用户id的所有行,并插入新数据。但是自动递增字段(hist_id)越来越大
Obs:Table有大约8万条记录,每天更新30次或更多。
我有一些(相关)问题:
1.在这种情况下,您认为从特定用户id中删除所有记录并插入更新的数据是一种好方法吗
2.删除自动增量字段怎么样?我不需要它,但我认为没有主键的表不是一个好主意
3.或者更好的方法是循环新数据,选择每个用户id/联系人id来比较要更新的值
对于更好的方法,我指的是最有效的方法
非常感谢你的帮助
INSERT INTO history (user_id, contact_id, name, phone)
VALUES
(1, 23, 'James Jr.', '(619)-543-6222')
ON DUPLICATE KEY UPDATE
name=VALUES(name),
phone=VALUES(phone);
此查询应保留联系人id,但用新数据覆盖先前存在的数据
history:
- hist_id: int(11) auto_increment primary key
- user_id: int(11)
- contact_id: int(11)
- name: varchar(50)
- phone: varchar(30)
回到我在你第二个问题末尾所说的,这将帮助你明白我在说什么。我将假设user\u id是一个主键,它在user表中自动递增。我将在这里做一些客户评估,并向您展示如何重新设计用户、联系人和电话号码结构的示例。下面是我创建的一个快速模型,它显示了表之间的外键关系
注意:列名和总体数据安排可以采用不同的方式,但我很快就这样做了,以便为您提供一个规范化数据库结构的良好示例。所有外键都有一个结构布局,它以一种使您能够在数据进入和离开系统时控制数据流的方式分隔数据。下面是我使用MySQL Workbench创建的数据库模型的屏幕截图
(来源:) 这样你可以更仔细地观察它 您会注意到“person”表是从用户中提取的,但与联系人共享数据。这使您能够将所有“人员”存储在一个位置,将所有“用户”存储在另一个位置,并将所有“联系人”存储在另一个位置。现在,我们为什么要这样做?第一个原因可以在两种情况下解释 1。)假设我们有人,在这个例子中,我会叫他“吉姆·比恩”。“JimBean”为该公司工作,因此他是该系统的用户。但是,“Jim Bean”碰巧拥有一个副业,同时也为公司做联络工作。因此,他既是系统的联系人也是用户。在一个更为“扁平表”的环境中,JimBean将有两条记录,其中包含相同的数据,这些数据可能会很快过时或不正确 2。)假设吉姆做了一些坏事,公司不想再和他有任何关系。他们不想要任何关于他的记录——就好像他从未存在过一样。我们所要做的就是从Person表中删除JimBean。就这样。因为对外关系已经“层叠”更新