Не могли бы вы написать мое заявление для меня? - PullRequest
1 голос
/ 28 июня 2011

Это грустно, но я уже давно нахожусь в этом, и я просто не могу понять это утверждение, поиски в Google поднимают подобные вопросы, но я не применил решения.

У меня есть музыкальный стол, и каждый раз, когда я вставляю в него песню (каждая строка - это песня), я хочу вставить песню в таблицу чистой музыки, если она помечена как чистая. Я использую mysql.

use music;

CREATE TRIGGER cache_clean_music BEFORE INSERT ON music
FOR EACH ROW 
if new.clean then 
   insert into clean_music values (new.artist, new.album, new.song, new.filename, new.clean); 
end if;

Я получаю ошибку

ОШИБКА 1064 (42000) в строке 3: у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 4

а вот описание музыкальной таблицы, таблица clean_music точно такая же

+----------+---------------------+------+-----+---------+----------------+
| Field    | Type                | Null | Key | Default | Extra          |
+----------+---------------------+------+-----+---------+----------------+
| artist   | varchar(100)        | YES  |     | NULL    |                |
| album    | varchar(100)        | YES  |     | NULL    |                |
| song     | varchar(100)        | YES  |     | NULL    |                |
| filename | varchar(100)        | YES  |     | NULL    |                |
| clean    | tinyint(1)          | YES  |     | NULL    |                |
| id       | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
+----------+---------------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

Ответы [ 4 ]

1 голос
/ 28 июня 2011

Поможет ли вам обернуть НАЧАТЬ ... КОНЕЦ вокруг вещей?

CREATE TRIGGER ...
FOR EACH ROW BEGIN
  IF ...
  ....
  END IF;
END
1 голос
/ 28 июня 2011

Ошибка - ОШИБКА 1064 (42000) в строке 3: у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '' в строке 4 - это означает, что значения в некоторых из ваших входных параметров не верны, возможно, есть некоторые несоответствующие одинарные кавычки. Можете ли вы отобразить свой запрос или значение в NEW. переменные?

Кроме того, как только вы исправите эту ошибку, ваш запрос также выдаст еще одну ошибку, которая «число столбцов не соответствует значению». И это потому, что в вашей таблице 6 столбцов, а в INSERT - только 5. Упомяните столбцы в запросе INSERT, и все должно быть в порядке, например:

insert into clean_music (artist, album, song, filename, clean) values (new.artist, new.album, new.song, new.filename, new.clean);
1 голос
/ 28 июня 2011

Если две таблицы идентичны (или почти), вам, вероятно, вообще не нужны триггеры (и весь их беспорядок).

Вы можете использовать VIEW вместо таблицы (с дублирующимися данными) для cache_clean_music:

CREATE VIEW cache_clean_music AS
  SELECT artist
       , album
       , song
       , filename        ---- and possibly other fields you need
       , id
  FROM music
  WHERE clean ;

Добавление индекса на music.clean было бы хорошей идеей в этом случае.

0 голосов
/ 09 февраля 2012

Ваш ключ это "проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '' в строке 4"

Вы знаете, какую версию сервера mysql вы используете?

Проверяли ли вы руководство, чтобы убедиться, что написанная вами команда разрешена в этой версии?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...