powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Блокировки
17 сообщений из 17, страница 1 из 1
Блокировки
    #38951949
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Начал изучать чуть MySQL и наткнулся на такое
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
LOCK TABLES 
   `db_target`.`org` WRITE,
   `db_target`.`org` READ,
   `db_source`.`org` READ;

INSERT INTO `db_target`.`org`
(`name`, `responce`, `actual`)
SELECT `db_source`.`org`.`name`, '', 0
FROM `db_source`.`org`
LEFT JOIN `db_target`.`org`
ON `db_source`.`org`.`name`  = `db_target`.`org`.`name`;

UNLOCK TABLES;



Выдает ошибку Error Code: 1066. Not unique table/alias: `db_target`.`org`
Подскажите, куда копать?
...
Рейтинг: 0 / 0
Блокировки
    #38951958
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полагаю, проблема тут:
http://dev.mysql.com/doc/refman/5.5/en/insert-select.html To avoid ambiguous column reference problems when the SELECT and the INSERT refer to the same table, provide a unique alias for each table used in the SELECT part, and qualify column names in that part with the appropriate alias.
...
Рейтинг: 0 / 0
Блокировки
    #38951965
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftПолагаю, проблема тут:
http://dev.mysql.com/doc/refman/5.5/en/insert-select.html To avoid ambiguous column reference problems when the SELECT and the INSERT refer to the same table, provide a unique alias for each table used in the SELECT part, and qualify column names in that part with the appropriate alias.
Я не пойму, как добавить псевдоним на Insert
...
Рейтинг: 0 / 0
Блокировки
    #38951966
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxixmiksoftПолагаю, проблема тут:
пропущено...

Я не пойму, как добавить псевдоним на Insertне на инсерт, а на таблицу
...
Рейтинг: 0 / 0
Блокировки
    #38951968
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftsaxixпропущено...

Я не пойму, как добавить псевдоним на Insertне на инсерт, а на таблицу
На таблицу, которая в Insert

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
LOCK TABLES 
   `db_target`.`org` WRITE,
   t1 READ,
   t2 READ;

INSERT INTO `db_target`.`org`
(`name`, `responce`, `actual`)
SELECT t1`.`name`, '', 0
FROM `db_source`.`org` as t1
LEFT JOIN `db_target`.`org` as t2
ON t1.`name`  = t2.`name`;

UNLOCK TABLES;


Так не прокатывает.
Error Code: 1146. Table 'db_source.t1' doesn't exist
...
Рейтинг: 0 / 0
Блокировки
    #38951977
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxix,

а причем тут LOCK TABLES ?
Это отдельные разные команды, не надо их смешивать.
...
Рейтинг: 0 / 0
Блокировки
    #38951991
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftsaxix,

а причем тут LOCK TABLES ?
Это отдельные разные команды, не надо их смешивать.
Понял первую ошибку.
Не смешивая
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
LOCK TABLES 
   `db_target`.`org` as tt1 WRITE,
   `db_target`.`org` as tt2 READ,
   `db_source`.`org` as tt3 READ;

INSERT INTO `db_target`.`org`
(`name`, `responce`, `actual`)
SELECT t1`.`name`, '', 0
FROM `db_source`.`org` as t1
LEFT JOIN `db_target`.`org` as t2
ON t1.`name`  = t2.`name`;

UNLOCK TABLES;



Error Code: 1100. Table `db_target`.`org` was not locked with LOCK TABLES
Куда ни плюнь
...
Рейтинг: 0 / 0
Блокировки
    #38952005
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, это гениально - дать ТРИ запроса, ОДНО сообщение об ошибке, и даже не озаботиться указанием, какой из запросов приводит к ошибке...
...
Рейтинг: 0 / 0
Блокировки
    #38952009
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaНе, это гениально - дать ТРИ запроса, ОДНО сообщение об ошибке, и даже не озаботиться указанием, какой из запросов приводит к ошибке...
К ошибке приводит второй запрос, сорри ))) Но если не выполнять блокировку, он выполняется без ошибок.
...
Рейтинг: 0 / 0
Блокировки
    #38952011
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже не говорю о том, что иногда рекомендуется читать маны...

http://dev.mysql.com/doc/refman/5.6/en/lock-tables.html You cannot refer to a locked table multiple times in a single query using the same name. Use aliases instead, and obtain a separate lock for the table and each alias:
Код: sql
1.
2.
3.
4.
mysql> LOCK TABLE t WRITE, t AS t1 READ;
mysql> INSERT INTO t SELECT * FROM t;
ERROR 1100: Table 't' was not locked with LOCK TABLES
mysql> INSERT INTO t SELECT * FROM t AS t1;


The error occurs for the first INSERT because there are two references to the same name for a locked table. The second INSERT succeeds because the references to the table use different names.
...
Рейтинг: 0 / 0
Блокировки
    #38952017
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иными словами, алиас тебе нужен только один:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
LOCK TABLES 
   `db_target`.`org` WRITE,
   `db_target`.`org` AS t1 READ,
   `db_source`.`org` READ;

INSERT INTO `db_target`.`org`
(`name`, `responce`, `actual`)
SELECT `db_source`.`org`.`name`, '', 0
FROM `db_source`.`org`
LEFT JOIN `db_target`.`org` AS t1
ON `db_source`.`org`.`name`  = t1.`name`;

UNLOCK TABLES;
...
Рейтинг: 0 / 0
Блокировки
    #38952025
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaЯ уже не говорю о том, что иногда рекомендуется читать маны...

http://dev.mysql.com/doc/refman/5.6/en/lock-tables.html You cannot refer to a locked table multiple times in a single query using the same name. Use aliases instead, and obtain a separate lock for the table and each alias:
Код: sql
1.
2.
3.
4.
mysql> LOCK TABLE t WRITE, t AS t1 READ;
mysql> INSERT INTO t SELECT * FROM t;
ERROR 1100: Table 't' was not locked with LOCK TABLES
mysql> INSERT INTO t SELECT * FROM t AS t1;


The error occurs for the first INSERT because there are two references to the same name for a locked table. The second INSERT succeeds because the references to the table use different names.
Тоже самое

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
LOCK TABLES 
   `db_target`.`org` tt1 WRITE,
   `db_target`.`org` tt2 READ,
   tt1 tt3 READ;

INSERT INTO `db_target`.`org`
(`name`, `responce`, `actual`)
SELECT t1`.`name`, '', 0
FROM `db_source`.`org` as t1
LEFT JOIN `db_target`.`org` as t2
ON t1.`name`  = t2.`name`;

UNLOCK TABLES;



Error Code: 1146. Table 'db_source.t1' doesn't exist
...
Рейтинг: 0 / 0
Блокировки
    #38952029
saxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaИными словами, алиас тебе нужен только один:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
LOCK TABLES 
   `db_target`.`org` WRITE,
   `db_target`.`org` AS t1 READ,
   `db_source`.`org` READ;

INSERT INTO `db_target`.`org`
(`name`, `responce`, `actual`)
SELECT `db_source`.`org`.`name`, '', 0
FROM `db_source`.`org`
LEFT JOIN `db_target`.`org` AS t1
ON `db_source`.`org`.`name`  = t1.`name`;

UNLOCK TABLES;


Хм. Работает. Спасибо. Буду разбираться.
...
Рейтинг: 0 / 0
Блокировки
    #38952058
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обрати внимание - у тебя алиасы отфонарны. У меня - строго совпадают.
Экземпляр блокируемой таблицы определяется по полному алиасу или, при его отсутствии, по полному имени.
...
Рейтинг: 0 / 0
Блокировки
    #38952062
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaУ меня - строго совпадают.
Экземпляр блокируемой таблицы определяется по полному алиасу или, при его отсутствии, по полному имени.Это рельно так и должно быть?
Первый раз вижу, чтобы алиасы одного запроса как-то влияли на алиасы другого запроса. До сих пор я считал, что они действуют строго в рамках своего запроса.
...
Рейтинг: 0 / 0
Блокировки
    #38952083
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft , попробуй просто представить себе механизм, который позволит серверу разобраться, какая блокировка к какой копии таблицы должна применяться.
...
Рейтинг: 0 / 0
Блокировки
    #38952093
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тем более что это как бы не совсем алиасы. Это скорее значения полей записи служебной таблицы блокировок. Можешь считать, что инструкция
Код: sql
1.
2.
3.
LOCK TABLES 
    tablename       WRITE, 
    tablename as t1 READ;

на самом деле является инструкцией типа
Код: sql
1.
2.
3.
4.
5.
INSERT INTO INFORMATION_SHEMA.CURRENT_LOCKS 
        (   name    ,   alias   ,locktype) 
VALUES 
        ('tablename','tablename','WRITE'), 
        ('tablename','t1'       ,'READ');
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Блокировки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]