SQL, который лучше вставить строку, если не существует раньше - PullRequest
0 голосов
/ 29 февраля 2012

В настоящее время я использую следующий метод для вставки строки в таблицу, когда столбец не существует .. в противном случае я создаю новый идентификатор столбца и повторяю попытку

    $item_id = $this->misc_model->generateId(18);

    while ($flag == false){

        $this->db->where('item_id', $item_id);
        $sql = $this->db->get($this->db->dbprefix('table'));

        if ($sql->num_rows()){
            $item_id = $this->misc_model->generateId(18);
        }else{
            $flag = true;
        }
    }

можно ли сделать это быстрее, таким образом?

 IF NOT EXISTS(SELECT 1 FROM table WHERE item_id = $item_id)
    INSERT INTO table (item_id) VALUES ($item_id)

Ответы [ 3 ]

2 голосов
/ 29 февраля 2012

Если item_id является вашим первичным ключом, тогда вам лучше использовать AUTO INCREMENT и позволить БД обработать это для вас.

1 голос
/ 01 марта 2012

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

INSERT INTO table_name (item_id) value (RIGHT(CONCAT(UNIX_TIMESTAMP(),UNIX_TIMESTAMP()),18))

, это всегда будет генерировать новый item_id для вас

0 голосов
/ 29 февраля 2012

у вас должны быть столбцы с автоинкрементом, но если по какой-то причине вы не можете, это будет быстрее, да!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...