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

MySQLは一意の制約を追加します

    MySQLで列を一意にする必要がある場合があります。これを行うには、MySQLにUNIQUE列制約を追加します。一意性制約を追加するには、CREATETABLEまたはALTERTABLEステートメントを使用する方法がいくつかあります。 MySQLに一意の制約を追加する方法は次のとおりです。

    MySQLは一意性制約を追加します

    MySQLに一意の制約を追加する方法は次のとおりです。テーブルを作成するとき、またはテーブルを作成した後に、一意性制約を追加できます。これら両方のアプローチを見ていきます。

    MySQLはテーブルの作成中に一意の制約を追加します

    テーブルを作成するときにUNIQUE制約を作成するSQLステートメントは次のとおりです

    CREATE TABLE table_name(
        ...,
        column_name data_type UNIQUE,
        ...
    )
    

    上記のクエリでは、一意にしたい列の定義にUNIQUEキーワードを指定する必要があります。

    一意の制約を作成する例を次に示します。次の例では、 order_idにUNIQUE制約を追加しました。 列

    mysql> create table recent_orders
         (
         order_id int UNIQUE,
         amount int
         );
    
    mysql> describe recent_orders;
    +----------+---------+------+-----+---------+-------+
    | Field    | Type    | Null | Key | Default | Extra |
    +----------+---------+------+-----+---------+-------+
    | order_id | int(11) | YES  | UNI | NULL    |       |
    | amount   | int(11) | YES  |     | NULL    |       |
    +----------+---------+------+-----+---------+-------+
    

    ここで、 order_idに重複する値を挿入しようとすると 列にエラーが発生します。

    mysql> insert into recent_orders(order_id, amount) values(1, 100),(1,250);
    ERROR 1062 (23000): Duplicate entry '1' for key 'order_id'
    
    mysql> insert into recent_orders(order_id, amount) values(1, 100),(2,250);
    
    mysql> select * from recent_orders;
    +----------+--------+
    | order_id | amount |
    +----------+--------+
    |        1 |    100 |
    |        2 |    250 |
    +----------+--------+
    

    ボーナス読み取り:MySQLの名前変更列

    MySQLは既存の列に一意の制約を追加します

    これは、ALTERTABLEステートメントを使用して既存の列のUNIQUE制約を作成するSQLステートメントです。

    ALTER TABLE table_name
    ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... );
    

    上記のSQLクエリでは、 constraint_nameを指定する必要があります ADD CONSTRAINTの後のUNIQUE制約の場合、一意にしたい列を()

    にリストします。

    既存の列に一意性制約を追加する例を次に示します

    mysql> alter table recent_orders add constraint unique_amount UNIQUE (amount);
    
    mysql> describe recent_orders;
    +----------+---------+------+-----+---------+-------+
    | Field    | Type    | Null | Key | Default | Extra |
    +----------+---------+------+-----+---------+-------+
    | order_id | int(11) | YES  | UNI | NULL    |       |
    | amount   | int(11) | YES  | UNI | NULL    |       |
    +----------+---------+------+-----+---------+-------+
    

    上記のクエリでは、金額列に一意の制約を追加しました。

    ボーナスリード:MySQLでテーブルを複製する方法

    MySQLは一意性制約の複数の列を追加します

    複数の列にUNIQUE制約を作成するSQLステートメントは次のとおりです。

    mysql> create table old_orders
         (
         order_id int,
         amount int,
         CONSTRAINT u_orders UNIQUE (order_id,amount)
         );
    
    
    mysql> describe old_orders;
    +----------+---------+------+-----+---------+-------+
    | Field    | Type    | Null | Key | Default | Extra |
    +----------+---------+------+-----+---------+-------+
    | order_id | int(11) | YES  | MUL | NULL    |       |
    | amount   | int(11) | YES  |     | NULL    |       |
    +----------+---------+------+-----+---------+-------+
    
    
    mysql> insert into old_orders(order_id, amount) values(1, 100),(1,100);
    ERROR 1062 (23000): Duplicate entry '1-100' for key 'u_orders'
    
    

    ボーナス読み取り:パラメータを使用したMySQLストアドプロシージャ

    ALTERTABLEステートメントを使用して複数の列にUNIQUECONSTRAINTを追加することもできます。

    alter table old_orders add constraint unique_orders UNIQUE (order_id,amount);
    

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

    1. SQLServerバックアップチェック

    2. Oracleでタイムゾーンを変更する4つの方法

    3. PostgreSQLのMAX()関数

    4. 使用後にDbCommandを破棄する必要がありますか?