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

MySQLとSQLiteの両方に固有の制約と挿入または更新

    SQLiteソリューション(同じ原則がmysqlにも適用されます)

    単純にUNIQUEインデックスを追加して(少なくともこれが対象となるSQLiteの場合)、次のようにすることができます:-

    DROP TABLE IF EXISTS `users`;
    CREATE TABLE IF NOT EXISTS `users` (
      `id` INTEGER, //<<<<<<<<<< See notes below
      `uuid` VARCHAR ( 64 ) NOT NULL,
      `name` VARCHAR ( 32 ) NOT NULL,
      `date` BIGINT NULL,
      PRIMARY KEY ( `id` )
    );
    CREATE UNIQUE INDEX IF NOT EXISTS uuid_date ON `users` (`uuid`,`date`); //<<<<<<<<<<
    
    • AUTO_INCREMENTに注意してください SQLiteはキーワードではないため、失敗します。SQliteの正しいキーワードはAUTOINCREMENTです。 。ただし、INTEGER PRIMARY KEY(またはPRIMARY KEY (id)を指定することによる暗黙的)としてはおそらく必要ないため、省略されています。 )挿入時に列に値が指定されていない場合、一意のIDが自動的に生成されます。

    • SQLiteでは、自動生成されたIDにINTではなくINTEGERが必要です。 NOT NULLおよびUNIQUEも暗黙指定されているため、指定する必要はありません。

    これは、それぞれがuuid / dateの組み合わせを複製する2セットの挿入例です。したがって、挿入する代わりに更新し、同じuuidで挿入しますが、日付が異なります。その逆も同様です:-

    INSERT OR REPLACE INTO `users` VALUES(null,'Fred01234567','Fred Bloggs the 1st','20180101');
    INSERT OR REPLACE INTO `users` VALUES(null,'Fred01234567','Fred Bloggs the 2nd','20180101'); -- <<<< DUPLICATE 
    INSERT OR REPLACE INTO `users` VALUES(null,'Fred99999999','Fred Bloggs the 2nd','20180101'); -- <<<< different uuid same date
    INSERT OR REPLACE INTO `users` VALUES(null,'Fred01234567','Fred Bloggs the 2nd','99999999'); -- <<<< same uuid different date
    
    INSERT OR REPLACE INTO `users` (`uuid`,'name','date') VALUES('Fred76543210','Fred NotBloggs the 1st','20180202');
    INSERT OR REPLACE INTO `users` (`uuid`,'name','date') VALUES('Fred76543210','Fred NotBloggs the 1st','20180202');
    INSERT OR REPLACE INTO `users` (`uuid`,'name','date') VALUES('Fred99999999','Fred NotBloggs the 1st','20180202');
    INSERT OR REPLACE INTO `users` (`uuid`,'name','date') VALUES('Fred76543210','Fred NotBloggs the 1st','99999999');
    
    SELECT * FROM `users`;
    

    結果は:-



    1. \x1a文字はどういう意味ですか

    2. Laravel +Vagrant=ユーザー'root'@'localhost'のアクセスが拒否されました

    3. Pythonを使用してWindows認証でMSSQLServerに接続しますか?

    4. ストアドプロシージャ/関数のリストMysqlコマンドライン