Tôi đã gặp phải vấn đề tương tự ngày hôm nay, mọi trình kích hoạt đều gây ra việc vượt quá ngăn xếp. Hóa ra cài đặt Máy chủ cộng đồng Zend của tôi đi kèm với tệp my.cnf mặc định trong đó kích thước thread_stack được đặt thành 128K, dẫn đến 131072 byte có sẵn cho ngăn xếp trong mỗi luồng:
mysql> show variables where `Variable_name` = 'thread_stack';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| thread_stack | 131072 |
+---------------+--------+
Vì vậy, tôi đã nhận xét dòng trong /usr/local/zend/mysql/data/my.cnf, khởi động lại daemon mysql và thì đấy! mặc định 192K là
mysql> show variables where `Variable_name` = 'thread_stack';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| thread_stack | 196608 |
+---------------+--------+
Bây giờ trình kích hoạt bảng &tchester của bạn hoạt động hoàn hảo :) (mặc dù vậy hãy lưu ý dấu phân cách)
mysql> CREATE TABLE `job_title` (
-> `job_id` int(11) NOT NULL AUTO_INCREMENT,
-> `position_id` int(11) DEFAULT NULL,
-> `title` varchar(255) COLLATE latin1_general_cs NOT NULL,
-> `selectable` tinyint(4) NOT NULL DEFAULT '0',
-> PRIMARY KEY (`job_id`),
-> UNIQUE KEY `title` (`title`)
-> ) ENGINE=InnoDB;
Query OK, 0 rows affected (0.14 sec)
mysql> DELIMITER &&
mysql> create trigger job_position_trigger
-> before insert on job_title for each row
-> begin
-> if new.position_id is null then
-> set @position = (select max(position_id)+1 from job_title);
-> if @position is null then set @position = 1; end if;
-> set new.position_id = @position;
-> end if;
-> end;
-> &&
Query OK, 0 rows affected (0.29 sec)
mysql> DELIMITER ;
mysql> insert into job_title (title, selectable) values ("test", 1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into job_title (title, selectable) values ("test2", 3);
Query OK, 1 row affected (0.00 sec)
mysql> select * from job_title;
+--------+-------------+-------+------------+
| job_id | position_id | title | selectable |
+--------+-------------+-------+------------+
| 1 | 1 | test | 1 |
| 2 | 2 | test2 | 3 |
+--------+-------------+-------+------------+
2 rows in set (0.00 sec)
Lỗi bạn gặp phải, 9024 byte được sử dụng trong ngăn xếp 131072 byte và 128000 byte cần thiết, có ý nghĩa:9024 + 128000> 131072.