 |
[PHP]
อีกปัญหาของ MySQL กะ trigger คับ CREATE TABLE test1(a1 INT); CREATE TABLE test2(a2 INT); |
|
 |
|
|
 |
 |
|
CREATE TABLE test1(a1 INT);
CREATE TABLE test2(a2 INT);
คือผมเขียน code ตามนี้นะคับ
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE test4(
a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
b4 INT DEFAULT 0
);
DELIMITER |
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END
|
DELIMITER ;
INSERT INTO test3 (a3) VALUES
(NULL), (NULL), (NULL), (NULL), (NULL),
(NULL), (NULL), (NULL), (NULL), (NULL);
INSERT INTO test4 (a4) VALUES
(0), (0), (0), (0), (0), (0), (0), (0), (0), (0);
เมื่อผม run แล้วเจอปัญหาดังนี้คับ
1. DELIMITER | , | และ DELIMITER ; มันบอกว่าเป็นเครื่องหมายที่ไม่รู้จักคับ (ตามตัวสีแดง)
2. เมื่อผมลองลบ 3 บรรทัดนั้นไปแล้ว ปัญหาจะไปอยู่ที่ semicolon แทน
เมื่อผมใส่ semicolon ตาม code นี้ จะขึ้น error ดังนี้คับ
#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 test2 SET a2 = NEW.a1' at line 3
แต่ถ้าผมลบ semicolon ทั้ง 3 ตัวตามตัวสีแดงจะแสดง error ดังนี้คับ
#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 test2 SET a2 = NEW.a1
อยากรบกวนผู้รู้ทั้งหลายช่วยชี้แนะด้วยคับ
ขบคุณล่วงหน้าคับ

Tag : - - - -
|
|
 |
 |
 |
 |
Date :
16 พ.ย. 2548 05:45:16 |
By :
nut_t02 |
View :
8213 |
Reply :
15 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
โทษคับ error สีส้ม แบบเต็มๆ ดังนี้คับ
#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 test2 SET a2 = NEW.a1 DELETE FROM test3 WHERE a3 = NEW.a1 ' at line 3
|
 |
 |
 |
 |
Date :
16 พ.ย. 2548 05:48:17 |
By :
nut_t02 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
รู้สึกคำสั่ง sql จะพิมพ์ไม่ถูก การสร้างตาราง ตรง int ที่เคยทำต้องกำหนดขนาดด้วยนะครับ ส่วนตัวอื่น
ลองรัน ดูทีละตัวครับแก้ทีละข้อดีกว่า 
|
 |
 |
 |
 |
Date :
16 พ.ย. 2548 14:01:19 |
By :
ป่าไผ่ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เอ่อ ถ้าเราไม่กำหนดขนาดของ int มันจะกำหนดให้เป็นค่าสูงสุดโดยอัตโนมัติ คือ 11 คับ
แต่ถ้าเป็น varchar เราต้องกำหนด คับ
ที่ผมติดคือ trigger อย่างเดียวอ่ะคับ
|
 |
 |
 |
 |
Date :
16 พ.ย. 2548 17:53:16 |
By :
nut_t02 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมแก้แล้วใส่อยางนี้ ไม่มีปัญหาเลย
====================================
Drop Table If Exists `test1`;
CREATE TABLE test1(a1 INT);
Drop Table If Exists `test2`;
CREATE TABLE test2(a2 INT);
Drop Table If Exists `test3`;
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
Drop Table If Exists `test4`;
CREATE TABLE test4(
a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
b4 INT DEFAULT 0
);
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END;
INSERT INTO test3 (a3) VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
INSERT INTO test4 (a4) VALUES (0),(0),(0),(0),(0),(0);
====================================================
|
 |
 |
 |
 |
Date :
16 พ.ย. 2548 18:05:23 |
By :
JezusMitsui |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ใส่ ; (semicolon) หลัง End นะ
|
 |
 |
 |
 |
Date :
16 พ.ย. 2548 18:06:28 |
By :
JezusMitsui |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้าคุณ nut_02 ใช้ mysql_front รัน หรือเปล่าครับ
ผมคิดว่า Error น่าจะเกิกจากการที่ mysql_front ไม่รู้จัก Delimiter มากกว่านะครับ
ผมรันใน Mysql Query Browser มันก็ผ่านนะ ตามที่คุณนัท post ข้างบนนะ แต่ถ้ารันใน mysql front มันก็ Error อย่างที่คุณบอก
|
 |
 |
 |
 |
Date :
16 พ.ย. 2548 18:12:51 |
By :
JezusMitsui |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เมื่อไร MySql Query Browser จะมี GUI ทำ Trigger ซะทีนะ ขอให้ พัฒนาเร็วๆๆ เรา รอท่านอยู่ อิอิ
สร้าง Trigger ใน MySql Query Browser เสร็จ แล้วจะดู Trigger ที่เราสร้างก็มองไม่เหง ต้องไปดูที่ Mysql Front TT
|
 |
 |
 |
 |
Date :
16 พ.ย. 2548 18:30:30 |
By :
JezusMitsui |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เอ่อ แล้วผมใช้ phpmyadmin ในการเขีย trigger ได้ป่าวคับ
|
 |
 |
 |
 |
Date :
16 พ.ย. 2548 18:31:58 |
By :
nut_t02 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
สงสัยน่าจะไม่ได้เพราะว่า
ผม copy code ของคุณ JezusMitsui ไป แล้วมันก็ error ที่เดิมอ่าคับ คือ ตรง trigger
เหมือน phpmyadmin มันไม่หนับหนุน compound statement ที่ใช้
BEGIN กับ END คร่อม หรือป่าวคับ
error ดังนี้คับ
ผิดพลาด
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH
ROW BEGIN
INSERT INTO test2
SET a2 = NEW.a1
MySQL แสดง:
#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 test2 SET a2 = NEW.a1' at line 3
เอ่อรบกวนอีกทีนะคับ
|
 |
 |
 |
 |
Date :
16 พ.ย. 2548 18:38:07 |
By :
nut_t02 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เออ ก็ลองรันดูซิครับ *-* ผมยังไม่เคยลองเลย เดี๋ยวลองดู
|
 |
 |
 |
 |
Date :
16 พ.ย. 2548 18:40:30 |
By :
JezusMitsui |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ลองแล้วมันขึ้น error อย่างที่แสดงไว้ข้างบนอ่ะคับ
|
 |
 |
 |
 |
Date :
16 พ.ย. 2548 18:46:09 |
By :
nut_t02 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อืม ผมก็ไม่ได้เหมือนกัน เหอๆๆๆ
สงสัยต้องรัน บน MySql Query Browser 555+
|
 |
 |
 |
 |
Date :
16 พ.ย. 2548 19:10:51 |
By :
JezusMitsui |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แต่ลองทำตามที่คุณ JezusMitsui บอกไว้ให้ใช้
MySQL query browser เขียน trigger
MySQL Front ดู/แก้ไข trigger ก็ โอเคอยู่อ่ะคับ
ยังงัยขอบคุณมากนะคับ
แต่เด๋วผมว่าผมมีเรื่องถามอีกแน่ๆ เลย
เพราะผมต้องใช้ stored procedure กะ trigger ง่ะคับ
ยังงัยเด่วขอแวบไปลอยกระทงก่อนนะคับ
สบายใจแระ clear ไปส่วนนึง
แต่ที่จริงก็อยากจะใช้ phpMyAdmin ให้คุ้ม ซะหน่อยเลยไม่ได้ใช้เลย
|
 |
 |
 |
 |
Date :
16 พ.ย. 2548 19:43:52 |
By :
nut_t02 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ปัญหาเวลา INSERT INTO แบบนี้ ( ปัญหาโลกแตก )
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
วิธีแก้
อธิบายก่อนนะครับ คือมันบอกให้เราตรวจสอบการเขียน ให้เปิดดูคู่มือ แต่จริง ๆ ไม่ใช่ มันได้ได้เป็นที่ คำสั่ง
INSERT INTO เลย ปัญหามันคือ เป็นที่ฐานข้อมูลเรา
ลองตรวจสอบดูว่า ชื่อฐานข้อมูล ชื่อตาราง ชื่อฟิลล์ มันตรงกับคำ สงวนที่ห้ามใช้หรือเปล่า เช่น teble ห้ามใช้
เราก็เปลี่ยนใหม่ซะ เป็น teble_001 ก็ได้
***************************** เด็ก ป.6 ************************************************
|
 |
 |
 |
 |
Date :
2010-02-22 14:11:08 |
By :
ta |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ใช้ import จากไฟล์ ก็น่าจะได้ เออเร่อร์มันแจ้งอะไรครับ ไม่เห็นบอก
create ตาราง cars ขึ้นมาก่อน
ข้อมูลมันเป็น utf8 ก็เซท collation เป็น utf8_unicode_ci หรือ utf8_general_ci ไว้ด้วย
คลิกที่ตาราง cars ถ้ามีอยู่แล้ว(select database) ต่อด้วย import จาก ไฟล์
ตารางที่เก็บ tis-620 น่ะเลิกใช้ได้แล้ว front ต่างๆ มัน suport thai เกือบหมดแล้ว
ไม่ได้ดูถูกหัวคิดคนไทยหรอกนะ แต่แค่การจัดเรียงและนำเสนอ เอาที่มันเป็นมาตรฐาน ดีกว่าไหม
สมอ. เป็นหน่วยงาน รัฐบาล ทำงานกำหนดมาตรฐาน IT
แต่น่าจะไปอยู่หน่ายงาน พิพิธภัณฑ์มากกว่า
|
ประวัติการแก้ไข 2016-03-31 07:45:49
 |
 |
 |
 |
Date :
2016-03-31 07:22:49 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|