我需要在数据库中插入一个新行,然后才会在行中的前一个值发生更改时添加。
--
-- 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');
此查询无效:
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查询返回Exception。
答案 0 :(得分:1)
如何创建unique
约束/索引以防止出现此问题?
create unique index idx_macip_strip_strvlan_strMac on macip(strIp, strVlan, strMac);
然后你可以insert
作为:
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
在出现重复时返回错误。