Вот потенциальное решение:
Создайте таблицу для хранения значений первичного ключа, которые вы хотите использовать только для чтения:
CREATE TABLE cb_aggregator_content_readonly (
entry_id INT PRIMARY KEY
);
INSERT INTO cb_aggregator_content_readonly SET entry_id = 12345;
Создайте триггеры, чтобы выдать ошибку, если вы попытаетесьобновить или удалить строки с идентификаторами записей, которые должны быть доступны только для чтения:
DELIMITER ;;
CREATE TRIGGER no_upd_content BEFORE UPDATE ON cb_aggregator_content
FOR EACH ROW BEGIN
IF EXISTS(SELECT * FROM cb_aggregator_content_readonly WHERE entry_id = OLD.entry_id) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Please do not update entry ';
END IF;
END;;
CREATE TRIGGER no_del_content BEFORE DELETE ON cb_aggregator_content
FOR EACH ROW BEGIN
IF EXISTS(SELECT * FROM cb_aggregator_content_readonly WHERE entry_id = OLD.entry_id) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Please do not delete entry';
END IF;
END;;
DELIMITER ;
Теперь это должно помешать вам обновить или удалить строки, которые вы хотите сохранить:
mysql> delete from cb_aggregator_content where entry_id = 123;
Query OK, 1 row affected (0.02 sec)
mysql> delete from cb_aggregator_content where entry_id = 12345;
ERROR 1644 (45000): Please do not delete entry
Если вы хотите добавить больше entry_id к набору сохраняемых, просто добавьте больше значений в таблицу cb_aggregator_content_readonly.