gpt4 book ai didi

MySQL 仅当行中先前的值发生更改时才插入新行

转载 作者:行者123 更新时间:2023-11-29 12:29:57 25 4
gpt4 key购买 nike

我需要将新行插入数据库,然后仅当该行中的先前值发生更改时才插入。

--
-- Table structure
--
CREATE TABLE IF NOT EXISTS `macip` (
`intId` int(11) NOT NULL AUTO_INCREMENT,
`strPort` varchar(255) NOT NULL,
`strIp` varchar(255) DEFAULT NULL,
`strVlan` varchar(255) DEFAULT NULL,
`strMac` varchar(255) DEFAULT NULL,
PRIMARY KEY (`intId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

--
-- Test data
--
INSERT INTO `macip` (`intId`, `strPort`, `strIp`, `strVlan`, `strMac`) VALUES
(1, 'Gig1/0/1', '192.168.100.8', '10', 'AA-BB'),
(2, 'Gig1/0/1', '192.168.100.8', '10', 'CC-DD'),
(6, 'Gig1/0/1', '192.168.100.8', '20', 'AA-BB');
  • 我有一个不变的列strPort
  • 接下来要像这样插入:
  • 首先插入数据库 ('Gig1/0/1', '192.168.100.8', '10', 'AA-BB') = > 执行 INSERT
  • 接下来插入数据库 ('Gig1/0/1', '192.168.100.8', '10', 'AA-BB') => 不插入,存在
  • 接下来插入数据库('Gig1/0/1'、'192.168.100.8'、'10'、'XX-EE')=> 插入、更改 MAC(或 IP 或 VLAN 或所有这两个/三个)值)
  • 接下来插入数据库 ('Gig1/0/1', '192.168.100.8', '10', 'XX-EE') => 不插入,存在
  • 接下来插入数据库('Gig1/0/1'、'192.168.100.8'、'10'、'AA-BB')=> 插入、更改 MAC(或 IP 或 VLAN 或所有这两个/三个)值),但是我的 SQL 查询有问题,因为该值存在于表中,我需要使用 strPort 与上一行进行比较

此查询不起作用:

INSERT INTO macip (strPort, strIp, strVlan, strMac)
SELECT * FROM (SELECT 'Gig1/0/1', '192.168.100.8', '10', 'AA-BB') AS tmp
WHERE NOT EXISTS (
SELECT strIp, strVlan, strMac FROM macip WHERE
strIp = '192.168.100.8' AND strVlan = '10' AND strMac = 'AA-BB'
ORDER BY macip.`strPort` DESC LIMIT 1
) LIMIT 1;

我无法对列执行唯一键,因为 SQL 查询返回异常。

最佳答案

如何仅创建一个唯一约束/索引来防止此问题?

create unique index idx_macip_strip_strvlan_strMac on macip(strIp, strVlan, strMac);

然后您可以执行插入:

INSERT INTO macip (strPort, strIp, strVlan, strMac)
SELECT 'Gig1/0/1', '192.168.100.8', '10', 'AA-BB'
ON DUPLICATE KEY SET strPort = VALUES(strPort);

ON DUPLICATE KEY 部分只是防止 INSERT 在存在重复项时返回错误。

关于MySQL 仅当行中先前的值发生更改时才插入新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27708992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com