MySQL уникальное поле - PullRequest
       9

MySQL уникальное поле

0 голосов
/ 12 марта 2011

у меня есть таблица с уникальным полем uniq_field.какой метод добавления лучше - сначала проверьте, существует ли запись с уникальным значением, или просто добавьте запись, и mysql проверит сам?

Ответы [ 3 ]

2 голосов
/ 12 марта 2011

это зависит от действий, которые вы предпримете в случае дублирования
возможные решения могут быть показаны в таком псевдокоде

switch action
    case "do nothing":
        INSERT IGNORE
    case "delete existing then add new one":
        REPLACE INTO
    case "update existing":
        ON DUPLICATE UPDATE
    default:
        select first and then apply necessary logic
1 голос
/ 12 марта 2011

Хорошо для этой таблицы

+--------+---------+------+-----+---------+-------+
| Field  | Type    | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| id     | int(11) | NO   | PRI | 0       |       |
| unique | int(11) | NO   | UNI | NULL    |       |
+--------+---------+------+-----+---------+-------+

Этот код возвращает false

$result = mysql_query("insert into tab1 values(1, 1), (2, 1)");

echo ($result)?($result):"false";

Пока этот код возвращает 1

$result = mysql_query("insert into tab1 values(1, 1), (2, 2)");

echo ($result)?($result):"false";

Кажется, что если вы хотите отобразить сообщение, то вам следует проверить значения в вашей базе данных и отобразить ошибку. Если вы не хотите отображать то, что на самом деле вызвало ошибку, вы можете напрямую запросить ее.

1 голос
/ 12 марта 2011

это зависит от того, как вы хотите обработать его в своем коде.

Если вы просто хотите убедиться, что этот элемент существует, вы можете сделать то, что называется вставкой - при обновлении дублированного ключа - это означает, чтострока заменяется, если она уже присутствует, но если ее нет, она обновляется.

Подробнее по этой теме здесь: http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

...