我正在为我正在建设的社交网站开发MySQL数据库,到目前为止,这是一次很棒的学习经历。然而,有一件事特别让我感到困惑。
在寻找特定问题的答案时,我看到很多例子在MySQL查询的命名约定中使用点。例如:
SELECT c.id, c.comment, c.user_id, u.username, u.photo
FROM (comments c)
JOIN users u ON c.user_id = u.id
WHERE c.topic_id = 9
这是另一个例子:
SELECT fb.auto_id, fb.user_id, fb.bulletin, fb.subject, fb.color, fb.submit_date, fru.disp_name, fru.pic_url
FROM friend_bulletin AS fb
LEFT JOIN friend_friend AS ff ON fb.user_id = ff.userid
LEFT JOIN friend_reg_user AS fru ON fb.user_id = fru.auto_id
WHERE (
ff.friendid =1
AND ff.status =1
)
LIMIT 0 , 30
在名称中使用点有什么特别的好处吗?作为一个来自做大量CSS工作的人,乍一看这些点在我看来是不同事物之间的某种联系,但它们在这里有什么用呢?
我想我只是想通过不使用这个'dot'命名约定来确保我没有使我的数据库结构/查询效率降低。如果有人能够以外行的方式向我解释他们的用途,我真的很感激。
答案 0 :(得分:2)
stuff.whatever
应该被视为table_name.column_name
。您明确地将每个列引用与其所属的表相关联,恕我直言,这是最佳实践。
答案 1 :(得分:1)
你不应该认为这些点是“命名约定”的一部分。该功能更类似于在对象上调用属性。
在stuff.whatever
'东西'的情况下
表示数据库表和
whatever
表示数据库中名为“whatever”的列中的数据。
如果您看到没有表部分引用的列,那是因为用户期望mysql找出它们所代表的列。
如果查询中只有一个表有一个该名称的列,mysql可以做到,没问题。
但是,例如,你有一个“facebook”表和一个“twitter”表,你通过查询加入它们,因为它们都有一个“user_id”列或者其他东西,并且它们都有一个“avatar_image”列和你没有指定表,mysql会引发错误,告诉你它并不确切地知道你要求的是什么。
答案 2 :(得分:0)
使用完整名称约定没有任何问题,但是,如果您有长table
,field
个名称,则出于可读性目的而更容易使用别名。