MySQL是一個(gè)常用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),其中一對(duì)多關(guān)系是使用最為廣泛的關(guān)系之一。在MySQL中,使用外鍵(FOREIGN KEY)可以實(shí)現(xiàn)一對(duì)多的關(guān)系。
CREATE TABLE `one` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; CREATE TABLE `many` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `one_id` int(11) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`one_id`) REFERENCES `one`(`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
在上面的代碼中,創(chuàng)建了兩張表:one和many。在many表中,one_id列作為外鍵引用了one表中的id列,實(shí)現(xiàn)了一對(duì)多的關(guān)系。
查詢一對(duì)多的結(jié)果可以使用JOIN語(yǔ)句,如下:
SELECT one.name AS name, GROUP_CONCAT(many.name) AS many_names FROM one LEFT JOIN many ON one.id = many.one_id GROUP BY one.id;
在上面的查詢中,使用了LEFT JOIN語(yǔ)句連接了one和many表,在GROUP BY語(yǔ)句上對(duì)結(jié)果進(jìn)行了分組。結(jié)果中包含了one表中的name列以及對(duì)應(yīng)的many表中所有的name列,使用GROUP_CONCAT函數(shù)將多個(gè)結(jié)果合并成一個(gè)字符串。
在實(shí)際開(kāi)發(fā)中,經(jīng)常會(huì)用到一對(duì)多的關(guān)系,比如一個(gè)用戶可以擁有多個(gè)訂單、一個(gè)訂單可以包含多個(gè)商品等等。掌握一對(duì)多關(guān)系在MySQL中的實(shí)現(xiàn)方式,對(duì)于合理的數(shù)據(jù)庫(kù)設(shè)計(jì)和高效的查詢操作,都非常重要。
上一篇jquery cdn