Допустим, сервер API обращается к серверу SQL из запроса, соединение для сервера MySQL такое.
@mysql_connect(HOSTNAME,DATABASE_USER, DATABASE_PASSWORD) or die('Could not connect to : ' . mysql_error());
@mysql_select_db(DATABASE_NAME) or die( "<-----------------------Unable to select database------------------>");
Есть ли способ определить, открыто ли уже соединение? Если он открыт, сделайте транзакцию sql.
Скажем, при доступе к таблице A, другой вызов API-запроса извне приходит и хочет получить доступ к таблице B.
Можно ли инициировать доступ к таблице B, пока операция с таблицей A все еще выполняется.
Другими словами, не дожидайтесь завершения доступа к Таблице A. Как только появится доступ к таблице B, запустите ее.
1 ответ
@jasonwhite Я считаю, что параллелизм обрабатывается на уровне СУБД, которая, в зависимости от рассматриваемой операции, уже поддерживает возможность одновременного выполнения двух операций. Если, например, первая операция была операцией SELECT , а вторая была операцией INSERT , обе могли быть выполнены одновременно. Фактически, независимо от типов операций, это было бы возможно, за исключением случаев, когда таблицы были связаны через ограничение внешнего ключа. Это связано с тем, что MySQL реализует блокировку таблицы во время операций, при которой он блокирует таблицу, пока над ней выполняется операция, а затем освобождает таблицу после завершения этой операции.
Что касается проверки того, существует ли уже соединение, вам потребуется реализовать метод singleton , который будет проверять, существует ли уже соединение. Если нет, создайте его и верните; если это так, верните существующее соединение. Это выглядело бы примерно так:
function getConnection() {
global $conn; //I do not recommend using globals, rather create a class for this
if(is_null($conn)) {
$conn = mysql_connect(HOSTNAME,DATABASE_USER, DATABASE_PASSWORD) or die('Could not connect to : ' . mysql_error());
mysql_select_db(DATABASE_NAME) or die( "<-----------------------Unable to select database------------------>");
}
return $conn;
}
AFAIK, у вас нет дальнейшего контроля над тем, будет ли одна операция ждать другой во время выполнения. Мои 0,02 доллара.
Похожие вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными. В вопросе всегда указывайте точную версию сервера. Версии 5.x сильно отличаются по своим возможностям от версий 8+.
mysql_*
functions: Это расширение не рекомендуется для написания нового кода. Вместо этого mysqli или PDO_MySQL. См. Также Обзор API MySQL для получения дополнительной помощи при выборе MySQL API.