Я читаю файл sql.txt, и это один раздел. Он создает таблицу «Страница»:

DROP TABLE IF EXISTS `Page`;
CREATE TABLE `Page` (
  `id` bigint(20) NOT NULL auto_increment,
  `pageId` int(11) default NULL,
  `name` varchar(255) default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `pageId` (`pageId`)
)

--
-- Dumping data for table `Page`
--

LOCK TABLES `Page` WRITE;
/*!40000 ALTER TABLE `Page` DISABLE KEYS */;
/*!40000 ALTER TABLE `Page` ENABLE KEYS */;
UNLOCK TABLES;

У меня есть несколько вопросов:

  1. TABLES - это имя базы данных?
  2. Загружает ли WRITE данные на "страницу" таблицы? Если да, то где источник данных?
  3. Означает ли блокировка сначала блокировку базы данных?
-1
marlon 23 Фев 2016 в 22:03

2 ответа

Лучший ответ
  1. ТАБЛИЦЫ - это не имя базы данных. Это означает, какую таблицу (таблицы) заблокировать (в данном случае таблица «Страница»).

  2. WRITE означает, что таблица заблокирована для записи в нее.

  3. Это означает блокировку таблицы, а не базы данных.

0
bastiherrmann 23 Фев 2016 в 19:19

LOCK TABLES - это команда SQL (см. ссылку на документацию), которая применит блокировку к указанному набору таблиц. В данном случае это только одна таблица, Page:

LOCK TABLES `Page` WRITE;

В этом случае это будет две таблицы:

LOCK TABLES `Page`, `Book` WRITE;

Блокировка может иметь «тип», которым в данном случае является WRITE. Это означает, что данные не могут быть записаны в таблицу, пока установлена эта блокировка. Это гарантирует, что никакие обновления не перезапишут записываемое до того, как все будет завершено. Это сохраняет таблицу базы данных в известном состоянии.

Обратите внимание, что вы все еще можете читать из таблицы под блокировкой записи. Это означает, что чтение будет недетерминированным во время записи данных.

SQL не поддерживает блокировку всей базы данных (насколько мне известно). Вышеупомянутая команда заблокирует только указанные таблицы.

0
Nathaniel Ford 26 Фев 2016 в 20:57