Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да предотвратите дублиращи се вмъквания в таблица

Нямате уникален ключ за имейл адреса . Това е най-голямата ви надежда, тъй като много John Doe могат да бъдат в системата. Така че уникален съставен индекс на пълното име никога не е добра идея.

Човек може да издаде INSERT IGNORE, което се промъква след дублирано нарушение, сякаш нищо не се случва (това е силно непрепоръчително и във вашия случай не е възможно, защото вашето уникално ограничение за имейл не е налице). Основният проблем при това е, че сте склонни (прочетете:вероятно ще) да загубите пълен контрол над потока на случващото се и да останете с нежелани данни. Така че не го използвайте, освен ако не сте професионалист.

Човек може да издаде и ВМЪКНЕТЕ НА АКТУАЛИЗАЦИЯ НА ДУБЛИРАН КЛЮЧ (известен още като IODKU), който също изисква уникален ключ (може да бъде и уникален съставен). Като такъв няма да се появи нов ред, а актуализация на реда. Като пример може да се вмъкне нов ред с 4 колони, но при нарушение на дублирането може да се извърши актуализация само на две от колоните, като например

приемайки по-долу PK на невиждана колона id int и уникален ключ на emailAddr

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

Това е уникалният ключ на emailAddr, който прави тази работа. Останал само с 1 ред на emailAddr досега.

Така че можете да имате неограничен брой Joe Smiths, но само 1 ред на имейл адрес.

Таблицата за създаване на горната таблица може да изглежда така

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

Можете също така да подадете команди ALTER TABLE, за да добавите ограничения, след като таблицата е създадена. В зависимост от данните в него обаждането може да е неуспешно.

Mysql Вмъкване при актуализация на дублиран ключ и Промяна на таблица страници с ръководство.

Ще го кажа отново, без правилната настройка на схемата IODKU няма да работи и ще останете с нежелани редове. Така че не бъдете мързеливи за това. Схема за настройка първо позволявайки му да успее (с уникални ключове),тогава преминете към използване на 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. MySQL 1443:какво означава това?

  2. Множество set и where клаузи в заявката за актуализиране в mysql

  3. Избиране на редове от таблица, които имат еднаква стойност за едно поле

  4. PHP - Не е безопасно да разчитате на настройките на часовата зона на системата

  5. mysql + импортиране на файл с интервали в заглавките на колоните + как да се справя