1
我有一張桌子和相應的視圖。如何防止表列更改如果存在此列的視圖?
CREATE TABLE IF NOT EXISTS `test` (
`id` mediumint(8) unsigned NOT NULL,
`test` tinyint(3) unsigned NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test` (`id`, `test`) VALUES (DEFAULT, 1);
INSERT INTO `test` (`id`, `test`) VALUES (DEFAULT, 2);
CREATE OR REPLACE
ALGORITHM=UNDEFINED SQL SECURITY INVOKER
VIEW `test_view` AS
SELECT `id`, `test` from `test`;
我可以改變表結構,例如:
ALTER TABLE `test` CHANGE `test` `test_renamed` TINYINT(3) UNSIGNED NOT NULL;
和所有未來的查詢,查看將被打破:
SELECT * FROM test_view;
#1356 - View 'test_view' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
如何防止表列,如果視圖中使用它們改變?
更新:我的Percona服務器5.6.32-78.0
<「我通常使用包含所有視圖的腳本在我更改數據庫結構後重新創建它們。」 > 嗯,這聽起來很有趣。也許,我可以拆分遷移工作流並將視圖遷移與常見遷移分開保存。每次執行一次通用遷移或完成遷移過程後執行它們。 – kivagant