Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zapobiec duplikowaniu wstawek do tabeli

Nie masz unikalnego klucza na adresie e-mail . To twoja największa nadzieja, jak wielu John Doe może być w systemie. Unikalny indeks złożony z pełnym imieniem i nazwiskiem nigdy nie jest dobrym pomysłem.

Można wydać polecenie INSERT IGNORE, które wlecze się po zduplikowanym naruszeniu, jakby nic się nie stało (jest to wysoce niezalecane, aw twoim przypadku niemożliwe, ponieważ nie ma twojego unikalnego ograniczenia dotyczącego poczty e-mail). Główny problem z robieniem tego polega na tym, że twoja tendencja (czytaj:prawdopodobnie straci) straci kontrolę nad przepływem tego, co się dzieje i pozostanie z niepożądanymi danymi. Więc nie używaj go, chyba że jesteś profesjonalistą.

Można wydać i WSTAWIĆ W AKTUALIZACJI ZDUPLIKOWANEGO KLUCZA (aka IODKU), który również wymaga unikalnego klucza (może być również unikalnym kompozytem). W związku z tym nie pojawiłby się nowy wiersz, ale aktualizacja wiersza. Na przykład można wstawić nowy wiersz z 4 kolumnami, ale w przypadku naruszenia duplikacji można przeprowadzić aktualizację tylko w dwóch kolumnach, na przykład

zakładając poniżej PK na niewidocznej kolumnie id int i unikalny klucz w emailAddr

insert person(firstName,lastName,emailAddr) values 'Joe','Smith','[email protected]' 
on duplicate key update firstName='Joe',lastName='Smith'

Jest to unikalny klucz w adresie emailAddr, który sprawia, że ​​to działa. Pozostało tylko 1 wiersz na adres e-mail, kiedykolwiek.

Możesz więc mieć nieograniczoną liczbę Joe Smiths, ale tylko 1 wiersz na adres e-mail.

Stwórz tabelę dla powyższej tabeli może wyglądać tak

create table person
(  id int auto_increment primary key,
   firstName varchar(50) not null,
   lastName varchar(50) not null,
   emailAddr varchar(150) not null,
   unique key(emailAddr)  -- without this, IODKU will not work
);

Możesz również wydać polecenia ALTER TABLE, aby dodać ograniczenia po utworzeniu tabeli. W zależności od zawartych w nich danych połączenie może się nie udać.

Mysql Wstaw przy aktualizacji zduplikowanego klucza oraz Zmień tabelę strony podręcznika.

Powtórzę to jeszcze raz, bez odpowiedniej konfiguracji schematu IODKU nie będzie działać i pozostaną niepożądane wiersze. Więc nie bądź leniwy. Skonfiguruj schemat pierwszy pozwalając mu na sukces (z unikalnymi kluczami), następnie przejdź do korzystania z IODKU.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wiele zapytań wykonywanych w java w jednej instrukcji

  2. Czy powinienem uruchomić mysql na google cloud run? (lub dowolna baza danych)

  3. Django ManyToMany z wieloma bazami danych

  4. PyCharm importuje MySQL

  5. Jak przeanalizować dane z obiektu Rows w node.js,express.js,mysql2