日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

入门 | 使用 SQL 构建一个关系数据库比你想的更容易

發布時間:2025/3/15 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 入门 | 使用 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 构建一个关系数据库比你想的更容易的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。