[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: LOAD XML LOCAL INFILE
Страницы: 1, 2
VeRTak
При заливки файла через LOAD XML LOCAL INFILE. С использованием REPLACE.
Обнаружил следующую вещь. К примеру есть name и name2. В самом файле xml есть name, а name2 нету. Так вот он перезаписывает мне name а так же прицепом name2 в null. По идеи так не должно быть же. Повесил триггер, Проверил сам триггер работает на update, однако при заливке файла не работает.

Кто что посоветует? biggrin.gif
VeRTak

CREATE TRIGGER `no_update` BEFORE UPDATE ON `$table[10]`
FOR EACH ROW
BEGIN
SET NEW.n_title = OLD.n_title;
END;
LOAD XML LOCAL INFILE '".BASE_PATH."/file.xml'
REPLACE
INTO TABLE
$table[10]
ROWS IDENTIFIED BY '$rows[10]';
DROP TRIGGER IF EXISTS no_update


Собственно вот так у меня организован sql запрос. И в столбце n_title, я вижу NULL.

Я решил попробовал INSERT. Ради интереса, дабы в лоб никто не даст


CREATE TRIGGER `no_update` BEFORE INSERT ON `$table[10]`
FOR EACH ROW
BEGIN
SET NEW.n_title = 1;
END;
LOAD XML LOCAL INFILE '".BASE_PATH."/file.xml'
REPLACE
INTO TABLE
$table[10]
ROWS IDENTIFIED BY '$rows[10]';
DROP TRIGGER IF EXISTS no_update


И что я обнаружил. Что n_title = 1. Получается REPLACE использует INSERT?
VeRTak
Не пойму тогда как мне вставить туда значение которое было до этого?
VeRTak
Как то тут высказывали неудовольствие, что не выкладывается решение проблемы.

Вот показываю как решил данную ситуацию


CREATE TRIGGER `no_insert` BEFORE INSERT ON `$table[10]`
FOR EACH ROW
BEGIN
SELECT n_title into @n_title FROM $table[10] WHERE id = NEW.id;
SET NEW.n_title = @n_title;
END;
LOAD XML LOCAL INFILE '".BASE_PATH."/file.xml'
REPLACE
INTO TABLE
$table[10]
ROWS IDENTIFIED BY '$rows[10]';
DROP TRIGGER IF EXISTS no_insert
killer8080
Цитата (VeRTak @ 14.08.2017 - 11:34)
К примеру есть name и name2. В самом файле xml есть name, а name2 нету. Так вот он перезаписывает мне name а так же прицепом name2 в null. По идеи так не должно быть же.

как раз так и должно быть, на то он и реплейс, старая запись удаляется и создаётся новая wink.gif
Другой вопрос, зачем ты вообще используешь replace, если он тебе не нужен? Сам создаёшь себе проблемы, а потом героически с ними борешься biggrin.gif

https://dev.mysql.com/doc/refman/5.7/en/load-xml.html
VeRTak
Цитата (killer8080 @ 15.08.2017 - 10:40)
вопрос, зачем ты вообще используешь replace, если он тебе не нужен?


Не нашел другого варианта как перезаливать файл. Если какое то значение случайным образом изменилось в базе. Спас только replace
killer8080
Цитата (VeRTak @ 15.08.2017 - 16:03)
Не нашел другого варианта как перезаливать файл. Если какое то значение случайным образом изменилось в базе. Спас только replace

Цитата (VeRTak @ 14.08.2017 - 13:20)
Не пойму тогда как мне вставить туда значение которое было до этого?

ну как бы определись чего ты хочешь, либо синхронизировать с файлом, либо сохранять внесённые в базу ранее изменения. Тот факт что
Цитата (VeRTak @ 14.08.2017 - 11:34)
К примеру есть name и name2. В самом файле xml есть name, а name2 нету. Так вот он перезаписывает мне name а так же прицепом name2 в null

говорит о том, что входные данные меняются, а ты их насильно перезаписываешь обратно, смысл тогда в реплейсе?
VeRTak
Цитата (killer8080 @ 15.08.2017 - 16:13)
нные меняются, а ты их насильно перезаписываешь обратно, смысл тогда в реплейсе?


Похоже ты прав. Что то я не подумал о другом. Если без replace, и в файле появится новая запись, он ее добавит?
VeRTak
killer8080 А тут смотри какая ситуация. Запись если новая появляется, она добавляется. А вот если уже у id который есть в базе запись изменяется в файле. Она то уже в базе не изменяется. Так что вполне правильное решение я подобрал
Valick
Цитата (VeRTak @ 15.08.2017 - 16:21)
Запись если новая появляется, она добавляется.

Мастер Йода, ты ли это? Да пребудет с тобой книга!!!

В голове каша твоей. Хорошая нужна книга тебе. Про "толчок" сотри подпись лучше.

_____________
Стимулятор ~yoomoney - 41001303250491
VeRTak
Valick И что же тут не так в моих словах. Я пересмотрел масса вариантов по этому поводу. Похоже вы просто не до конца понимаете всю ситуацию.

Есть файл xml. в файле к примеру


<test id="1" name="test" />


Потом сайт откуда я заливаю данный файл у данного id меняет имя. на testig

Тем самым в xml получается следующее.

<test id="1" name="testig" />


И без replace, я у себя в базе никак не поменяю имя. Причем тут вообще книга? Есть другое решение? Хорошо. Какое? Я не нашел...
killer8080
Цитата (VeRTak @ 15.08.2017 - 16:25)
Если без replace, и в файле появится новая запись, он ее добавит?

естественно
Цитата (VeRTak @ 15.08.2017 - 17:21)
Запись если новая появляется, она добавляется. А вот если уже у id который есть в базе запись изменяется в файле. Она то уже в базе не изменяется. Так что вполне правильное решение я подобрал

да, но зачем тогда нужен триггер?
VeRTak
Цитата (killer8080 @ 16.08.2017 - 10:16)
да, но зачем тогда нужен триггер?


Я же объяснил в таблице есть еще значения которых нет в файле xml, он их в null делает, с replace, а если без replace, то не заменяет те которые есть в xml.
Valick
Цитата (VeRTak @ 15.08.2017 - 19:46)
Похоже вы просто не до конца понимаете всю ситуацию.

Похоже вы просто не до конца понимаете зачем читать книги.
Даю подсказку:
Идиоты разработчки на кой-то хрен придумали никому не нужный тип таблиц Memory.


_____________
Стимулятор ~yoomoney - 41001303250491
VeRTak
Цитата (Valick @ 16.08.2017 - 11:11)
тип таблиц Memory.


Почитал. У меня таблица 750 тысяч записей которая весит не мало


Хочется отметить, что это решение только для хранения небольших объемов информации.
Если вы загрузите много данных в таблицу MEMORY, они могут попасть в своп, и что еще хуже, лишить сервер ресурсов для выполнения запросов к таблицам, хранящимся на диске.
В результате оперативные данные запроса могут так же проходить через своп, что сильно скажется на производительности СУБД в целом.
Кроме того, если достигнут лимит объема таблицы, старые записи не удаляются автоматически и сервер просто возвращает ошибку.
С другой стороны, в несколько мегабайт легко уместится, подробная статистика посещений за последний час или положение пользователей на сайте.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.