powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Триггер
17 сообщений из 17, страница 1 из 1
Триггер
    #34366473
ksusha_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
game_history поля : id,hits,bet,payout,time,user_id,

на такой запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TRIGGER from_game_to_operation 
  AFTER INSERT 
  ON game_history 
  FOR EACH ROW 
  BEGIN 
    insert into account_operation values('',now(), 3 ,bet,user_id); 
    IF (payout> 0 ) THEN 
      insert into account_operation values('',now(), 4 ,payout,user_id); 
    END IF
  END;
он ругается
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'insert into account_operation values('',now(),3,bet,user_id)
IF (payout>0' at line 6

но он ругается даже на запрос попроще
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE TRIGGER from_game_to_operation 
  before INSERT 
  ON game_history 
  FOR EACH ROW 
  BEGIN 
  set new.hits =  10 
  END;

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set new.hits = 10
END' at line 6

я не знаю что делать, помогите.
...
Рейтинг: 0 / 0
Триггер
    #34366521
ksusha_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
версия MySQL - 5.0.33
...
Рейтинг: 0 / 0
Триггер
    #34366602
ksusha_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и еще если писать ; в внутри запроса то на первой ; у него запрос заканчивается
...
Рейтинг: 0 / 0
Триггер
    #34366911
Фотография Burzum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где пытаетесь создать триггер? Вместо
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE TRIGGER from_game_to_operation 
  before INSERT 
  ON game_history 
  FOR EACH ROW 
  BEGIN 
  set new.hits =  10 
  END;
попробуйте
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
DELIMITER $$
DROP TRIGGER from_game_to_operation $$
CREATE TRIGGER from_game_to_operation  BEFORE INSERT on game_history
FOR EACH ROW BEGIN
	SET NEW.hits= 10 ;
END$$
DELIMITER ;
И перед названиями полей в теле триггера ставьте OLD или NEW.
...
Рейтинг: 0 / 0
Триггер
    #34366997
ksusha_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
запросы пишу в phpAdmin-е

если убрать begin и end, то сработал

Код: plaintext
1.
2.
3.
4.
CREATE TRIGGER `from_game_to_operation` 
BEFORE INSERT ON game_history
FOR EACH
ROW SET new.hits = 0 ;
и
Код: plaintext
1.
2.
3.
4.
CREATE TRIGGER from_game_to_operation 
AFTER INSERT  ON game_history
FOR EACH ROW
INSERT INTO account_operation VALUES ('', now( ) ,  3 , NEW.bet, NEW.user_id);

помогите вот этот доделать
[src]
CREATE TRIGGER from_game_to_operation AFTER INSERT ON game_history
FOR EACH ROW
INSERT INTO account_operation VALUES ('', now( ) , 3, new.bet, new.user_id)
IF( new.payout >0 ) THEN
INSERT INTO account_operation VALUES ('', now( ) , 4, new.payout, new.user_id)
END IF

MySQL said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'insert into account_operation values('',now(),3,new.bet,new.user_id)
IF (ne' at line 5
...
Рейтинг: 0 / 0
Триггер
    #34367040
ksusha_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
DELIMITER $$ DROP TRIGGER from_game_to_operation $$ CREATE TRIGGER from_game_to_operation BEFORE INSERT ON game_history
FOR EACH
ROW BEGIN
SET NEW.hits = 10 ;
MySQL said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$
DROP TRIGGER from_game_to_operation $$
CREATE TRIGGER from_game_t' at line 1

и я ж написала, он обрубает запрос после первой запятой
...
Рейтинг: 0 / 0
Триггер
    #34367143
ksusha_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TRIGGER from_game_to_operation 
  AFTER INSERT 
  ON game_history 
  FOR EACH ROW 
    IF (NEW.payout> 0 ) 
    THEN 
      insert into account_operation values('',now(), 4 ,NEW.payout,NEW.user_id)
    END IF

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'insert into account_operation values('',now(),4,NEW.payout,NEW.user_id)
END' at line 6

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE TRIGGER from_game_to_operation 
  AFTER INSERT 
  ON game_history 
  FOR EACH ROW 
  insert into account_operation values('',now(), 3 ,NEW.bet,NEW.user_id)
  insert into account_operation values('',now(), 4 ,NEW.payout,NEW.user_id)
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'insert into account_operation values('',now(),3,NEW.bet,NEW.user_id)
insert i' at line 5

по отдельности
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE TRIGGER from_game_to_operation 
  AFTER INSERT 
  ON game_history 
  FOR EACH ROW 
  insert into account_operation values('',now(), 3 ,NEW.bet,NEW.user_id)
[src]
и
CREATE TRIGGER from_game_to_operation
AFTER INSERT
ON game_history
FOR EACH ROW
insert into account_operation values('',now(),4,NEW.payout,NEW.user_id)
[src]
эти запросы работают
мне кажется все дело в этих "точках с запятыми"
как сделать чтоб он не считал их концом запроса
...
Рейтинг: 0 / 0
Триггер
    #34367150
Фотография Burzum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
DELIMITER $$

DROP TRIGGER from_game_to_operation $$

CREATE TRIGGER from_game_to_operation AFTER INSERT on game_history
FOR EACH ROW BEGIN
    insert into account_operation values('', now( ) ,  3 , new.bet, new.user_id); 
    IF (new.payout> 0 ) THEN 
      insert into account_operation values('', now( ) ,  4 , new.payout, new.user_id); 
    END IF;
END$$

DELIMITER ;

DELIMITER $$ - теперь вместо ; разделителем является $$, в конце меняем обратно на ;
Грубо говоря это нужно для того, чтобы всё тело CREATE TRIGGER воспринималось как одно выражение, а не делилось на несколько, разделённых точкой с запятой.
...
Рейтинг: 0 / 0
Триггер
    #34367165
ksusha_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
DELIMITER $$ DROP TRIGGER from_game_to_operation $$ CREATE TRIGGER from_game_to_operation AFTER INSERT ON game_history
FOR EACH
ROW BEGIN
INSERT INTO account_operation VALUES ('', now( ) ,  3 , new.bet, new.user_id);
MySQL said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$ DROP TRIGGER from_game_to_operation $$ CREATE TRIGGER from_ga' at line 1
...
Рейтинг: 0 / 0
Триггер
    #34367182
ksusha_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не совсем знаю, что это такое DELIMITER
но видела в примерах
я пробывала
и DELIMITER ||
и DELIMITER |
и DELIMITER $$
результат один и тот же

ну у всех же работает, ну почему у меня не работает ;-(
...
Рейтинг: 0 / 0
Триггер
    #34367369
ksusha_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а еще те тригерры что создались все-таки без ошибки
получается что когда я делаю Insert в account operation в account_operation тоже должна повится запись - запись не появляется
...
Рейтинг: 0 / 0
Триггер
    #34367476
Фотография Burzum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запутался, что теперь не так.
Триггер, который я привёл добавился в БД?
Вот этим должно начинаться и заканчивать любое добавление триггера.
Код: plaintext
1.
2.
3.
DELIMITER $$

DELIMITER ;

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
//меняем разделитель операторов на $$
DELIMITER $$
//удаляем старый вариант триггера перед вставкой нового варианта
DROP TRIGGER from_game_to_operation $$
//Заголовок триггера, описываем здесь название триггера, когда он выполняется и название таблицы, на которую он вешается
CREATE TRIGGER from_game_to_operation AFTER INSERT on game_history
FOR EACH ROW 
BEGIN
//тело триггера, здесь операторы разделяются точкой с запятой.
    insert into account_operation values('', now( ) ,  3 , new.bet, new.user_id); 
    IF (new.payout> 0 ) THEN 
      insert into account_operation values('', now( ) ,  4 , new.payout, new.user_id); 
    END IF;
//конец тела триггера. После END ставишь тот разделитель, который описала выше. В нашем случае это $$. 
//Если бы ты писала вместо DELIMITER $$ в первой строчке DELIMITER ||, то заканчивать надо тело цикла надо END ||.
END$$
//меняем разделитель операторов на точку с запятой
DELIMITER ;
...
Рейтинг: 0 / 0
Триггер
    #34367547
Фотография Burzum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишем в первой строчке DELIMITER $$
MySQL читает ту кучу операторов, которую ты написала. Когда он натыкается на $$ он выполняет эту кучку. Т.е. первой кучкой будет:
Код: plaintext
DROP TRIGGER from_game_to_operation $$
MySQL выполняет её.
Второй кучкой будет:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE TRIGGER from_game_to_operation AFTER INSERT on game_history
FOR EACH ROW 
BEGIN
    insert into account_operation values('', now( ) ,  3 , new.bet, new.user_id); 
    IF (new.payout> 0 ) THEN 
      insert into account_operation values('', now( ) ,  4 , new.payout, new.user_id); 
    END IF;
END$$
Смысл DELIMITER $$ в том, чтобы, находя $$, разделять между собой эти кучки, потому что во второй кучке содержится большое количество операторов, но воспринимать MySQL их должен как единую команду, т.е. создать триггер со всеми операторами, которые в нём написаны.
...
Рейтинг: 0 / 0
Триггер
    #34367564
Фотография Burzum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм... кучку... штучку... пойду-ка ещё съем NESTLE FOR MEN
...
Рейтинг: 0 / 0
Триггер
    #34367580
ksusha_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот так вот сработало - ура! вы супер! спасибо что столько времени провазились со мной

mysql> CREATE TRIGGER from_game_to_operation AFTER INSERT on game_history FOR EA
CH ROW BEGIN insert into account_operation values('', now( ) , 3, new.bet, new.u
ser_id); IF (new.payout>0) THEN insert into account_operation values('',
now( ) , 4, new.payout, new.user_id); END IF; END$$

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

спасибо большое
...
Рейтинг: 0 / 0
Триггер
    #34367665
Фотография Burzum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не за что, был бы занят по горло, не возился бы.
Советоваю вместо командной строки и phpAdmin использовать что-нибудь наподобие SQLyog'а. Упростит жизнь намного.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Триггер
    #39781454
А если не писать ";" компилятор ругается и требует ее, а если написать то ругается на нее!
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Триггер
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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