sql >> データベース >  >> RDS >> Database

列をNULLからNOTNULLに変更する方法

    NULL値のあるNULL可能列をNULL値のない列に変更する必要がある場合があります。この記事では、列をNULLからNOTNULL値に変更する方法を見ていきます。これらの手順を使用して、MySQL、PostgreSQL、およびSQLServerで列をNULLからNOTNULLに変更できます。


    列をNullからNotNullに変更する方法

    列をNULLからNOTNULLに変更する手順は次のとおりです。


    1。テーブルを更新してヌル値を削除します。

    最初のステップは、列からnull値を削除することです。テーブルsales(id、amount、order_date)があるとします。

    mysql> create table sales(id int, amount int,order_date date);
    
    mysql> insert into sales(id, amount)
           values(1, 100),(2,300),(3,45);
    
    mysql> insert into sales(id, order_date)
           values(4,'2020-11-01');
    
    mysql> select * from sales;
    +------+--------+------------+
    | id   | amount | order_date |
    +------+--------+------------+
    |    1 |    100 | NULL       |
    |    2 |    300 | NULL       |
    |    3 |     45 | NULL       |
    |    4 |   NULL | 2020-11-01 |
    +------+--------+------------+
    

    ご覧のとおり、上記の表には order_dateにnull値が含まれています および金額 列。

    金額列をnullからnull以外に変更するとします。したがって、最初にUPDATEステートメントを使用してこの列からnull値を削除します。

    mysql> update sales set amount=0 
           where amount is null;
    
    mysql> select * from sales;
    +------+--------+------------+
    | id   | amount | order_date |
    +------+--------+------------+
    |    1 |    100 | NULL       |
    |    2 |    300 | NULL       |
    |    3 |     45 | NULL       |
    |    4 |      0 | 2020-11-01 |
    +------+--------+------------+
    

    同様に、 order_dateを変更する場合 以下に示すように、列をnullからnull以外に変更し、最初にnull値をnull以外の値に更新します。

    mysql> update sales set order_date='0000-00-00' 
           where order_date is null;
    
    mysql> select * from sales;
    +------+--------+------------+
    | id   | amount | order_date |
    +------+--------+------------+
    |    1 |    100 | 0000-00-00 |
    |    2 |    300 | 0000-00-00 |
    |    3 |     45 | 0000-00-00 |
    |    4 |      0 | 2020-11-01 |
    +------+--------+------------+


    2。テーブルの変更と列の変更

    次に、ALTER TABLEステートメントを使用して、金額列をnullから非nullに変更します。

    構文は次のとおりです。

    ALTER TABLE table_name ALTER COLUMN col_name data_type NOT NULL;

    table_name、col_name、data_typeをそれぞれテーブル名、列名、データ型に置き換えます。

    金額列をNULLからNOTNULLに変更するSQLクエリは次のとおりです。

    For MySQL
    ---------
    ALTER TABLE sales
    MODIFY COLUMN amount int NOT NULL;
    
    For SQL Server/PostgreSQL
    -------------------------
    ALTER TABLE sales
    ALTER COLUMN amount int NOT NULL;

    同様に、order_date列をNULLからNOTNULLに変更するSQLクエリは次のとおりです

    For MySQL
    ---------
    ALTER TABLE sales
    MODIFY COLUMN order_date date NOT NULL;
    
    For SQL Server/PostgreSQL
    -------------------------
    ALTER TABLE sales
    ALTER COLUMN order_date date NOT NULL;

    MySQLでdescribetableコマンドを実行して、上記の変更を確認します。

    mysql> describe sales;
    +------------+---------+------+-----+---------+-------+
    | Field      | Type    | Null | Key | Default | Extra |
    +------------+---------+------+-----+---------+-------+
    | id         | int(11) | YES  |     | NULL    |       |
    | amount     | int(11) | NO   |     | NULL    |       |
    | order_date | date    | NO   |     | NULL    |       |
    +------------+---------+------+-----+---------+-------+
    

    列amountとorder_dateにNULL列のNO値が含まれていることがわかります。これは、これらがNULL値を格納することを許可されていないことを示しています。

    Ubiqを使用すると、データを簡単に視覚化し、リアルタイムのダッシュボードで監視できます。 Ubiqを無料でお試しください。

    1. SQLServerDBのすべてのインデックスとインデックス列のリスト

    2. Oracle FORLOOPSELECTステートメントの例

    3. PDBのプラグを抜くORA-17528エラー

    4. プロアクティブなSQLServerヘルスチェック、パート2:メンテナンス