Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kendala unik &masukkan atau perbarui untuk MySQL dan SQLite

Solusi SQLite (prinsip yang sama harus diterapkan di mysql)

Anda cukup menambahkan indeks UNIK (setidaknya untuk SQLite untuk tujuan ini) sehingga Anda dapat memiliki :-

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`); //<<<<<<<<<<
  • Catatan AUTO_INCREMENT mengakibatkan kegagalan untuk SQLite karena itu bukan kata kunci, kata kunci yang benar di SQLite adalah AUTOINCREMENT . Namun, itu dihilangkan karena mungkin tidak diperlukan sebagai INTEGER PRIMARY KEY (atau implisit dengan menentukan PRIMARY KEY (id) ) akan menghasilkan id unik yang dibuat secara otomatis jika tidak ada nilai yang diberikan untuk kolom saat penyisipan.

  • SQLite membutuhkan INTEGER, bukan INT, untuk id yang dibuat secara otomatis. NOT NULL dan juga UNIQUE tersirat sehingga tidak perlu menentukannya.

Berikut adalah dua set contoh sisipan yang masing-masing menduplikasi kombinasi uuid/tanggal sehingga memperbarui alih-alih menyisipkan dan juga menyisipkan dengan uuid yang sama tetapi tanggal yang berbeda dan sebaliknya :-

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`;

Hasilnya adalah :-



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menjumlahkan nilai duplikat dari tabel mysql

  2. Deteksi item berurutan yang memenuhi kriteria tertentu dalam deret waktu

  3. Pemetaan localhost diselesaikan dengan sangat lambat

  4. Menambahkan Model Data Entitas ADO.NET di VS 2017 dan tidak ada yang terjadi

  5. tabel magento sales_flat_order bidang protect_code penjelasan