Hendro Suryawan <[EMAIL PROTECTED]> wrote on 06/16/2005 06:53:31 PM:

> Hi all,
> I have table with primary key on field PO,BrgId, NOSP but when i try
> insert several new reccord with field NOSP = '', mysql will accept the
> new reccord without complaint error.
> Is this normal behavior? 

As long as the combination of the values {PO, BrgId, NoSP} does not yet 
exist on the table, you should be able to add rows. Are you saying that, 
for example, that the combination {'somePOvalue', 4, ''} already exists on 
your table and it's allowing you to add a second row with the same 
combination of values?

> My perception if i have primary key on the
> three field the three field must be not empty.  I try to alter the field
> NOSP with syntax :
> Alter table BrgIn2 Change NOSP NOSP Varchar(20) NOT NULL

> but if i looked table definition mysql always add default '' in the
> definition. How to tell mysql not to add default '', i want to this
> field always not null or ''. I use mysql 4.1.11 on FC3 X86_64.
> Can anyone help? Thanks in advance.
> regards,

> Hendro

> Table   Create Table
> ------  ----------------------------------------------------
> BrgIn2  CREATE TABLE `BrgIn2` (
> `PO` varchar(17) NOT NULL default '',
> `BrgId` int(4) NOT NULL default '0',
> `NoSP` varchar(20) NOT NULL default '',
<snip>
> PRIMARY KEY  (`PO`,`BrgId`,`NoSP`),
> KEY `BrgIn2SPBrg` (`NoSP`,`BrgId`,`Qty`),
> KEY `BrgId` (`BrgId`)
> ) ENGINE=MyISAM DEFAULT CHARSET=latin1

The empty string ('') is not a NULL value. It represents a string that 
contains no characters. A NULL value indicates the lack of information, a 
state of non-existence. 

For instance: Imagine you have a table, Person, and the table has fields 
to hold a first name, a middle name, and a last name. If you know for a 
fact that some person does not have a middle name, you would use a '' 
(empty string) for the MiddleName value of that person. However, if you 
don't have a middle name on a data entry form for a particular person (a 
middle name may exist but you didn't get it as part of your data), you 
would use a NULL value to indicate the absence of information. 

I think what you would like to have is a CHECK constraint on the `NoSP` 
field that requires that all new or updated values have a certain minimum 
length (LENGTH(`NoSP`) > 0). However, MySQL does not yet support CHECK 
constraints (see the TODO lists). Until it does, you will need to enforce 
that particular restriction using your application code (any version) or 
write that check into a TRIGGER (v5.0+).

Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine



Reply via email to