MySQL 是一種關系型數據庫,它可以支持層次結構。層次結構可以幫助我們在數據中創建一種具有層次關系的結構,例如樹形結構。
CREATE TABLE tree ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(30) NOT NULL, parent_id INT, PRIMARY KEY (id), INDEX par_ind (parent_id), FOREIGN KEY (parent_id) REFERENCES tree(id) );
在這個例子中,我們創建了一個樹形結構。每行數據都有一個 id、name 和 parent_id 字段。id 字段是唯一標識符,可以用來在表中找到每個節點。name 字段是節點的名稱,用于描述每個節點。parent_id 字段表示每個節點的父節點的 id。
我們還在 parent_id 字段上創建了一個索引,這樣 MySQL 就可以在樹中移動數據。
要將新的數據添加到層次結構中,我們可以使用 INSERT 語句,只需要指定節點的 name 和 parent_id 即可:
INSERT INTO tree (name, parent_id) VALUES ('root', NULL); INSERT INTO tree (name, parent_id) VALUES ('child1', 1); INSERT INTO tree (name, parent_id) VALUES ('child2', 1); INSERT INTO tree (name, parent_id) VALUES ('child3', 2);
在這個例子中,我們添加了一個根節點(其 parent_id 字段為 NULL)以及三個子節點。節點 child1 和 child2 都是根節點的子節點,而節點 child3 是節點 child1 的子節點。
要查詢樹形結構中的數據,我們可以使用遞歸查詢語句。
WITH RECURSIVE cte_tree (id, name, parent_id) AS ( SELECT id, name, parent_id FROM tree WHERE parent_id IS NULL UNION ALL SELECT t.id, t.name, t.parent_id FROM tree t INNER JOIN cte_tree c ON t.parent_id = c.id ) SELECT * FROM cte_tree;
這個查詢語句使用了公共表表達式(CTE),它可以幫助我們遞歸查詢樹形結構。注意到第一部分查詢是查詢樹形結構的根節點,而第二部分查詢是查詢每個節點的子節點。這個查詢將返回整個樹形結構。