目錄
資料庫的介紹
四種基本的SQL 操作(CRUD)
建立資料
读取数据
更新数据
删除数据
结论
首頁 資料庫 mysql教程 PHP開發之程式設計師必掌握的 SQL 指南

PHP開發之程式設計師必掌握的 SQL 指南

Apr 05, 2017 am 11:31 AM

介紹

SQL 已經應用到了我們周圍的各個角落,不管你信不信。操縱任何種類資料的每個應用程式都需要將資料存放在某處。無論它是大數據,還是只有簡單數行的資料包;無論是政府、還是新創公司;無論是橫跨多台伺服器的大型資料庫、或是運行自己小型資料庫的手機,SQL 無所不在。

但是,SQL 是什麼呢? SQL 代表結構化查詢語言,通常,其發音為「ess-que-el」。 SQL 是資料庫語言,專門為了和資料庫通訊而建立的。 SQL 是一門簡單的語言,和英文語言類似,因為指令和英文句子有著類似的結構。那些句子組織為聲明式的語句,這樣 SQL 也被叫做聲明式語言。

SQL 新手指南

在視覺化地寫 SQL 查詢語句方面,已經有很多可用的工具了,為什麼還要學習一個全新的語言呢?當你使用某些 SQL 工具時,重要的是理解 SQL 語言、理解視覺化工具正在做什麼、以及為什麼那樣做。有時候,需要手動寫一些 SQL 語句,不僅因為這是最快的方法,而且這更強大、經常是完成預定目標的唯一方法。

資料庫的介紹

我們剛才提到了,SQL 是資料庫語言。那麼,資料庫是什麼?資料庫是一種儲存機制,被設計為用來存取儲存的資訊及其操作。資料庫裡的資訊被儲存在稱作表(table)的物件裡。表的名字是其唯一身份,由列和行構成。列包含列名、列的資料型別以及該列的其它屬性。行包含該列的記錄或資料。資料庫裡的大部分錶之間會有關係(relationship)或連結(link),一對一、或一對多的關係。這也是為什麼這種資料庫被稱為關係模型資料庫。

關於描述資料庫結構,最容易的方法就是把它和 Excel 電子表格做比較,它們有著許多相似。一個資料庫就是一份獨立的文件。電子表格裡的 sheet 就是表(table),每個 sheet 都有一個名字。列和行,都和資料庫一樣。 SQL 語言用來建立新表、更改現有表,用來取得資料、更新資料或刪除資料。

比如說,我們有一份知名電影的台詞大集合,存放在任意單獨的文字檔案裡。即使我們精心組織,用 Excel 電子表格存放,我們所面臨的問題仍然是存在。用這種方式儲存台詞,我們無法快速地從一部電影裡得到所有台詞,或無法得到一個角色的所有台詞。如果我們把文字檔案或電子表格放入資料庫,並創建帶有關係的表,所有問題都迎刃而解了。關係型的真正涵義是什麼?關係模型是描述資料、以及這些資料實體之間的關係的方法。在我們的例子中,關係就是每個台詞和表之間的聯繫,電影名稱存放在表裡、或所有角色也存放在表裡。

下面是一個簡化處理的例子,只有一個表格做範例,表名叫「Movie_quotes」。它有四列,一個列表示台詞文字、一個列表示說台詞的演員角色,一個表示電影,還有年份。我們收錄了八句電影台詞,我們的範例表看起來像是這樣:

我會回來的終結者終結者1984#我發現你缺乏信仰令人不安。 1983# ##做。或不這樣做。沒有嘗試。為了阿甘正傳if#奔跑吧,福瑞斯特!奔跑吧!

當討論資料庫時,值得一提的是,有一個全新的資料庫,在需要儲存資料的人中間,產生了一種運動,它就是 NoSQL。它們是基於文件的系統,雖然它們正在變得非常流行,直到今天仍然有大量的關係型資料庫在使用中。即使 NoSQL 資料庫有某種查詢語言,它們很大一部分(因為它們幾乎都是在 SQL 之後才發明的)仍然和 SQL 有著某種相似性。

四種基本的SQL 操作(CRUD)

有很多SQL 指令,但是,有四種通常的SQL 操作,可以對錶及其資料做一些事情:

  • 創建– 把資料填入表格裡。

  • 讀取 – 從表格中查詢資料。

  • 更新 – 修改表中已有資料。

  • 刪除 – 從表格中移除資料。

這些基本 SQL 操作的首字母組成了縮寫“CRUD”,它們被視為每個資料庫必有的、四個基本功能或特色的基礎集。

透過介紹基本特色,我們將會介紹基本的、以及最重要的SQL 指令:`CREATE`, `INSERT`, `SELECT `, `UPDATE`, `DELETE`, and `DROP`。

建立資料

首先,我們需要在資料庫裡建立表格。建立新表,就用到了 `CREATE TABLE`。 `CREATE TABLE` 語句的簡單語法格式如下:

CREATE TABLE table_name
(column_1 data_type,
column_2 data_type,
column_3 data_type);
登入後複製

首先,`CREATE TABLE`關鍵字後面跟著表名。這是一個極好的例子,說明了 SQL 的簡潔性、以及和英語的相似性。關鍵字後面跟著一個左圓括號,這裡定義了額外的參數:列名和列的資料類型,然後跟上右圓括號。必須要提的是,所有的 SQL 語句都應該以 `;` 結尾。

需要遵守的規則並不多。表名和列名必須以字母打頭,後面可以跟上字母、數字、或底線。它們的字元長度不能超過 30 個。用 SQL 保留字做為表名或列名(例如 `select`, `create`, `insert` 等)是被禁止的。

在範例中,最簡單的列名可能是 `TEXT`, `CHARACTER`, `MOVIE`,和 `YEAR`。但是,問題在於這些列名都是保留字。為了避免任何可能的衝突,我們將建立以 `Q_` 做為前綴的列名。

資料類型因不同的資料庫而不同,不過這裡使用了最常見的類型:

  • #`char(size)` – 固定長度字串,用括號中的參數標明。

  • `varchar(size)` – 可變長度字串,用括號中的參數標示。

  • `number(size)` – 數字值,括號中的參數標明了總長度。

  • `date` – 日期值。

  • `number(size, d)` – 數字值,總長度為 `size`,小數位以 `d` 表示。

資料類型規定了哪種類型的資料可以儲存在指定的欄位中。如果 `Q_CHARACTER` 的欄位用來儲存電影名字,那麼這個指定的欄位就應該有一個 `varchar` (可變長度字元)的資料型別。存放電影年份的列的類型是 `number`,我們的例子中對應的列是 `Q_YEAR`。

對於期望的表格結構,建立表格的最終SQL 指令如下:

CREATE TABLE Movie_quotes
(‘Q_TEXT’ varchar(200),
‘Q_CHARACTER’ varchar(20),
‘Q_MOVIE’ varchar(20),
‘Q_YEAR’ number(4));
登入後複製

這個SQL 指令的結果將會建立一個空表,各列情況如下:

  • `Q_TEXT` 可以接受200 個字元長度的字串。

  • `Q_CHARACTER` 可以接受 20 個字元長度的字串。

  • `Q_MOVIE` 可以接受 20 個字元長度的字串。

  • `Q_YEAR` 可以接受一個年份的四個數字。

SQL 新手指南

接下来,用我们的电影台词数据填充这张表。有很多可用的 GUI 工具,来管理数据库中的表和数据。不过,写一个 SQL 脚本常常更快,该脚本基本上是 SQL 命令的集合,将被顺序执行。当你需要用大量数据填充表时,这种方式尤为方便。

向表插入或添加一行数据的 SQL 命令是 `INSERT`。格式如下:

INSERT INTO table_name
(column_1, column_2, ... column_n)
VALUES (value_1, value_2, ... value_n);
登入後複製

为了向表插入一行数据, `INSERT` 关键字跟着 `INTO` 关键字和表名。然后是列名,放在圆括号里,用逗号隔开,这是可选的,但是,指明要插入的列,以确保正确的数据插入相应的列,这是一种良好实践。最后一部分,用 `VALUES` 关键字定义了要插入的那些数据,数据列表以圆括号结束。请注意,字符串应该放在单引号里,数字不应如此。

用来填充例子中 `Movie_quotes` 表的 SQL 脚本,如下:

INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('I’ll be back', 'The Terminator', 'The Terminator', 1984);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('I find your lack of faith disturbing.', 'Darth Vader', 'Star Wars', 1977);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('It’s a trap!', 'Admiral Ackbar', 'Star Wars', 1983);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('Never tell me the odds.', 'Han Solo', 'Star Wars', 1980);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('Do. Or do not. There is no try.', 'Yoda', 'Star Wars', 1980);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('Stupid is as stupid does.', 'Forrest Gump', 'Forrest Gump', 1994);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('My mama always said: Life was like a box of chocolates. You never know what you’re gonna get.', 'Forrest Gump', 'Forrest Gump', 1994);
INSERT INTO Movie_quotes
(Q_TEXT, Q_CHARACTER, Q_MOVIE, Q_YEAR)
VALUES ('Run, Forrest! Run!', 'Jenny Curran', 'Forrest Gump', 1994);
登入後複製

读取数据

数据库中有了存好的数据,现在我们可以查询数据,看看我们的表里存储了什么,我们还能用不同的方式过滤和分类数据。

`SELECT` 语句用于查询、或选择我们想从数据库中返回的数据。我们从非常简单的查询开始,但是 `SELECT` 有很多不同的选项和扩展,这为我们最终的需要提供了很大的灵活性。基本的 `SELECT` 语句的语法如下:

SELECT column_1, column_1, ... column_n
FROM table_name;
登入後複製

指出列名,决定了哪一列将被返回到结果里,以及按什么顺序。如果我们想选择所有的列,或我们不知道表中的确切列名,我们可以使用通配符 `*`,它将从数据库中选择所有列:

SELECT * FROM table_name;
登入後複製

对于本例,显示所有数据的查询,如下:

SELECT * FROM Movie_quotes;
登入後複製

SQL 新手指南

仅仅显示电影台词、年份的查询,如下:

SELECT Q_TEXT, Q_YEAR FROM Movie_quotes;
登入後複製

有时候我们不想从表中返回所有数据。当表中有大量数据、或我们在搜索匹配某些标准的特定数据时,就属于这种情况。对此,我们可以使用 `WHERE` 语句。`WHERE` 语句将过滤记录,限制从数据库中获取哪些记录、以满足具体定义的标准:

SELECT column_1, column_1, ... column_n
FROM table_name
WHERE column_name operator value;
登入後複製

注意,`WHERE` 语句是可选的,但是如果我们决定用到它,下面的操作符是可用的:

  • `=` – 等于。

  • `>` – 大于。

  • `<` – 小于。

  • `>=` – 大于或等于。

  • `<=` – 小于或等于。

  • `<>` – 不等于。

  • `BETWEEN` – 在两个值之间。

  • `LIKE` – 搜索一种模式。

  • `IN` – 针对一个列的多种可能值。

数学操作符无需解释了。`BETWEEN` 操作符搜索两个声明值的、中间的值,包括等于两端的情况。`LIKE` 模式匹配操作符是非常强大的操作符,支持选择和我们的规定类似的行。百分号 `%` 被用做通配符,以匹配任何可能字符,它可出现在具体字符串的前面或后面。

例如,为了得到来自电影《Stars Wars》中的台词,我们可以这样写:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE = ‘Star Wars’;
登入後複製

SQL 新手指南

请注意,`WHERE` 语句是大小写敏感的,下面的 SQL 语句将不会返回结果:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE = ‘STAR WARS’;
登入後複製

除了 `WHERE` 子句,还可组合逻辑运算符 `AND` 和 `OR`。如果我们对相同列使用多个 `AND` 逻辑操作符,那么我们应该考虑使用 `IN` 子句替代。

做为示例,我们返回来自电影《Star Wars》和《The Terminator》中的所有电影台词:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE = ‘Star Wars’ AND Q_MOVIE = ‘The Terminator’;
登入後複製

SQL 新手指南

就上面的例子,更好的写法就是使用 `IN` 语句替代:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE IN (‘Star Wars’, ‘The Terminator’);
登入後複製

至此,我们一直在讨论如何从数据库中过滤数据。返回的行将按照它们进入(提交到)数据库的顺序进行排序。为了控制数据显示的顺序,我们可以通过包含 `ORDER BY` 子句来过滤输出数据。`ORDER BY` 子句包含了指定分类顺序的一个、或多个列名:

SELECT column_1, column_1, ... column_n
FROM table_name
WHERE column_name operator value
ORDER BY column_name;
登入後複製

为了扩展我们刚才《Star Wars》电影台词的例子,现在按照年份排序:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE = ‘Star Wars’
ORDER BY Q_YEAR;
登入後複製

SQL 新手指南

一个列的排序,默认是按照从最低值到最高值升序排列。为了把列的排序改为降序,我们可以在列名后面加上 `DESC` 关键字:

SELECT * FROM Movie_quotes
WHERE Q_MOVIE = ‘Star Wars’
ORDER BY Q_YEAR DESC;
登入後複製

SQL 新手指南

`ORDER BY` 语句不限于单个列。你可以包含逗号分隔的、列的清单来排序。返回的行将根据第一个指定列,然后按顺序根据接下来指定的列排序。切记,用来排序的列不必包含在被选择列的清单里。我们可以像这样来写查询:

SELECT Q_TEXT, Q_CHARACTER, Q_MOVIE FROM Movie_quotes
WHERE Q_MOVIE = ‘Star Wars’
ORDER BY Q_YEAR DESC;
登入後複製

更新数据

在我们开始插入数据之后,并没有被限制为只能读取数据。我们能够对任何行里的、任何列下的、任何数据进行修改。`UPDATE` 语句用于更新或修改记录。

`UPDATE` 的语法如下:

UPDATE table_name
SET column_name = new_value
WHERE column_name operator value;
登入後複製

当我们使用 `UPDATE` 时,慎重地构造一个 `WHERE` 子句是十分重要的。`WHERE` 子句指定了哪一条记录或哪些记录应该被更新。如果我们在执行 `UPDATE` 语句时、而没有使用 `WHERE` 子句,我们将更新指定列的所有数据。

让我们看看 `Movie_quotes` 表里的电影台词。我们让所有的台词以标点符号结束,《The Terminator》除外。对于如何使用 `UPDATE` 语句,这是一个极好的例子:

UPDATE Movie_quotes
SET Q_TEXT = ‘I’ll be back!’
WHERE Q_MOVIE = ‘The Terminator’;
登入後複製

之前解释了,如果我们不小心遗漏了 `WHERE` 子句,或我们故意把所有的台词行更新为「I’ll be back!」。通过单单选中电影《The terminator》所在行,我们就可以更新指定行的一列数据。

删除数据

当数据库被大量使用时,从数据库中移除陈旧的数据,迟早会变得有必要。我们能够只删除表中的一些行、或删除整个表。

`DELETE` 语句用于删除表中的行。该命令的语法如下:

DELETE FROM table_name
WHERE column_name operator value;
登入後複製

重申,和 `UPDATE` 语句一样,`WHERE` 子句指定了哪一条记录或哪些记录应该被删除。如果没有指定 `WHERE` 子句,所有的行和列将被删除:

DELETE FROM Movie_quotes;
登入後複製

假设我们不再喜欢电影《Forrest Gump》了,想从电影中删除其台词。为了从电影中删除所有台词,我们可以编写如下 SQL 命令:

DELETE FROM Movie_quotes
WHERE Q_MOVIE = ‘Forrest Gump’;
登入後複製

最终,我们有了足够多的电影。我们对电影台词不再感兴趣了,我们想把兴趣移到音乐上。我们开始收集歌词。根据我们目前所学到的 SQL 知识,修改数据库是非常简单的。

首先,我们需要清空数据库里、不再感兴趣的数据。为了删除包含所有行的表,我们可以使用 `DROP TABLE` 语句。切记 `DROP TABLE` 语句不同于使用 `DELETE` 语句,和删除表里的所有记录也不同。删除表里的所有记录,会留给我们表本身及其定义的所有表结构;包括列的数据类型定义和该表的其它相关的数据库信息。`DROP TABLE` 移除了表、移除表的定义,还有所有的行。

`DROP TABLE` 语句的语法如下:

DROP TABLE table_name;
登入後複製

为了从数据库中删除 `Movie_quotes`,我们可以这样写:

DROP TABLE Movie_quotes;
登入後複製

现在我们的数据库是空的,准备接受新数据。我们从所有的 CRUD 过程开始,创建名为 `Song_Lyrics` 的新表,根据我们新收藏的歌曲,建立一个歌词数据库。

结论

本文我们浏览了涵盖 CRUD 四个基本的数据库功能:如何创建新数据、读取数据、更新我们想要修改的数据、以及最后的如何删除不想要的数据。这包含了基本的、但是最重要的 SQL 命令,比如:`CREATE TABLE`, `INSERT INTO`, `SELECT`, `UPDATE`, `DELETE` 和 `DROP`。

这些基本的 SQL 命令支持大量的数据管理,但是每个介绍到的命令都有很多选项和额外的功能,有些是本文没有介绍的,要注意这一点。总之,当 SQL 开发人员新手在开始数据库工作、以及使用一门新语言 SQL 时,本文中的基本知识应该能为他们开个好头。

Movie_quotes
#Q_TEXT ##Q_CHARACTER Q_MOVIE Q_YEAR
#星際大戰 1977 這是一個陷阱!
永遠不要告訴我幾率。 #安息吧
1994 我媽總是說:L就像一盒巧克力。

以上是PHP開發之程式設計師必掌握的 SQL 指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

mysql:簡單的概念,用於輕鬆學習 mysql:簡單的概念,用於輕鬆學習 Apr 10, 2025 am 09:29 AM

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

phpmyadmin怎麼打開 phpmyadmin怎麼打開 Apr 10, 2025 pm 10:51 PM

可以通過以下步驟打開 phpMyAdmin:1. 登錄網站控制面板;2. 找到並點擊 phpMyAdmin 圖標;3. 輸入 MySQL 憑據;4. 點擊 "登錄"。

MySQL:世界上最受歡迎的數據庫的簡介 MySQL:世界上最受歡迎的數據庫的簡介 Apr 12, 2025 am 12:18 AM

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

為什麼要使用mysql?利益和優勢 為什麼要使用mysql?利益和優勢 Apr 12, 2025 am 12:17 AM

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

redis怎麼使用單線程 redis怎麼使用單線程 Apr 10, 2025 pm 07:12 PM

Redis 使用單線程架構,以提供高性能、簡單性和一致性。它利用 I/O 多路復用、事件循環、非阻塞 I/O 和共享內存來提高並發性,但同時存在並發性受限、單點故障和不適合寫密集型工作負載的局限性。

MySQL和SQL:開發人員的基本技能 MySQL和SQL:開發人員的基本技能 Apr 10, 2025 am 09:30 AM

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

MySQL的位置:數據庫和編程 MySQL的位置:數據庫和編程 Apr 13, 2025 am 12:18 AM

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

怎樣建立sql數據庫 怎樣建立sql數據庫 Apr 09, 2025 pm 04:24 PM

構建 SQL 數據庫涉及 10 個步驟:選擇 DBMS;安裝 DBMS;創建數據庫;創建表;插入數據;檢索數據;更新數據;刪除數據;管理用戶;備份數據庫。

See all articles