gpt4 book ai didi

mysql - 有什么方法可以将 MySQL 行设置为只读?

转载 作者:行者123 更新时间:2023-11-29 01:34:54 25 4
gpt4 key购买 nike

我已经阅读了这里的所有主题,但没有找到任何简单有效的解决方案来解决我的问题。所以我在 php 脚本上运行站点,该脚本在 10.1.37-MariaDB 上使用数据库。

我有 1 个表,我只需要将几行(从 90k 开始)设置为只读。不再由 php 脚本更新或删除。

所有这些行都有唯一的 entry_id 和数值,比方说 entry_id = 12345

在需要的表中我也有这个:

SELECT * FROM `cb_aggregator_content` ORDER BY `model_last_checked` ASC

尝试添加:

SELECT * FROM `cb_aggregator_content` WHERE `entry_id`=12345 FOR UPDATE;

只有错误。谢谢。

最佳答案

这是一个潜在的解决方案:

创建一个表来存储你想要只读的主键值:

CREATE TABLE cb_aggregator_content_readonly (
entry_id INT PRIMARY KEY
);
INSERT INTO cb_aggregator_content_readonly SET entry_id = 12345;

如果您尝试更新或删除条目 ID 应该是只读的行,则使触发器抛出错误:

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 表即可。

关于mysql - 有什么方法可以将 MySQL 行设置为只读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55550681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com