Mysql

將新記錄添加到目前表時創建新表的 SQL 觸發器

  • June 12, 2020

自從我從事數據庫工作以來已經有好幾年了。我正在使用 mysql 工作台(使用 MS Access 作為前端)。

我有一個要進行多重連結的基表(基本上是名稱索引類型的東西)。通過表單更新表(添加了一條記錄),我希望該新記錄觸發一個創建表的事件,並且該表根據使用者在表單/記錄中輸入的內容命名。

關於如何做到這一點的任何想法?您推薦閱讀的好教程/文件?謝謝!

第一件事

你會用這個來為每個 id 創建特殊的表 Name 和你必須添加的表

DELIMITER $$

CREATE TRIGGER after_table_insert
AFTER INSERT
ON tabl1 FOR EACH ROW
BEGIN
   SET @sql = CONCAR("CREATE TABLE table_",NEW.name,"_",NEW.ID, " (id INT,name TEXT)");
   PREPARE stmt1 FROM @sql;
   EXECUTE stmt1;
   DEALLOCATE PREPARE stmt1;
END$$

DELIMITER ;

如果你有一張適合所有人的桌子

CREATE TABLE Table1_companion
( id BIGINT AUTO_INCREMENT PRIMARY KEy
, Refid  INTEGER
,col1 TEXT
,col2 TEXT
,FOREIGN KEY (Refid) REFERENCES tavle1(id));

所以你有了

SELECT t1.*,t2.* FROM table1 t1 INNER JOIN Table1_companion t2 ON t1.id = t2.Refid;

當你有一個:m 關係

你需要兩張桌子

CREATE TABLE Table1_companion
( tc_id BIGINT AUTO_INCREMENT PRIMARY KEy
,col1 TEXT
,col2 TEXT);

CREATE TABLE Table1_relation
(
, Ref_id  INTEGER
, Ref_tc_id   BIGINT
,FOREIGN KEY (Ref_id) REFERENCES table1(id)
,FOREIGN KEY (Ref_tc_id) REFERENCES Table1_companion(tc_id ));

當然,您需要兩個連接。

你可以看看標準化。

這樣你就有了一個關係數據庫,它適用於每個 rdms。

這當然只是一個基本的想法,你必須有自己的數據類型和外鍵需要雙方相同的數據類型,並且永遠記住每個資訊在你的數據庫中只有一次

引用自:https://dba.stackexchange.com/questions/268994