數據庫的相關概念:
DB:數據庫(Database):
即存儲數據的倉庫,其本質是一個文件系統。保存了一系列有組織的數據。
DBMS:數據庫管理系統(Database Management System):
是一種操縱和管理數據庫的大型軟件,用于建立、使用和維護數據庫,對數據庫進行統一管理和控制。用戶通過數據庫管理系統訪問數據庫中表內的數據。
SQL:結構化查詢語言(Structured Query Language):
專門用來與數據庫通信的語言。
RDBMS:關系型數據庫(Relational?Database Management System):
關系型數據庫,模型是把復雜的數據結構歸結為簡單的二元關系(即二維表格形式)。
關系型數據庫以行(row)和列(column)的形式存儲數據,以便于用戶理解。這一系列的行和列被稱為表(table),一組表組成了一個庫(database)。
表與表之間的數據記錄有關系(relationship)。現實世界中的各種實體以及實體之間的聯系均用關系模型類表示。關系型數據庫,就是建立在關系模型基礎上的數據庫。
SQL就是關系型數據庫的查詢語言。
關系型數據庫的優勢:
復雜查詢:可以用SQL語句方便地在一個表以及多個表之間做非常復雜的數據查詢。
事務支持:使得對于安全性很高的數據訪問要求得以實現。
非關系型數據庫:
基于鍵值對存儲數據,不需要經過SQL層的解析,性能非常高。同時,通過減少不常用的功能,進一步提高性能。
關系型數據庫設計規則:
關系型數據庫的典型數據結構就是數據表,這些數據表的組成都是結構化的。
將數據放到表中,表再放到庫中。一個數據庫可以有多個表,每一個表都有一個名字,用來標識自己。表名具有唯一性。
表具有一些特性,這些特性定義了數據在表中如何存儲(類似于“類”)。
表、記錄、字段
E-R(entity-relationship,實體-聯系)模型中三個主要概念:實體集、屬性、聯系集。
一個實體集(class)對應于數據庫中的一個表(table),一個實體(instance)則對應數據庫表中的一行(row),也稱為一條記錄(record)。一個屬性(attribute)對應于數據表中的一列(column),也稱為一個字段(field)。
表的關聯關系:
表與表之間的數據記錄有關系(relationship)。現實世界中的各種實體以及實體之間的各種聯系均用關系模型來表示。
四種關聯關系:一對一關系,一對多關系,多對多關系,自我引用。
SQL的分類:
DDL(Data Define Language、數據定義語言):這些語句定義了不同的數據庫、表、視圖、索引等數據庫對象,還可以用來創建、刪除、修改數據庫和數據表的結構。
主要的語句關鍵字包括CREATE、DROP、ALTER、RENAME、TRUNCATE等。
DML(Data Manipulation Language、數據操作語言):用于添加、刪除、更新和查詢數據庫記錄,并檢查數據完整性。
主要的語句關鍵字包括INSERT、DELETE、UPDATE、SELECT等。
DCL(Data Control Language、數據控制語言):用于定義數據庫、表、字段、用戶的訪問權限和安全級別。
主要的語句關鍵字包括GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT等。
由于查詢語句使用的比較頻繁,所以很多人將查詢語句分出類作為一類:DQL(數據查詢語言),也有將COMMIT、ROLLBACK去出來稱為TCL(事物控制語言)。
SQL語言的規則與規范
基本規則:
SQL可以寫在一行或多行。為了提高可讀性,各子句分行寫,必要時使用縮進。
每一條命令以;或\g或\G結束。
關鍵字不能被縮寫也不能分行。
關于標點符號:
?? ??? ??? ?? ?· 必須保證所有的括號、引號是成對結束的。
?? ??? ??? ?? ?· 必須使用英文狀態下的半角輸入方式(即要用英文輸入寫代碼,不能用非英文輸入)。
?? ??? ??? ?? ?· 字符串型和日期時間類型的數據可以使用單引號表示。
?? ??? ??? ?? ?· 列的別名,盡量使用雙引號,不建議省略as。
MySQL大小寫的規范(建議遵守)
-
MySQL在Window環境下大小寫不敏感
-
MySQL在Linux環境下大小寫敏感
?? ??? ??? ?? ? 數據庫名、表名、表別名、變量名是嚴格區分大小寫的。
?? ??? ??? ?? ? SQL關鍵字、函數名、綁定變量等都大寫。
注釋:
單行注釋:
?? ??? ?方式①:#注釋文字(MySQL特有)
?? ??? ?方式②:-- 注釋文字(--后面必須有一個空格)
多行注釋:
?? ?? ? /*注釋文字*/
命名規則:
數據庫、表名不得超過30個字符,變量限制為29個。
必須只能包含A-Z、a-z、0-9、_ 共63個字符。
數據庫名、表名、字段名等對象名中間不要包含空格
同一個MySQL軟件中,數據庫不能重名。同一個庫中,表不能重名。同一個表中,字段不能重名。
必須保證字段沒有和保留字、數據庫系統或常用方法沖突。如果堅持使用,要在SQL語句中使用`(著重號)引起來。
保持字段名和類型的一致性,在命名字段并為其指定數據類型的時候一定要保證一致性。假如數據類型在一個表里是整數,在另一個表里就別變成整數。
基本的SELECT ... FROM ... 結構:
SELECT ...(字段1,字段2,……) FROM ...(表名)
表名指字段所在的表名,如果字段并不在某個表,使用dual(偽表)當表名。
*符號放在字段處表示相應表中的所有的字段。
列的別名:
重命名一個列,便于計算(建議別名簡短,并見名知意)。
緊跟列名,可以選擇:在列名和別名之間加入關鍵字AS(也可以省略)。別名使用雙引號,以便于在別名中包含空格或特殊的字符并區分大小寫。
AS全稱:alias,別名。
例如:
SELECT sigma_man sigma ,? best_friend AS bsfd FROM classmate ,? teacher AS? "my teacher";
去除重復行:
在SELECT關鍵字后加上DISTINCT關鍵字即可將指定字段出現重復的行去除。
例如:
SELECT DISTINCT member_id FROM employee;
空值參與運算:
空值:NULL(意味著“無”)
所有的運算符或列值遇到NULL值,運算的結果都為NULL。
著重號(` `):
若字段名、表名和保留字、數據庫系統或常用方法沖突,就要加上著重號` `引起來。
例如:SELECT * FROM `ORDER`
?查詢常數:
查詢操作時,若查詢的字段為一個常數,則會有相應的常數的列,列的內容都是此常數。
顯示表結構:
DESCRIBE 表名; (DESCRIBE也可以用DESC替換)
用于顯示表中的字段的詳細信息。
過濾數據:
語法:
SELECT 字段1,字段2……
FROM 表名
WHERE 過濾條件
·使用WHERE語句,將不滿足條件的行過濾掉。
·WHERE子句緊跟FROM子句。