2009-07-09 76 views
14

Tập lệnh MySQL này cài đặt nhiều trình kích hoạt.MySQL DELIMITER lỗi cú pháp

Nó hoạt động trên một máy chạy MySQL 5.0.51b-cộng đồng. Trên một máy khác chạy MySQL 14.12 Distrib 5.0.45, cho redhat-linux-gnu (i386) nó không thành công, với thông báo lỗi này, mà dường như liên quan đến DELIMITER // ... // DELIMITER; cú pháp:

ERROR 1064 (42000) tại dòng 272: Bạn có lỗi trong cú pháp SQL; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp đúng để sử dụng gần 'DELIMITER; DROP TRIGGER NẾU EXISTS trigger_name; DELIMITER' tại dòng 1

Cú pháp kịch bản (tóm tắt) là:

DROP TRIGGER IF EXISTS trigger_name; 
DELIMITER // 
CREATE TRIGGER trigger_name BEFORE UPDATE ON table 
FOR EACH ROW BEGIN 
    -- Trigger logic goes here 
END // 
DELIMITER; 

-- More trigger drop/create statements follow 

Điều gì là sai với kịch bản, và làm thế nào tôi có thể sửa chữa nó?

Trả lời

22

Hãy thử

DELIMITER ; 

không

DELIMITER; 

Bạn đang thực sự xác định ; như một tham số cho lệnh DELIMITER, vì vậy không có không gian có thể có nhầm lẫn nó.

+0

Tôi đã không nhận ra rằng, nhờ giải thích :) – Sophia

4

Bạn cần khoảng cách giữa 'DELIMITER' và ';'

DELIMITER ; 
# not: 
DELIMITER; 
0

Hmm Tôi gặp sự cố tương tự. Tôi làm một mysqldump từ Debian Lenny chạy 5.0.51 và thử nhập vào OpenSolaris chạy 5.0 và nhận được lỗi tương tự. Và tôi có DELIMITER;

Xung đột phiên bản?

+0

Dường như có liên quan đến phiên bản dành cho chúng ta, một phiên bản làm việc không có dấu chấm phẩy, một làm việc chỉ với một dấu chấm phẩy, và một người khác yêu cầu dấu chấm phẩy và không có dấu cách. – Sophia

2

Cũng giống như một add-on, cho người khác:

Delimiter là cần thiết để cho phép toàn bộ định nghĩa được truyền đến máy chủ như một tuyên bố duy nhất.

0

Hãy thử bên dưới.

Tôi chắc chắn nó sẽ giải quyết được mục đích.

DELIMITER + 
CREATE TRIGGER STUDENT_INSERT_TRIGGER BEFORE INSERT ON FSL_CONNECTIONS 
FOR EACH ROW BEGIN 
INSERT INTO STUDENT_AUDIT 
SET STUDENT_ID = NEW.STUDENT_ID, 
MAC_ADDRESS = NEW.MAC_ADDRESS, 
IPADDRESS = NEW.IPADDRESS, 
EMAIL_ID = NEW.EMAIL_ID , 
START_TIME=NEW.START_TIME, 
END_TIME=NEW.END_TIME, 
STATUS=NEW.STATUS; 
END; + 

Từ trên khi chúng tôi sử dụng DELIMITER. Nó phải ở trong hình thức

DELIMITER + 
-- 
BLOCK OF SQL WHATEVER YOU WANT TO MENTION 
-- 
+ 
1

Trong phiên bản của MySql tôi sử dụng cùng một lỗi xảy ra khi sử dụng lệnh delimiter, nhưng phiên bản này xử lý các dấu phân cách "" cho báo cáo và dấu phân tách "|" cho các thủ tục và chức năng được lưu trữ, mà tôi nghĩ là giải quyết được vấn đề; thử này:

DROP TRIGGER IF EXISTS trigger_name;

CREATE TRIGGER trigger_name BEFORE UPDATE ON table FOR EACH ROW BEGIN -- Trigger logic goes here END |

-- other statements or functions here

+0

Phiên bản nào sẽ là? –