Получить текущее значение auto_increment - PullRequest
1 голос
/ 28 октября 2009

Я делаю MySQL вставку для моей таблицы, используя php. Имя столбца автоинкремента "link_id" и "alias" colum используется для создания оптимизированного для SEO URL.

Во время вставки я хотел бы добавить значение link_id в конец моего столбца псевдонимов.

Так что мне нужно знать, какое значение вставляется в link_id.

Я не хочу делать другой запрос.

mysql_insert_id () не работает, так как использует предыдущий запрос, а не текущий запрос.

Спасибо

Ответы [ 4 ]

3 голосов
/ 28 октября 2009

Вы должны использовать SHOW TABLE STATUS:

$query = mysql_query("SHOW TABLE STATUS LIKE tablename");
$row = mysql_fetch_array($query);
$next_id = $row["Auto_increment"];

Текущий статус столбца auto_increment.

РЕДАКТИРОВАНИЕ:

В одном запросе вы можете сделать это так:

INSERT INTO table_schema.table_name(column_name) 
VALUES (("SELECT AUTO_INCREMENT 
         FROM INFORMATION_SCHEMA.TABLES 
         WHERE TABLE_SCHEMA = 'table_schema' 
            AND TABLE_NAME = 'table_name'"))

Это даст вам новое значение auto_increment в столбце column_name.

2 голосов
/ 28 октября 2009

Я обрабатываю этот тип сценария на конце SELECT.

Например: вставить в имя таблицы (aliasroot) значения ('index.php? link_id =');

Это даст вам, например,

В моем выборе я бы выбрал 'выбрать concat (aliasroot, link_id) как псевдоним из имени таблицы'

2 голосов
/ 28 октября 2009

Рассматривали ли вы триггер в MySQL ? Что-то вроде:

DELIMITER //
CREATE TRIGGER `add_alias_id` AFTER INSERT ON `someTable`
    FOR EACH ROW BEGIN
        UPDATE 
            `someTable` 
        SET 
            `alias` = CONCAT(`alias`,NEW.`link_id`)
        WHERE
            `link_id` = NEW.`link_id`;
    END;    
//
DELIMITER ;

РЕДАКТИРОВАТЬ: Я недавно работал в компании, флагманское программное обеспечение которой предполагало, что max (id) + 1 = следующий id Проблема в параллелизме; это редко, но два человека могут получить один и тот же идентификатор, вызывая всевозможный хаос. Будьте предельно осторожны, пытаясь предсказать значение.

0 голосов
/ 28 октября 2009

вы можете использовать mysql_insert_id () ++, хотя это не всегда будет надежно.

что было бы лучше, чтобы вставить запрос, а затем добавить текущий идентификатор с помощью CONCAT ()

...