Вставка и обновление SQL в одно и то же время

#php #mysql #sql

#php #mysql #sql

Вопрос:

Привет, у меня есть запрос, который вставит в таблицу новые данные, и я хочу, чтобы в то же время обновлялась внешняя таблица с идентификатором новых данных, которые я ввел. например:

 mysql_query("INSERT INTO `test` (`name`) VALUES ('Mark')");
$query = mysql_query("SELECT `id` FROM `test` WHERE `name` = 'Mark'");
$id = mysql_result($query,0);
mysql_quey("UPDATE `test2` SET `test_id` = $id WHERE `name` = 'Mark'");
 

Как мне сделать это одновременно? потому что, делая это таким образом, я только вставляю новые данные и не обновляю другие.

Отбрасывает.

Комментарии:

1. Примечание: удалите обратные метки в ваших значениях и замените кавычками.

2. Попробуйте найти оператор MERGE .

3. insert запросы могут быть нацелены только на одну таблицу. вам нужно будет запустить несколько отдельных запросов или использовать триггер.

4. Похоже, что мой комментарий теперь НЕДЕЙСТВИТЕЛЕН; судя по чьему-то редактированию. Было ли это действительным? Это была ошибка? Кто знает. Нам не разрешено изменять код, но исправлять отступы и текстовые опечатки.

5. @Fred-ii- это будет работать, если я это сделаю?

Ответ №1:

Попробуйте это :

 mysql_query("INSERT INTO `test` (`name`) VALUES ('Mark')");
$id = mysql_insert_id();
mysql_quey("UPDATE `test2` SET `test_id` = $id WHERE `name` = 'Mark'");
 

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

Также я изменил его, чтобы использовать только два запроса, mysql_insert_id() получит последний вставленный идентификатор без необходимости запрашивать его.

Ссылка: http://www.php.net/manual/en/function.mysql-insert-id.php

Комментарии:

1. Проголосовал, так как вы исправили проблему с обратными ссылками, из-за которой было сделано недопустимое редактирование, которое, возможно, способствовало проблеме OP. Кроме того, предоставляя OP решение.

Ответ №2:

Прежде всего, вам не нужен select для получения идентификатора, mysql_insert_id() для этого есть.

Затем вам нужно использовать транзакцию, чтобы оба запроса выполнялись одновременно:

 mysql_query('BEGIN');
mysql_query("INSERT INTO `test` (`name`) VALUES ('Mark')");
$id = mysql_insert_id();
mysql_query("UPDATE `test2` SET `test_id` = $id WHERE `name` = 'Mark'");
mysql_query('COMMIT');
 

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

Комментарии:

1. 1, я не понимаю, почему кто-то голосует за вас, потому что ваш ответ — единственное хорошее решение! Транзакции необходимы, когда необходимо выполнить несколько взаимозависимых запросов…