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

名前付きのMySql主キー制約

    これは、MySQLがCONSTRAINT pk_PersonIDを無視するのと同じです。 部。テーブルを作成してダンプするか、SHOW CREATE TABLE Personsを発行することで確認できます。 。

    この構文は、他のSQLサーバーとの互換性のためにのみサポートされており(ただし、プライマリキーや他のローカルキーでは無視されます)、その情報(制約名)は格納されていないと思います。

    ただし、外部キーで使用する場合は、CONSTRAINT キーワードはMySQLでも使用されています。

    mysql> CREATE TABLE test.Persons (
        -> P_Id int NOT NULL,
        -> LastName varchar(255) NOT NULL,
        -> FirstName varchar(255),
        -> Address varchar(255),
        -> City varchar(255),
        -> CONSTRAINT pk_PersonID PRIMARY KEY (P_Id)
        -> );
    Query OK, 0 rows affected (0.50 sec)
    
    server$ mysqldump -p test Persons
    Enter password:
    --
    -- Table structure for table `Persons`
    --
    DROP TABLE IF EXISTS `Persons`;
    CREATE TABLE `Persons` (
      `P_Id` int(11) NOT NULL,
      `LastName` varchar(255) NOT NULL,
      `FirstName` varchar(255) DEFAULT NULL,
      `Address` varchar(255) DEFAULT NULL,
      `City` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`P_Id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

    これは、MySQLが制約名をどこにも保存せず、エラーを出力するときにそれを使用しないことを証明するテストでもあります(問題の他のSQLサーバーで述べたように制約の命名の目的は何ですか

    mysql> insert into Persons (P_Id) values(1);
    Query OK, 1 row affected, 1 warning (0.00 sec)
    
    mysql> insert into Persons (P_Id) values(1);
    ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
    



    1. MicrosoftTreeViewControlチュートリアル

    2. 1つのクエリでORDERBYRAND()を使用せずにRAND()行をフェッチする

    3. mysql-特定のホストが提供したconnect_errorsの数を照会できますか?

    4. MySQLで1週間あたりの平均売上を計算する方法