Category: MySQL

  • MySQL – remove NOT NULL constraint from a table

    [adsense id=”0514458240″ width=”468″ height=”60″]

    MySQL allows table columns to be created with the NOT NULL constraint. This implies that the field needs to be populated with a value that cannot be the NULL value.

    In some cases we may need to remove this constraint. This is achieved using the following command:

    ALTER TABLE table MODIFY field datatype NULL;
    

    For example lets image we have a table which contains a NOT NULL field and we wish to convert this to NULL. The table name in question is youtube and the field videourl:

    mysql> desc youtube;
    +----------+---------------+------+-----+---------+----------------+
    | Field    | Type          | Null | Key | Default | Extra          |
    +----------+---------------+------+-----+---------+----------------+
    | id       | int(11)       | NO   | PRI | NULL    | auto_increment | 
    | videourl | varchar(1024) | NO   |     |         |                | 
    | thumburl | varchar(1024) | YES  |     | NULL    |                | 
    | title    | varchar(1024) | YES  |     | NULL    |                | 
    | content  | varchar(1024) | YES  |     | NULL    |                | 
    +----------+---------------+------+-----+---------+----------------+
    5 rows in set (0.00 sec)
    
    mysql> ALTER TABLE youtube MODIFY videourl VARCHAR(1024) NULL;
    Query OK, 7 rows affected (0.03 sec)
    Records: 7  Duplicates: 0  Warnings: 0
    
    mysql> desc youtube;
    +----------+---------------+------+-----+---------+----------------+
    | Field    | Type          | Null | Key | Default | Extra          |
    +----------+---------------+------+-----+---------+----------------+
    | id       | int(11)       | NO   | PRI | NULL    | auto_increment | 
    | videourl | varchar(1024) | YES  |     | NULL    |                | 
    | thumburl | varchar(1024) | YES  |     | NULL    |                | 
    | title    | varchar(1024) | YES  |     | NULL    |                | 
    | content  | varchar(1024) | YES  |     | NULL    |                | 
    +----------+---------------+------+-----+---------+----------------+
    5 rows in set (0.00 sec)
    

    The reverse operation may also be performed, changing from a NULL to NOT NULL constraint. However, if the field contains a NULL value then this operation will fail with an error. To determine whether a NULL value is in the field issue the following command:

    mysql> select * from youtube where videourl is null;
    Empty set (0.00 sec)
    

    We are now sure that the operation will happen correctly so we now issue the ALTER TABLE command:

    mysql> ALTER TABLE youtube MODIFY videourl VARCHAR(1024) NOT NULL;
    Query OK, 7 rows affected (0.06 sec)
    Records: 7  Duplicates: 0  Warnings: 0
    
    mysql> desc youtube;
    +----------+---------------+------+-----+---------+----------------+
    | Field    | Type          | Null | Key | Default | Extra          |
    +----------+---------------+------+-----+---------+----------------+
    | id       | int(11)       | NO   | PRI | NULL    | auto_increment | 
    | videourl | varchar(1024) | NO   |     |         |                | 
    | thumburl | varchar(1024) | YES  |     | NULL    |                | 
    | title    | varchar(1024) | YES  |     | NULL    |                | 
    | content  | varchar(1024) | YES  |     | NULL    |                | 
    +----------+---------------+------+-----+---------+----------------+
    5 rows in set (0.00 sec)