Menghadkan Kiraan Baris dalam Jadual MySQL: Melangkaui Petunjuk MAX_ROWS
Walaupun MySQL membenarkan menentukan parameter MAX_ROWS semasa membuat jadual, ia berfungsi sebagai hanya cadangan untuk enjin pangkalan data. Jadual boleh melebihi had ini, menjadikannya tidak berkesan sebagai had mutlak pada kiraan baris.
Untuk penguatkuasaan sebenar kiraan baris maksimum, pendekatan alternatif diperlukan. Satu kaedah sedemikian melibatkan mencipta pencetus SEBELUM INSERT yang menyemak kiraan baris semasa dalam jadual:
DELIMITER $$ CREATE TRIGGER trigger1 BEFORE INSERT ON table1 FOR EACH ROW BEGIN SELECT COUNT(*) INTO @cnt FROM table1; IF @cnt >= 25 THEN CALL sth(); -- raise an error END IF; END $$ DELIMITER ;
Pencetus ini menilai kiraan baris jadual sebelum memasukkan baris baharu. Jika kiraan itu memenuhi atau melebihi had yang dipratentukan (cth., 25), ia mencetuskan ralat, dengan berkesan menghalang sisipan.
Walau bagaimanapun, pendekatan ini boleh memperkenalkan penalti prestasi, terutamanya untuk jadual besar, kerana operasi COUNT boleh menjadi mahal dari segi pengiraan.
MySQL 5.5 memperkenalkan penyataan SIGNAL // RESIGNAL sebagai satu lagi cara untuk menimbulkan ralat. Ini boleh dimasukkan ke dalam pencetus seperti berikut:
CREATE TRIGGER trigger1 BEFORE INSERT ON table1 FOR EACH ROW BEGIN IF 25 <= ROW_COUNT() THEN SIGNAL SQLSTATE '23000' SET MESSAGE_TEXT = 'Table size limit reached.'; // Raise an error END IF; END
Teknik ini menawarkan prestasi yang lebih baik dengan memanfaatkan fungsi COUNT(*) yang dioptimumkan pada jadual InnoDb, meningkatkan kecekapan keseluruhan mekanisme penguatkuasaan kiraan baris.
Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Mengehadkan Kiraan Baris dengan Berkesan dalam Jadual MySQL Melebihi Petunjuk MAX_ROWS?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!