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

Reply via email to