phpMyAdmin:如何插入具有受限列的行?
Posted
技术标签:
【中文标题】phpMyAdmin:如何插入具有受限列的行?【英文标题】:phpMyAdmin: How to insert rows with restricted columns? 【发布时间】:2021-11-20 05:13:04 【问题描述】:我有一个带有自动递增 ID、colA 和 colB(设置默认值)的表,例如:
CREATE TABLE `some_db`.`test` ( `id` INT NOT NULL AUTO_INCREMENT , `colA` INT NOT NULL , `colB` INT NOT NULL DEFAULT '0' , PRIMARY KEY (`id`)) ENGINE = InnoDB;
现在,我希望用户能够插入新行,但同时不允许修改id
(自动递增)或colB
(仅使用默认值)。
这可能吗?
我试图只为 colA 提供 INSERT 和 UPDATE,但这仍然给我 INSERT command denied
错误:
GRANT SELECT, INSERT (`colA`), UPDATE (`colA`) ON `some_db`.`test` TO 'test_user'@'%';
我不知道这是否重要,我正在使用 MariaDB。
谢谢!
编辑: 好的,我现在需要重新陈述我的问题。
执行后例如:
INSERT INTO `test` (`colA`) VALUES (10)
一切正常。 但是 phpmyadmin GUI(我在这里用作前端)正在转换为:
INSERT INTO `test` (`id`, `colA`, `colB`) VALUES (NULL, 10, ``)
...当没有给出值,并且无法执行时(#1143 - INSERT 命令拒绝用户test_user@...
那么,有没有什么方法可以通过 phpmyadmin GUI(不是 SQL 命令)插入行,但有这样的限制?(我编辑了问题标题)。
【问题讨论】:
错误是什么? 但是phpmyadmin GUI(我在这里用作前端)正在转换为不要使用它,有什么问题?使用任何其他客户端。 PS。如果程序没有按照你说的做,而是按照它想出的那样做 - 不要使用这样的程序。 【参考方案1】:CREATE TABLE `test` ( `id` INT NOT NULL AUTO_INCREMENT , `colA` INT NOT NULL , `colB` INT NOT NULL DEFAULT '0' , PRIMARY KEY (`id`)) ENGINE = InnoDB;
CREATE TRIGGER tr_bi_test BEFORE INSERT ON test FOR EACH ROW SET NEW.id = NULL, NEW.colB = 0;
INSERT INTO test (colA) VALUES (11); INSERT INTO test (colA, colB) VALUES (22, 222); INSERT INTO test (id, colA) VALUES (3333, 33); INSERT INTO test (id, colA, colB) VALUES (4444,44,444); SELECT * FROM test;
id colA colB 1 11 0 2 22 0 3 33 0 4 44 0
db小提琴here
您不能使用 DEFAULT
关键字将值分配给 NEW.colB
- 在 MariaDB 中,在触发器中使用时它被视为 NULL。所以你需要硬编码这个默认值,或者你可以从INFORMATION_SCHEMA.COLUMNS
查询。
【讨论】:
有趣。感谢您的努力和看看!请看一下上面的编辑:实际上它正在工作,问题在于 phpMyAdmin @Art 我不使用 phpmyadmin。我也不建议你。 是的,我知道,问题是到目前为止我还没有找到任何简单、免费、易于使用和设置的 GUI 客户端,它允许下拉选择引用键(而不是提供数字IDs) 和 phpMyAdmin 做得很好。我知道这是一件愚蠢的事情,但这就是我现在需要的。以上是关于phpMyAdmin:如何插入具有受限列的行?的主要内容,如果未能解决你的问题,请参考以下文章