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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時間:2025/3/15 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 入门 | 使用 SQL 构建一个关系数据库比你想的更容易 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

導(dǎo)讀:使用 SQL 構(gòu)建數(shù)據(jù)庫比大多數(shù)人想象得要簡單。實際上,你甚至不需要成為一個有經(jīng)驗的程序員就可以使用 SQL 創(chuàng)建數(shù)據(jù)庫。在本文中,我將解釋如何使用 MySQL 5.6 來創(chuàng)建簡單的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDMS)。



在開始之前,我想順便感謝一下?SQL Fiddle,這是我用來運行腳本的工具。它提供了一個用于測試簡單腳本的有用的沙箱。


在本教程中,我將構(gòu)建一個使用如下實體關(guān)系圖(ERD)中顯示的簡單架構(gòu)的數(shù)據(jù)庫。數(shù)據(jù)庫列出了學(xué)生和正在學(xué)習(xí)的課程。為了保持簡單,我使用了兩個實體(即表),只有一種關(guān)系和依賴。這兩個實體稱為?dbo_students??dbo_courses



數(shù)據(jù)庫的多樣性是一對多的,因為每門課程可以包含很多學(xué)生,但每個學(xué)生只能學(xué)習(xí)一門課程。

關(guān)于術(shù)語的快速說明:


  • 一張表稱為一個實體。

  • 一個字段稱為一個屬性。

  • 一條記錄稱為一個元組。

  • 用于構(gòu)建數(shù)據(jù)庫的腳本稱為架構(gòu)。



01 構(gòu)建架構(gòu)


要構(gòu)建數(shù)據(jù)庫,使用?CREATE TABLE <表名>?命令,然后定義每個字段的名稱和數(shù)據(jù)類型。數(shù)據(jù)庫使用?VARCHAR(n)?(字符串)和?INT(n)?(整數(shù)),其中?n?表示可以存儲的值的長度。例如?INT(2)?可以是?01


這是用于創(chuàng)建兩個表的代碼:


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?意味著當(dāng)一個新的元組被添加時,ID 號將自動生成,是對先前存儲的 ID 號加 1,以強化各實體之間的完整參照性。?PRIMARY KEY?是每個表的惟一標識符屬性。這意味著每個元組都有自己的不同的標識。



02 關(guān)系作為一種約束


就目前來看,這兩張表格是獨立存在的,沒有任何聯(lián)系或關(guān)系。要連接它們,必須標識一個外鍵。在?dbo_students?中,外鍵是?course_studied,其來源在?dbo_courses中,意味著該字段被引用。SQL 中的特定命令為?CONSTRAINT,并且將使用另一個名為?ALTER TABLE?的命令添加這種關(guān)系,這樣即使在架構(gòu)構(gòu)建完畢后,也可以編輯表。

以下代碼將關(guān)系添加到數(shù)據(jù)庫構(gòu)造腳本中:


ALTER?TABLE?dbo_students
ADD?CONSTRAINT?FK_course_studied
FOREIGN?KEY?(course_studied)?REFERENCES?dbo_courses(course_id);


使用?CONSTRAINT?命令實際上并不是必要的,但這是一個好習(xí)慣,因為它意味著約束可以被命名并且使維護更容易。現(xiàn)在數(shù)據(jù)庫已經(jīng)完成了,是時候添加一些數(shù)據(jù)了。



03 將數(shù)據(jù)添加到數(shù)據(jù)庫


INSERT INTO <表名>?是用于直接選擇要添加哪些屬性(即字段)數(shù)據(jù)的命令。首先聲明實體名稱,然后聲明屬性,下邊是添加到實體的數(shù)據(jù),從而創(chuàng)建一個元組。如果指定了?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);


現(xiàn)在數(shù)據(jù)庫架構(gòu)已經(jīng)完成并添加了數(shù)據(jù),現(xiàn)在是時候在數(shù)據(jù)庫上運行查詢了。



04 查詢


查詢遵循使用以下命令的集合結(jié)構(gòu):


SELECT?<attributes>
FROM?<entity>
WHERE?<condition>



要顯示?dbo_courses?實體內(nèi)的所有記錄并顯示課程代碼和課程名稱,請使用?*?。這是一個通配符,它消除了鍵入所有屬性名稱的需要。(在生產(chǎn)數(shù)據(jù)庫中不建議使用它。)此處查詢的代碼是:


SELECT?*
FROM?dbo_courses


此處查詢的輸出顯示表中的所有元組,因此可顯示所有可用課程:


|?course_id?|?? ? ? ? ?course_name?|
|-----------|----------------------|
|?? ? ? ??1?|?Software Engineering?|
|?? ? ? ??2?|?? ? Computer Science?|
|?? ? ? ??3?|?? ? ? ? ? ?Computing?|


在后面的文章中,我將使用三種類型的連接之一來解釋更復(fù)雜的查詢:內(nèi)連接、外連接和交叉連接。


這是完整的腳本:


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 學(xué)習(xí)更多


SQL 并不困難;我認為它比編程簡單,并且該語言對于不同的數(shù)據(jù)庫系統(tǒng)是通用的。 請注意,實體關(guān)系圖中?dbo.<實體>?(LCTT 譯注:文章中使用的是?dbo_<實體>)不是必需的實體命名約定;我之所以使用,僅僅是因為它是 Microsoft SQL Server 中的標準。


如果你想了解更多,在網(wǎng)絡(luò)上這方面的最佳指南是?W3Schools.com?中對所有數(shù)據(jù)庫平臺的 SQL 綜合指南。請隨意使用我的數(shù)據(jù)庫。


作者:Aaron Cocker

譯者:MjSeven

來源:Linux中國(ID:linux-cn)

原文:https://opensource.com/article/18/2/getting-started-sql


推薦閱讀


日本老爺爺堅持17年用Excel作畫,我可能用了假的Excel···

看完此文再不懂區(qū)塊鏈算我輸:手把手教你用Python從零開始創(chuàng)建區(qū)塊鏈

為什么要學(xué)數(shù)學(xué)?因為這是一場戰(zhàn)略性的投資

180頁PPT,講解人工智能技術(shù)與產(chǎn)業(yè)發(fā)展



Q:?SQL你玩得666嗎?

歡迎留言與大家分享

覺得不錯,請把這篇文章分享給你的朋友

轉(zhuǎn)載 / 投稿請聯(lián)系:baiyu@hzbook.com

更多精彩文章,請在公眾號后臺點擊“歷史文章”查看

總結(jié)

以上是生活随笔為你收集整理的入门 | 使用 SQL 构建一个关系数据库比你想的更容易的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。