Ограничитель осветления MySQL

0
 Delimiter$$
    CREATE TRIGGER after_finisher_update
    AFTER UPDATE ON Booklist1
    FOR EACH ROW 
    BEGIN
        UPDATE Booklist1
        SET Finished = 'yes'
        WHERE Current_Page = Page_Count
    END $$  

У меня есть таблица с несколькими столбцами, которая формирует список книг (название, автор... ect). Я хочу, чтобы мой "Законченный" столбец (по умолчанию "нет") переключился на "да" после текущей_страницы = page_count.

  • Может кто-нибудь объяснить, что означает разделитель и какой ограничитель $$ означает?
  • Когда я заканчиваю END $$ (пропущено из кода выше), мой терминал функционирует ненадлежащим образом. Все, что я набираю, просто входит в консоль и возвращается слово в слово, но ничего не делает. Кто-нибудь знает эту ошибку? Я попытался немного разобраться, но ничего не нашел. Это происходит и с другими записями.

Спасибо.

  • 0
    Итак, это проблема самого триггера или чего-то еще, например, консоли, которую вы используете для его отладки?
  • 1
    Я постараюсь, но я могу быть немного не в себе ... MySQL пытается выполнить любую строку кода, которая имеет разделитель в конце. Обычно разделителем является «;». Однако при компиляции процедуры, скажем, вы не хотите, чтобы MySQL выполнял код, пока его компиляция не будет завершена. Итак, вы меняете разделитель на что-то другое. «$$» - популярный выбор.
Показать ещё 3 комментария
Теги:
limit
delimiter
cloud9

1 ответ

0

Использование Mysql ; чтобы отметить конец заявления.

Когда вы определяете процедуру, функцию или триггер, вы собираетесь использовать несколько операторов.

Вам нужно указать mysql, где заканчивается оператор function/procedure/trigger.

if type delimeter// я буду использовать //, чтобы указать конец оператора.

поэтому этот блок:

select now() ;
do sleep(1) ;
select now() ;

могут быть заменены на:

delimiter //
select now() //
do sleep(1) //
select now() //
delimiter ;

Пример создания триггера с использованием $$ в качестве разделителя:

delimiter $$
create trigger trg_table_insert  after insert  on table
for each row
begin
        insert into  table_log ( dml_type , col_a,col_b , col_c ) value ( 'I', new.col_a,new.col_b,new.col_c );
end
$$
delimiter ;

И каждый раз, когда я возвращаю делиметр ; ,

^^^^^^^ вы делаете это, чтобы иметь регулярное поведение mysql.

  • 0
    Я думаю, что понял. Говоря в основном, разделитель $$ сообщает MySQL, что вы собираетесь написать процедуру. После окончания процедуры вы напишите, что вы указали в начале. IE `Delimiter $$ .... .... $$ (это скажет MySQL, что вы заканчиваете процедуру. Все еще не понимаете, почему вы добавили разделитель; в конце, хотя.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню