为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL导入:导入没有主键的记录时防止重复

MySQL导入:导入没有主键的记录时防止重复

PHP
PIPIONE 2021-04-30 12:48:20
我们从第三方接收数据,很遗憾,该数据包含唯一记录,但不包含唯一密钥。我们需要将此信息导入到MySQL数据库中(最好使用PHP),但需要确保行不重复。条目一旦生成就永远不会更改,因为它们是带有时间戳记的帐户余额快照。当数据集较小时,我们只需删除所有数据并再次重新导入整个对象即可刷新整个数据库。随着数据集规模的增长,这不是一个可持续的解决方案,因为它占用了过多的系统资源并且花费了越来越多的时间。首先,我们将导入的数据转储到临时的MySQL表中(源数据没有主键):表结构:导入的数据    BalanceDate DATE NOT NULL COMMENT 'Date Balance Was Fetched From Bank',    BalanceTime TIME NOT NULL COMMENT 'Time Balance Was Fetched from Bank',    AccountName VARCHAR(100) DEFAULT NULL COMMENT 'Name of Account Downloaded from Source',    AccountNo VARCHAR(50) DEFAULT NULL COMMENT 'Account Number Downloaded from Source',    InstName VARCHAR(150) DEFAULT NULL COMMENT 'Financial Institution Name Downloaded from Source',    Balance DECIMAL(10, 2) NOT NULL COMMENT 'Balance in Account',    Type VARCHAR(50) NOT NULL COMMENT 'Type of Account',    Class VARCHAR(50) NOT NULL COMMENT 'Class of Account',    Index INT(11) DEFAULT NULL COMMENT 'Index Number Downloaded from Source',注意,索引号对于每个金融机构而言似乎是唯一的,但对于每个条目而言并不是唯一的。实时表具有上述字段以及自动递增的唯一ID字段。我们还为外键添加了一些列,这些列可通过简单的IF THEN语句进行转换。表结构:活动表中的其他字段    ID INT(11) NOT NULL AUTO_INCREMENT,    AccountID INT(11) NOT NULL COMMENT 'Linked to Accounts table (Account at Financial Institution)',    InstID INT(11) NOT NULL COMMENT 'Links to Institution table (Financial Institution)',的PHP    // Accounts and Banks and prepopulated into the database in other tables.    // This is a simplified example of the logic. Actual code a bit more complicated.    if ($AccountName == "Whatever Account" AND $InstName == "Whatever Bank") {       $AccountID = 1;       $InstID = 1;    }目标是将数据传输到我们的数据库,并且在此过程中不重复任何条目。基本上,如果整个行都已存在于实时数据库中,则不要导入它的第二个副本。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 291 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信