我有一个包含IPAddress部分的mysql表
TABLE `EndPoints`(
`EndPointId` BIGINT(19) UNSIGNED NOT NULL AUTO_INCREMENT ,
`IpPart1` TINYINT(3) UNSIGNED NOT NULL ,
`IpPart2` TINYINT(3) UNSIGNED NOT NULL ,
`IpPart3` TINYINT(3) UNSIGNED NOT NULL ,
`IpPart4` TINYINT(3) UNSIGNED NOT NULL ,
PRIMARY KEY (`EndPointId`))
ENGINE = InnoDB
每个IpPart
包含IPAddress字节数组的字节。
例如地址 100.101.102.103
IpPart1 = 101;
IpPart2 = 102;
IpPart3 = 103;
IpPart4 = 104;
反正!
我想做以下事情:
SELECT EndPointId FROM EndPoints WHERE
IpPart1 = @a AND
IpPart2 = @b AND
IpPart3 = @c AND
IpPart4 = @d;
然后,如果找不到地址,请添加
INSERT INTO EndPoints (IpPart1,IpPart2,IpPart3,IpPart4)
Values(@a,@b,@c,@d);
使用MySql事务,我如何确保每个IPAddress只添加一行?
谢谢!
答案 0 :(得分:0)
你可以 BEGIN一个事务,执行你引用的两个查询,然后执行COMMIT。但是只放一个UNIQUE键(IpPart1,IpPart2,IpPart3,IpPart4)会不会更容易?
(通过这种方式分离八位字节真的有什么好处吗?你似乎不太可能想要单独搜索和索引IpPart3。通常将IPv4地址存储为字符串或转换为简单整数inet_aton。使用规范化字符串或BINARY字符(16),IPv6地址可以多做一些工作。)