> From: Dan Buettner [mailto:[EMAIL PROTECTED] 
> This is a feature - a NULL value is an undefined value, 
> therefore two NULL values are not the same.  Can be a little 
> confusing but makes sense when you think about it.
> 
> A UNIQUE index does ensure that non-NULL values are unique; 
> you could specify that your column not accept NULL values.

I was afraid to hear something like this.  I'd rather not use some invalid
value to mark unknown fields.  So I went a bit further, and tried to ensure
the uniqueness of the null values with a trigger.

CREATE TRIGGER Target_Before_Insert BEFORE INSERT ON Target
FOR EACH ROW IF NEW.IMSI IS NULL OR NEW.IMEI IS NULL THEN
  BEGIN
    DECLARE c_ INT UNSIGNED;
    SELECT COUNT(*) INTO c_ FROM Target 
     WHERE IMSI <=> NEW.IMSI AND IMEI <=> NEW.IMEI;
    IF c_ THEN SET NEW.Id = NULL;
    END IF;
  END;
END IF;

Here Id is a non NULL field, so setting it to NULL should trigger an error.
But when I run an insert where the trigger body would run, then I get the
following error.
Table 'Target' was not locked with LOCK TABLES

I am pretty sure, I don't use LOCK TABLES at all. What is going on here?
How can I get rid of this error?

Thx

ImRe


> 
> Dan
> 
> 
> On 12/11/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> > Hi,
> >
> > I have an InnoDB table similar to this:
> >
> > CREATE TABLE Target
> > (IMSI VARCHAR(15) ASCII,
> >  IMEI VARCHAR(15) ASCII,
> >  UNIQUE KEY (IMSI, IMEI));
> >
> > After playing a bit with it, I managed to add duplicate records, if 
> > one of the fields was a NULL:
> >
> > +-----------------+-----------------+
> > | IMSI            | IMEI            |
> > +-----------------+-----------------+
> > | NULL            | 35195600126418  |
> > | NULL            | 35195600126418  |
> > +-----------------+-----------------+
> >
> >
> > Is this a bug, or a feature? :-)
> >
> > If it is a feature, than how can I assure uniqueness for a 
> table in a 
> > sense that won't allow such duplicates?
> >
> > Thx
> >
> > ImRe
> >
> >
> >
> > --
> > MySQL General Mailing List
> > For list archives: http://lists.mysql.com/mysql
> > To unsubscribe:    
> http://lists.mysql.com/[EMAIL PROTECTED]
> >
> >
> 
> 
> 



-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to