Chris Knipe wrote :
>
> Hi again,
>
> Not to long ago, I had a query regarding the best way to store IP addresses
> in a DB, and make sure that they are unique.
>
> It was pointed out to me that I could use four smallint columns instead of a
> varchar to store these numbers, and just implement a UNIQUE index across all
> four columns to make sure the combination of the four columns, would never
> be in duplicate.
>
> It seems, the UNIQUE index however still insist on having unique values for
> all of the four columns...
>
> The DB looks like this (the four smallint columns):
> NS1_IP1 smallint(5)
> NS1_IP2 smallint(5)
> NS1_IP3 smallint(5)
> NS1_IP4 smallint(5)
>
> SQL-query :
> ALTER TABLE `domains` ADD UNIQUE `NS1_Unique`
> (`NS1_IP1`,`NS1_IP2`,`NS1_IP3`,`NS1_IP4`)
>
> MySQL said:
> Duplicate entry '127-30-127-1' for key 2
>
> Which, tells me that I can have the following:
> a, b, c, d - works
> b, c, d, e - works
> a, b, c, d - fails
> a, a, b, b - fails <-- This should however not fail... (the combination is
> unique??)
>
> Any idea on how I can get this working??
>
> --
> me
>
> ---------------------------------------------------------------------
> Before posting, please check:
> http://www.mysql.com/manual.php (the manual)
> http://lists.mysql.com/ (the list archive)
>
Hi,
I tried it and it works for me:
mysql> create table domains (
-> NS1_IP1 smallint(5),
-> NS1_IP2 smallint(5),
-> NS1_IP3 smallint(5),
-> NS1_IP4 smallint(5)
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER TABLE `domains` ADD UNIQUE `NS1_Unique`
-> (`NS1_IP1`,`NS1_IP2`,`NS1_IP3`,`NS1_IP4`);
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> INSERT INTO domains VALUES (1, 2, 3, 4);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO domains VALUES (2, 3, 4, 5);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO domains VALUES (1, 2, 3, 4);
ERROR 1062: Duplicate entry '1-2-3-4' for key 1
mysql> INSERT INTO domains VALUES (1, 1, 2, 2);
Query OK, 1 row affected (0.00 sec)
mysql> select * from domains;
+---------+---------+---------+---------+
| NS1_IP1 | NS1_IP2 | NS1_IP3 | NS1_IP4 |
+---------+---------+---------+---------+
| 1 | 1 | 2 | 2 |
| 1 | 2 | 3 | 4 |
| 2 | 3 | 4 | 5 |
+---------+---------+---------+---------+
3 rows in set (0.04 sec)
Since MySQL is telling you "Duplicate entry '127-30-127-1' for key 2",
are you sure you don't have another unique index defined ?
Could you show us your exact table definition (SHOW CREATE TABLE domains) ?
Regards
--
Joseph Bueno
NetClub/Trader.com
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php