<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум PHP-MyAdmin.RU &mdash; триггер не срабатывает при импорте csv]]></title>
		<link>https://forum.php-myadmin.ru/viewtopic.php?id=1873</link>
		<atom:link href="https://forum.php-myadmin.ru/extern.php?action=feed&amp;tid=1873&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «триггер не срабатывает при импорте csv».]]></description>
		<lastBuildDate>Mon, 30 Aug 2010 08:09:29 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: триггер не срабатывает при импорте csv]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=13243#p13243</link>
			<description><![CDATA[<p><strong>Hanut</strong><br />Спасибо за разбор ситуации.</p>]]></description>
			<author><![CDATA[null@example.com (aliputin)]]></author>
			<pubDate>Mon, 30 Aug 2010 08:09:29 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=13243#p13243</guid>
		</item>
		<item>
			<title><![CDATA[Re: триггер не срабатывает при импорте csv]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=13242#p13242</link>
			<description><![CDATA[<p><strong>aliputin</strong><br />Значит бинарный ноль байт транслируется в null значение.</p><p>Я пока не вижу преимущества использования переменной @fl вместо REPLACE запроса.</p>]]></description>
			<author><![CDATA[null@example.com (Hanut)]]></author>
			<pubDate>Sun, 29 Aug 2010 12:28:00 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=13242#p13242</guid>
		</item>
		<item>
			<title><![CDATA[Re: триггер не срабатывает при импорте csv]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=13241#p13241</link>
			<description><![CDATA[<p><strong>Hanut</strong><br />В данном случае, т.к. условие сработало, то в текстовом поле будет null.</p>]]></description>
			<author><![CDATA[null@example.com (aliputin)]]></author>
			<pubDate>Sun, 29 Aug 2010 11:49:09 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=13241#p13241</guid>
		</item>
		<item>
			<title><![CDATA[Re: триггер не срабатывает при импорте csv]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=13240#p13240</link>
			<description><![CDATA[<p><strong>aliputin</strong><br />Посмотрите что в переменной @fl записав ее содержимое в текстовое поле.<br /></p><div class="codebox"><pre><code>if @fl is null then
insert into groupsbrands
(gid, sname)
values (new.gid, @fl);</code></pre></div><p>Уникальное поле (UNIQUE) тоже будет работать в REPLACE запросе.</p>]]></description>
			<author><![CDATA[null@example.com (Hanut)]]></author>
			<pubDate>Sun, 29 Aug 2010 11:40:46 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=13240#p13240</guid>
		</item>
		<item>
			<title><![CDATA[Re: триггер не срабатывает при импорте csv]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=13239#p13239</link>
			<description><![CDATA[<p>Допустим, в импорте две записи. Первая запись уже есть в таблице groupsbrands, вторая запись новая.</p><p>По-шагово.</p><p>Триггер запускается для первой записи. <br />@fl = null<br />sname = &#039;DVD&#039;<br />@fl = &#039;DVD&#039;<br />т.к. @fl &lt;&gt; null, второй запрос не выполняется.</p><p>Триггер запускается для второй записи.<br />@fl = null<br />sname = не понятно что (ноль байт)<br />@fl = ноль байт (по-Вашему) или текущее значение, т.е. null (по-моему)<br />т.к. @fl &lt;&gt; null, второй запрос не выполняется (по-Вашему)<br />или @fl = null, второй запрос выполняется (по-моему).</p><p>Тут я не понимаю. Если правы Вы (ноль байт - это не null), тогда мой триггер не должен выполнить второй запрос на вставку. Но он выполняется. Значит, прав я (значение переменной @fl не изменяется).</p>]]></description>
			<author><![CDATA[null@example.com (aliputin)]]></author>
			<pubDate>Sun, 29 Aug 2010 11:36:00 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=13239#p13239</guid>
		</item>
		<item>
			<title><![CDATA[Re: триггер не срабатывает при импорте csv]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=13238#p13238</link>
			<description><![CDATA[<p>Поле gid - уникальное (UNIQUE), но не объявлено как первичный ключ.</p><p>&gt;&gt;ноль байт - это не null! Это важно!</p><p>Я думал, что если условие первой выборки не удовлетворено, то значение переменной @fl не изменяется. Выходит, по-Вашему, в этой переменной теперь будет ноль байт? Но как тогда второй запрос запускается? Ведь там задано условие is null?</p>]]></description>
			<author><![CDATA[null@example.com (aliputin)]]></author>
			<pubDate>Sun, 29 Aug 2010 11:20:02 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=13238#p13238</guid>
		</item>
		<item>
			<title><![CDATA[Re: триггер не срабатывает при импорте csv]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=13237#p13237</link>
			<description><![CDATA[<p><strong>aliputin</strong><br />Давайте разбирать по пунктам.</p><div class="codebox"><pre><code>-- Объявили пользовательскую переменную @fl.
set @fl = null;

-- Здесь в переменную @fl попадает значение из поля sname выбираемое по gid. Поле gid - это первичный ключ?
-- Обратите внимание, что если значение запроса не найдено, то в переменной @fl будет 0 байт в бинарном виде (ноль байт - это не null! Это важно!).
select
sname into @fl
from groupsbrands
where groupsbrands.gid = new.gid;

-- Если в переменной @fl находится null значение (null - это не ноль байт), то выполняем вставку строки.
if @fl is null then
insert into groupsbrands
(gid, sname)
values (new.gid, new.sname);
end if;</code></pre></div><p>Я не вижу смысла в такой конструкции, поэтому предложил REPLACE, ведь вы все-равно используете поле gid для выборки значения поля sname в первом запросе SELECT.</p>]]></description>
			<author><![CDATA[null@example.com (Hanut)]]></author>
			<pubDate>Sun, 29 Aug 2010 10:12:17 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=13237#p13237</guid>
		</item>
		<item>
			<title><![CDATA[Re: триггер не срабатывает при импорте csv]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=13236#p13236</link>
			<description><![CDATA[<p>Если бы у меня были первичные ключи! <br />По причинам бизнес-логики я не могу использовать первичные ключи. Поэтому код моего триггера отличается от Вашего.</p>]]></description>
			<author><![CDATA[null@example.com (aliputin)]]></author>
			<pubDate>Sun, 29 Aug 2010 09:44:47 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=13236#p13236</guid>
		</item>
		<item>
			<title><![CDATA[Re: триггер не срабатывает при импорте csv]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=13235#p13235</link>
			<description><![CDATA[<p><strong>aliputin</strong><br />Если у вас есть поле первичного ключа и это поле содержит уникальные значения, то попробуйте запрос вида:<br /></p><div class="codebox"><pre><code>REPLACE INTO `csv_vvv` (`csv_vvv`.`id`, `csv_vvv`.`text`) VALUES (NEW.`id`, NEW.`text`);</code></pre></div><p>Думаю это оптимальный вариант. Но проверка уникальности проходит по первичному ключу, а не по значению.</p><p>В вашем случае код триггера будет такой:<br /></p><div class="codebox"><pre><code>DROP TRIGGER IF EXISTS `tovar_bi`;
DELIMITER //
CREATE TRIGGER `tovar_bi` BEFORE INSERT ON `tovar`
  FOR EACH ROW BEGIN
    REPLACE INTO `groupsbrands` (`groupsbrands`.`gid`, `groupsbrands`.`sname`) VALUES (NEW.`gid`, NEW.`sname`);
end
//
DELIMITER ;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Hanut)]]></author>
			<pubDate>Sun, 29 Aug 2010 09:15:16 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=13235#p13235</guid>
		</item>
		<item>
			<title><![CDATA[Re: триггер не срабатывает при импорте csv]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=13234#p13234</link>
			<description><![CDATA[<p>Суть моего триггера понять нетрудно, если сравнить с Вашим. В Вашем триггере осуществляется <em>безусловная </em>вставка, в моем - <em>условная</em>. Если в таблице 2 уже есть аналогичная запись, тогда нет вставки. Если такой записи нет, тогда вставляем. </p><p>Чтобы узнать, есть ли такая запись, делается выборка из таблицы 2 в переменную @fl. Если эта переменная содержит что-нибудь, значит такая запись уже есть. Если же переменная равна null, тогда записи еще нет, и делается вставка.</p>]]></description>
			<author><![CDATA[null@example.com (aliputin)]]></author>
			<pubDate>Sun, 29 Aug 2010 08:39:09 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=13234#p13234</guid>
		</item>
		<item>
			<title><![CDATA[Re: триггер не срабатывает при импорте csv]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=13233#p13233</link>
			<description><![CDATA[<p><strong>aliputin</strong><br />Строка означает объявление пользовательской переменной.<br />[mono]set @fl = null;[/mono]</p><p>Скорее странно почему раньше работало. Хотя и сейчас код не идеален.</p><p>Но я не могу разобраться в вашем триггере без структуры таблиц и без примера данных.</p>]]></description>
			<author><![CDATA[null@example.com (Hanut)]]></author>
			<pubDate>Sat, 28 Aug 2010 14:01:48 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=13233#p13233</guid>
		</item>
		<item>
			<title><![CDATA[Re: триггер не срабатывает при импорте csv]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=13232#p13232</link>
			<description><![CDATA[<p>Я добавил в код своего триггера одну строку и он заработал. Проблема в том, что я не понимаю, почему он заработал.</p><p>Вот код (добавил первую строку):</p><p>CREATE TRIGGER `tovar_bi` BEFORE INSERT ON `tovar`<br />FOR EACH ROW begin</p><p>set @fl = null; #это добавленная строка</p><p>select<br />sname into @fl<br />from groupsbrands<br />where groupsbrands.gid = new.gid;</p><p>if @fl is null then<br />insert into groupsbrands<br />(gid, sname)<br />values (new.gid, new.sname);<br />end if;<br />end</p><p>Почему этот код не работал без этой строки и почему работает теперь?</p>]]></description>
			<author><![CDATA[null@example.com (aliputin)]]></author>
			<pubDate>Sat, 28 Aug 2010 12:51:17 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=13232#p13232</guid>
		</item>
		<item>
			<title><![CDATA[Re: триггер не срабатывает при импорте csv]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=13231#p13231</link>
			<description><![CDATA[<p><strong>aliputin</strong><br />Попробуйте такой запрос, при нем будут вставлены только строки с уникальными ключами.<br />INSERT IGNORE INTO `csv_vvv` (`csv_vvv`.`id`, `csv_vvv`.`text`) VALUES (NEW.`id`, NEW.`text`);</p>]]></description>
			<author><![CDATA[null@example.com (Hanut)]]></author>
			<pubDate>Sat, 28 Aug 2010 11:20:12 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=13231#p13231</guid>
		</item>
		<item>
			<title><![CDATA[Re: триггер не срабатывает при импорте csv]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=13229#p13229</link>
			<description><![CDATA[<p><strong>Hanut</strong><br />Да, Ваш код работает. Спасибо.<br />Значит, ошибка в моем коде. Но почему тогда мой триггер срабатывает при ручной вставке? Он ведь должен работать либо всегда, либо никогда.</p>]]></description>
			<author><![CDATA[null@example.com (aliputin)]]></author>
			<pubDate>Sat, 28 Aug 2010 10:34:34 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=13229#p13229</guid>
		</item>
		<item>
			<title><![CDATA[Re: триггер не срабатывает при импорте csv]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=13225#p13225</link>
			<description><![CDATA[<p><strong>aliputin</strong><br />В вашем триггере разобраться не смог. Вот пример, который работает без проблем, как при вставке на вкладке &quot;Вставить&quot;, так и через &quot;Импорт CSV&quot;.</p><div class="codebox"><pre><code>CREATE TABLE IF NOT EXISTS `csv` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `text` tinytext NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;


CREATE TABLE IF NOT EXISTS `csv_vvv` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `text` tinytext NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;

DROP TRIGGER IF EXISTS `csv_trigger`;
DELIMITER //
CREATE TRIGGER `csv_trigger` BEFORE INSERT ON `csv`
 FOR EACH ROW BEGIN
    INSERT INTO `csv_vvv` SET `csv_vvv`.`text` = NEW.`text`;
end
//
DELIMITER ;</code></pre></div><p>Пример CSV файла csv.csv:<br /></p><div class="codebox"><pre><code>1;&quot;fdsa&quot;
2;&quot;vvv&quot;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Hanut)]]></author>
			<pubDate>Sat, 28 Aug 2010 09:54:14 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=13225#p13225</guid>
		</item>
	</channel>
</rss>
