入门 | 使用 SQL 构建一个关系数据库比你想的更容易
導讀:使用 SQL 構建數據庫比大多數人想象得要簡單。實際上,你甚至不需要成為一個有經驗的程序員就可以使用 SQL 創建數據庫。在本文中,我將解釋如何使用 MySQL 5.6 來創建簡單的關系型數據庫管理系統(RDMS)。
在開始之前,我想順便感謝一下?SQL Fiddle,這是我用來運行腳本的工具。它提供了一個用于測試簡單腳本的有用的沙箱。
在本教程中,我將構建一個使用如下實體關系圖(ERD)中顯示的簡單架構的數據庫。數據庫列出了學生和正在學習的課程。為了保持簡單,我使用了兩個實體(即表),只有一種關系和依賴。這兩個實體稱為?dbo_students?和?dbo_courses。
數據庫的多樣性是一對多的,因為每門課程可以包含很多學生,但每個學生只能學習一門課程。
關于術語的快速說明:
一張表稱為一個實體。
一個字段稱為一個屬性。
一條記錄稱為一個元組。
用于構建數據庫的腳本稱為架構。
01 構建架構
要構建數據庫,使用?CREATE TABLE <表名>?命令,然后定義每個字段的名稱和數據類型。數據庫使用?VARCHAR(n)?(字符串)和?INT(n)?(整數),其中?n?表示可以存儲的值的長度。例如?INT(2)?可以是?01。
這是用于創建兩個表的代碼:
CREATE?TABLE?dbo_students
(
? student_id?INT(2)?AUTO_INCREMENT?NOT?NULL,
? student_name?VARCHAR(50),
? course_studied?INT(2),
??PRIMARY?KEY?(student_id)
);
CREATE?TABLE?dbo_courses
(
? course_id?INT(2)?AUTO_INCREMENT?NOT?NULL,
? course_name?VARCHAR(30),
??PRIMARY?KEY?(course_id)
);
NOT NULL?意味著字段不能為空,AUTO_INCREMENT?意味著當一個新的元組被添加時,ID 號將自動生成,是對先前存儲的 ID 號加 1,以強化各實體之間的完整參照性。?PRIMARY KEY?是每個表的惟一標識符屬性。這意味著每個元組都有自己的不同的標識。
02 關系作為一種約束
就目前來看,這兩張表格是獨立存在的,沒有任何聯系或關系。要連接它們,必須標識一個外鍵。在?dbo_students?中,外鍵是?course_studied,其來源在?dbo_courses中,意味著該字段被引用。SQL 中的特定命令為?CONSTRAINT,并且將使用另一個名為?ALTER TABLE?的命令添加這種關系,這樣即使在架構構建完畢后,也可以編輯表。
以下代碼將關系添加到數據庫構造腳本中:
ALTER?TABLE?dbo_students
ADD?CONSTRAINT?FK_course_studied
FOREIGN?KEY?(course_studied)?REFERENCES?dbo_courses(course_id);
使用?CONSTRAINT?命令實際上并不是必要的,但這是一個好習慣,因為它意味著約束可以被命名并且使維護更容易。現在數據庫已經完成了,是時候添加一些數據了。
03 將數據添加到數據庫
INSERT INTO <表名>?是用于直接選擇要添加哪些屬性(即字段)數據的命令。首先聲明實體名稱,然后聲明屬性,下邊是添加到實體的數據,從而創建一個元組。如果指定了?NOT NULL,這表示該屬性不能留空。以下代碼將展示如何向表中添加記錄:
INSERT?INTO?dbo_courses(course_id,course_name)
VALUES(001,'Software Engineering');
INSERT?INTO?dbo_courses(course_id,course_name)
VALUES(002,'Computer Science');
INSERT?INTO?dbo_courses(course_id,course_name)
VALUES(003,'Computing');
INSERT?INTO?dbo_students(student_id,student_name,course_studied)
VALUES(001,'student1',001);
INSERT?INTO?dbo_students(student_id,student_name,course_studied)
VALUES(002,'student2',002);
INSERT?INTO?dbo_students(student_id,student_name,course_studied)
VALUES(003,'student3',002);
INSERT?INTO?dbo_students(student_id,student_name,course_studied)
VALUES(004,'student4',003);
現在數據庫架構已經完成并添加了數據,現在是時候在數據庫上運行查詢了。
04 查詢
查詢遵循使用以下命令的集合結構:
SELECT?<attributes>
FROM?<entity>
WHERE?<condition>
要顯示?dbo_courses?實體內的所有記錄并顯示課程代碼和課程名稱,請使用?*?。這是一個通配符,它消除了鍵入所有屬性名稱的需要。(在生產數據庫中不建議使用它。)此處查詢的代碼是:
SELECT?*
FROM?dbo_courses
此處查詢的輸出顯示表中的所有元組,因此可顯示所有可用課程:
|?course_id?|?? ? ? ? ?course_name?|
|-----------|----------------------|
|?? ? ? ??1?|?Software Engineering?|
|?? ? ? ??2?|?? ? Computer Science?|
|?? ? ? ??3?|?? ? ? ? ? ?Computing?|
在后面的文章中,我將使用三種類型的連接之一來解釋更復雜的查詢:內連接、外連接和交叉連接。
這是完整的腳本:
CREATE?TABLE?dbo_students
(
? student_id?INT(2)?AUTO_INCREMENT?NOT?NULL,
? student_name?VARCHAR(50),
? course_studied?INT(2),
??PRIMARY?KEY?(student_id)
);
CREATE?TABLE?dbo_courses
(
? course_id?INT(2)?AUTO_INCREMENT?NOT?NULL,
? course_name?VARCHAR(30),
??PRIMARY?KEY?(course_id)
);
ALTER?TABLE?dbo_students
ADD?CONSTRAINT?FK_course_studied
FOREIGN?KEY?(course_studied)?REFERENCES?dbo_courses(course_id);
INSERT?INTO?dbo_courses(course_id,course_name)
VALUES(001,'Software Engineering');
INSERT?INTO?dbo_courses(course_id,course_name)
VALUES(002,'Computer Science');
INSERT?INTO?dbo_courses(course_id,course_name)
VALUES(003,'Computing');
INSERT?INTO?dbo_students(student_id,student_name,course_studied)
VALUES(001,'student1',001);
INSERT?INTO?dbo_students(student_id,student_name,course_studied)
VALUES(002,'student2',002);
INSERT?INTO?dbo_students(student_id,student_name,course_studied)
VALUES(003,'student3',002);
INSERT?INTO?dbo_students(student_id,student_name,course_studied)
VALUES(004,'student4',003);
SELECT?*
FROM?dbo_courses
05 學習更多
SQL 并不困難;我認為它比編程簡單,并且該語言對于不同的數據庫系統是通用的。 請注意,實體關系圖中?dbo.<實體>?(LCTT 譯注:文章中使用的是?dbo_<實體>)不是必需的實體命名約定;我之所以使用,僅僅是因為它是 Microsoft SQL Server 中的標準。
如果你想了解更多,在網絡上這方面的最佳指南是?W3Schools.com?中對所有數據庫平臺的 SQL 綜合指南。請隨意使用我的數據庫。
作者:Aaron Cocker
譯者:MjSeven
來源:Linux中國(ID:linux-cn)
原文:https://opensource.com/article/18/2/getting-started-sql
推薦閱讀
日本老爺爺堅持17年用Excel作畫,我可能用了假的Excel···
看完此文再不懂區塊鏈算我輸:手把手教你用Python從零開始創建區塊鏈
為什么要學數學?因為這是一場戰略性的投資
180頁PPT,講解人工智能技術與產業發展
Q:?SQL你玩得666嗎?
歡迎留言與大家分享
覺得不錯,請把這篇文章分享給你的朋友
轉載 / 投稿請聯系:baiyu@hzbook.com
更多精彩文章,請在公眾號后臺點擊“歷史文章”查看
總結
以上是生活随笔為你收集整理的入门 | 使用 SQL 构建一个关系数据库比你想的更容易的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北上广年终奖地图
- 下一篇: STM32之RCC原理