У меня есть скрипт php, который позволяет пользователю что-то написать, и после нажатия какой-либо кнопки записанные данные будут вставлены в таблицу mysql. data
наряду с текущим timestamp
, Достаточно просто. Теперь, так как я хочу получить данные из таблицы на основе самых высоких timestamp
Я ожидаю, что мой запрос извлечет только одну строку данных, которая будет последней строкой. Помня об этом, я не могу позволить двум или более пользователям одновременно вставлять данные, которые будут генерировать точно такую же временную метку, которая, в свою очередь, пойдет против моей цели при запросе данных. Хотя я знаю, что вероятность генерации точно такой же временной метки очень мала, но я хочу быть на безопасной стороне. Вот что я попробовал
$sql_lock_table = $db->prepare("LOCK TABLES comments WRITE");
$sql_lock_table->$db->execute();
$time = time();
$data = "some data";
$sql_insert = $db->prepare("INSERT INTO data VALUES(null, :time, :thedata)");
$sql_insert->execute(array(
"time" => $time,
"thedata" => $data
));
$sql_unlock_table = $db->prepare("UNLOCK TABLES");
$sql_unlock_table->$db->execute();
Я получил информацию о блокировке и разблокировке из другого вопроса stackoverflow, но я не совсем понял, зачем блокировать таблицу перед вставкой, так как она не позволяет кому-либо вставлять данные. И вот я понял, что был прав. Никакой вставки не происходит. Что я должен сделать, чтобы достичь того, что я хотел сделать?
Согласно свойствам MySQL
, Это не позволит двум данным быть вставленными одновременно. Так что вам не нужно предпринимать никаких мер предосторожности.
проверьте ссылку ниже
http://dev.mysql.com/doc/refman/5.6/en/internal-locking.html
можете указать таблицу движка?
если ваш стол InnoDB, тогда 2 оператора вставки могут произойти одновременно, где MyISAM двигатель, заблокирует таблицу для операции вставки, предотвращая появление других вставок.
если InnoDB не требуется для вас, если вы измените его на MyISAM, движок mysql позаботится о том, чтобы могла произойти ТОЛЬКО одна вставка, а другая заблокирует, пока не завершится текущая.
проверять, выписываться: В чем разница между MyISAM и InnoDB
надеюсь, что это поможет немного …