I've got a table with several columns making up the primary key. The nature of the data stored allows some of these fields to have NULL
values. I have designed my table as such:
CREATE TABLE `test` ( `Field1` SMALLINT(5) UNSIGNED NOT NULL, `Field2` DECIMAL(5,2) UNSIGNED NULL DEFAULT NULL, PRIMARY KEY (`Field1`, `Field2`) ) COLLATE='latin1_swedish_ci' ENGINE=InnoDB;
However, when I run describe test
it shows like this:
|| *Field* || *Type* || *Null* || *Key* || *Default* || *Extra* || Field1 || smallint(5) unsigned || NO || PRI || || || Field2 || decimal(5,2) unsigned || NO || PRI || 0.00 ||
And I keep getting an error when inserting a NULL
value.
Column 'Field2' cannot be null
Is this because a field that is part of a primary key cannot be null? What are my alternatives besides using, say, '0' for NULL
?
A primary key defines the set of columns that uniquely identifies rows in a table. When you create a primary key constraint, none of the columns included in the primary key can have NULL constraints; that is, they must not permit NULL values.
You cannot have a null field as part of a primary key, but you can create a unique composite index which is not a primary key and this can include a null field. An easy way to do this is to create your composite primary key, and then open the Indexes window and turn off the "Primary" property.
In composite primary key columns you cannot pass null values. Each column defined as a primary key would be validated so that null values are not passed on to them. If you have given a Unique constraint then we have a chance of NULL values being accepted. But in case of primary keys they cannot hold null values.
However a unique key does not automatically imply not null, and can have nulls in a column as long as the values in the populated columns are unique.
From the MySQL documentation :
PRIMARY KEY
A unique index where all key columns must be defined as NOT NULL. If they are not explicitly declared as NOT NULL, MySQL declares them so implicitly (and silently). A table can have only one PRIMARY KEY. The name of a PRIMARY KEY is always PRIMARY, which thus cannot be used as the name for any other kind of index.
https://dev.mysql.com/doc/refman/8.0/en/create-table.html
If Field2 can be NULL, I question why you need it as part of the Primary Key since you then need Field1 to be distinct across all rows. So Field1 by itself should be sufficient as the Primary Key. You could create a different type of index on Field2.
Primary keys are used to make the column both unique and not null
In order to insert NULL values make field2 as UNIQUE.
Unique constraint makes the field removes duplicates but allows null values
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With