SQL 基础知识扫盲
文章目錄
- SQL & 數據庫基礎知識掃盲
- SQL是什么?
- 數據庫是什么?
- 挺身入局,實踐出真知
- DBMS初體驗
- MySQL:初體驗
- Oracle:初體驗
- PostgreSQL:初體驗
- Demo示例
- PostgreSQL:初體驗
- Demo示例
此篇總結是對之前發出的 SQL是什么 進行補充。
進入正題之前,我想聊聊其它的知識點,一點點思考。
學習某個技能點或者是新知識點時,可以嘗試建立一項知識梳理體系,如下:
這張流程圖制作比較粗糙,權當梳理基本知識參考。
上面也談到了,學習新知識點。善于總結,可以使用流程圖或者思維導圖構建知識體系。
SQL & 數據庫基礎知識掃盲
一般而言,在日常工作交流中,大家所描述的SQL是標準SQL(Standardized SQL),非特指某一數據庫廠商(DBMS)專有語言。
SQL是什么?
SQL必知必會這樣描述到:
SQL(發音為字母S-Q-L或sequel)是Structure Query Language(結構化查詢語言)的縮寫。SQL是一種專業用于與數據庫溝通交互的語言。
與其他語言(比如英語或者Java、C、PHP這類編程語言)不一樣,SQL中只有很少的詞,這是有意而為。設計SQL的目的是便于完成一項任務,提供一種從數據庫中讀寫數據的簡單有效方法。
用一句話總結:SQL是Structure Query Language(結構化查詢語言)。
維基百科這樣描述到:
全稱是Structure Query Language(結構化查詢語言)是一種特定目的編程語言,一般簡稱為SQL。
用于管理關系數據庫管理系統(RDBMS)。它是使用關系模型的數據庫應用語言,由IBM在20世紀70年代開發出來,作為IBM數據庫System R的原型關系語言,實現數據庫中信息檢索。
20世紀80年代初,美國國家標準學會(ANSI)開始著手定制SQL標準。最早的ANSI始于1986年,被稱為SQL-86,在1987年成為國際標準化組織(ISO)標準。盡管SQL并非完全按照科德的關系模型設計,但其依然成為最為廣泛運用的數據庫語言。此后,這一標準經過了一系列的增訂,加入了大量新特性。雖然有這一標準的存在,但大部分的SQL代碼在不同的數據庫系統中并不具有完全的跨平臺性。
用我自己的經驗總結概括:其實是將數據有規律地存放在特定容器中的一種結構化查詢語言。
SQL有哪些優點呢?
SQL擴展說明:許多DBMS廠商通過增加語句或指令,對SQL進行擴展,目的是提供執行特定操作的額外功能或簡化方法。雖然這種擴展使用很便捷,但一般情況是針對個別DBMS,很少有兩個廠商同時支持這種擴展。列舉兩個例子,比如Oracle分頁可以使用rownum實現,而MySQL分頁使用limit關鍵字。
數據庫是什么?
數據庫
數據庫(database):保存有組織數據的容器,通常是一個文件或一組文件。
tips:通常說數據庫指關系型數據庫(RDBMS)。
注意混淆平時工作交流,大家通常用數據庫這個術語來代表使用的數據軟件,這種表述不完全正確,因此產生了許多混淆。確切地說,數據庫軟件指數據庫管理系統(DBMS) 。數據庫是通過DBMS創建和操作的容器,它具體是什么,形式如何,各種數據庫有所差異。這種差異表現在:各大數據庫廠商基于標準SQL進行各自的擴展。
簡易說明
在MySQL中創建數據庫語法:create database db_name。而在Oracle數據庫中創建數據庫語法create user db_name,你沒看錯,Oracle中基于用戶進行描述與管理。如果你在Oracle中使用create database db_name,會提示數據庫已裝載。
表
表(table):某種特定類型數據庫結構化清單。
表名
表名(table name):表名是唯一的(不可重復),實際上是數據庫名和表名等的組合,數據庫名理解為用戶會容易接受一點。有的數據庫使用數據庫擁有者的名字作為唯一名的一部分,例如Oracle、達夢數據庫。在同一個數據中不能使用相同的表名,但在不同的數據庫中可以使用相同的表名。
模式
模式:關于數據庫和表的布局及特性的信息。
列
列(column):表中的一個字段。所有表由一個列或多列組成。
數據分解:合理將數據分解為多個列尤為重要。例如:城市、州、郵政編碼總是彼此獨立的列。通過分解這些數據,才有可能利用特定的列對數據進行分類和過濾(比如找出特定州或城市的所有顧客)。如果城市和州組合到一個列中,則按州分類或過濾會很困難。
當然,你可以根據自己的需求將數據分解到何種程度。例如,一般可以將街道名和門牌號一起存儲到地址里,沒有特殊需求是可以這樣處理。如果那一天,需求發生變化,根據門牌號進行排序或過濾,最好將門牌號和街道名分開。
數據類型
數據類型:允許哪一種數據類型。每一張表中列具有相應數據類型,限制(或允許)該列中存儲哪一種類型的數據。
行
行(row):表中列一條或多條記錄。
主鍵
主鍵(primary key):一列(或幾列),其值可以唯一標識表中每一行。
定義主鍵:或許并不總是需要主鍵,達到便于管理目的,大多數數據設計者會保證他們創建的每張表具有一個主鍵。
外鍵
外鍵(foreign key):用來保證參照完整性,通常在兩張或多張表中存在。如果有兩張表:主表(parent table)和子表(child table),在子表中擁有主表外鍵約束;你想同時刪除兩張表;MySQL提示需要先刪除約束,才能徹底刪除。也有例外,比如設置了級聯(cascade)。
理論知識看得再多,不如親自實踐一遍,效果來得更快。
挺身入局,實踐出真知
選擇
推薦
個人推薦學習MySQL(MariaDB),逐步學習,深入淺出。為什么推薦入門首選學習MySQL,上面提到了流行、社區活躍,換句話說,MySQL資源豐富,官方文檔全面,更新頻繁。
關于CRUD:增刪查改
一般而言,CRUD是指對數據庫表行記錄進行新增(insert)、刪除(delete)、查詢(select)以及修改(update)操作。
各大DBMS廠商數據庫官方文檔地址整合:
https://blog.cnwangk.top/2022/03/17/MySQL等主流數據庫廠商(DBMS)-官方文檔地址
DBMS初體驗
MySQL:初體驗
部署MySQL8.0.x
Windows install MySQL8.0.x (Archive zip) 簡易安裝教程
注意:版本選擇:帶有GA(General Availability)標識為穩定版,目前最新穩定是MySQL 8.0.32 發布于2023-01-17。x代表使用MySQL8.0具體版本。打開CMD或者Powershell時以管理員身份運行,如果沒有,安裝服務時則會提示權限拒絕,如下所示。
D:\mysql-8.0.32-winx64\bin>mysqld --install MySQL80
Install/Remove of the Service Denied!
Windows環境新建my.ini做如下設置,指定基本安裝目錄與數據存放目錄:
[mysqld] basedir=D:\\mysql-8.0.32-winx64 datadir=D:\\mysql-8.0.32-winx64\\data登錄到命令行字符界面
Windows 平臺打開CMD、Powershell或者Windows terminal(win + x 打開Windows終端(管理員))
參數作用:
- -u:指定用戶為root。
- -p :回車后輸入密碼,如果直接輸入密碼回車即可登錄。
- -P :指定端口號(port),默認為3306。
Windows平臺修改my.ini指定MySQL server端口,Linux平臺修改my.cnf指定端口。
mysql -uroot -p -P 3306Linux發行版打開終端(terminal)
mysql -uroot -p -P 3306輸入:
mysql> select 1\G分析:
登錄到MySQL字符操作界面,輸入select 1\G、select 1;或者select 1\g,會得到輸出內容:1。這種情況MySQL不用訪問表或索引,直接得到結果,通過explain使用執行計劃(后續可以了解)可以看出type=NULL,此時效率最高。
輸出:
*************************** 1. row *************************** 1: 1 1 row in set (0.00 sec)提示:同樣在postgreSQL中也是支持select 1;或者select 1\g,輸出結果:1。
做筆記:SQL CRUD
在創建數據庫(用戶)、表,最好統一大小寫、駝峰命名、下劃線,不要混搭使用。個人給出的建議是:要么純大寫,要么純小寫,要么使用下劃線進行分割。使用拼音命名庫名、表名、字段名的時候(最好不要簡寫),如果簡寫,也請寫好注釋。比如地標性的命名北京(beijing)、上海(shanghai)、廣州(guangzhou)、深圳(shenzhen),使用全拼音這是可以的,即便查詢字典大概也是這樣命名的,最好與你的合作團隊達成統一意見。
當然,你看到我所演示SQL語句,關鍵字部分統一使用大寫,庫名、表名、字段名使用小寫。
注釋使用
/** MySQL基礎知識掃盲 **/ -- MySQL基礎知識掃盲創建數據庫
創建管理用戶study(習慣叫數據庫),注意: 執行更新操作時,時刻牢記數據無價,指定條件。最大程度避免給自己帶來不必要的工作麻煩。
CREATE DATABASE study;切換用戶
USE study;建表語句
創建表,在study用戶下分別創建表:girl、books。
CREATE TABLE study.girl(id INT PRIMARY KEY,girl_name VARCHAR(64),girl_age VARCHAR(64),cup_size VARCHAR(64),stu_num VARCHAR(64) )CREATE TABLE study.books(id VARCHAR(32) NOT NULL PRIMARY KEY,book_names VARCHAR(64) NOT NULL,isbn VARCHAR(64) NOT NULL,author VARCHAR(16) NOT NULL );第一張表girl:使用CRUD語句 & 開啟顯式開啟事務(MySQL & MariaDB默認開啟自動autocommit提交)。
顯式開啟事務
BEGIN; -- start transaction;查詢:標準寫法,指定字段名
SELECT sg.id,sg.girl_name,sg.girl_age,sg.cup_size,sg.stu_num FROM study.girl sg;查詢:偷懶寫法
SELECT * FROM study.girl sg;插入一條數據:標準寫法,指定字段名
INSERT INTO study.girl(id,girl_name,girl_age,cup_size,stu_num) VALUES(1001,'夢夢','16','B','tolovemm16');插入一條數據:偷懶寫法
INSERT INTO study.girl VALUES(1001,'夢夢','16','B','tolovemm16');刪除數據:指定條件
DELETE FROM study.girl sg WHERE sg.id=1001;修改數據:指定條件
UPDATE study.girl(id,girl_name,girl_age,cup_size,stu_num) sg SET sg.stu_num='toloveC16' WHERE sg.id=1001; UPDATE study.girl sg SET sg.cup_size='C' WHERE sg.id=1001;回滾操作
ROLLBACK;提交事務
COMMIT;第二張表books:
-- 插入 INSERT INTO study.books VALUES('1001','books','2023-3-15-miji','張三');-- 修改 UPDATE study.books b SET b.book_names='絕世武功秘籍' WHERE b.id='1001'; -- 查詢 SELECT * FROM study.books; -- 不用帶上用戶名也能查詢,切換用戶操作:use study SELECT * FROM books;-- 刪除全表數據內容 DELETE FROM study.books;-- 刪除全表數據內容:TRUNCATE [TABLE] tbl_name TRUNCATE TABLE study.books;-- 刪除表結構與內容,注意:無法回滾 DROP TABLE study.books;MySQL官方完整Demo示例
最后附上官方示例數據庫,sakila-db數據庫一個非常完整的示例。包含:視圖、函數、觸發器以及存儲過程,當然也存在使用外鍵。
sakila-db數據庫包含三個文件,便于大家獲取與使用:
https://downloads.mysql.com/docs/sakila-db.zip
用于用于簡單測試學習,可以使用world-db:
world-db數據庫,包含三張表:city、country、countrylanguage。
https://downloads.mysql.com/docs/world-db.zip
MySQL官方文檔(5.6、5.7、8.0)整合:
鏈接: https://pan.baidu.com/s/18TPW7Lan2WoJhHxWJUM3cw?pwd=bx44
提取碼: bx44
Oracle:初體驗
初步使用,建議掌握Oracle自帶的字符命令操作工具 SQL plus。
其次掌握第三方管理工具 PLSQL developer,管理Oracle很好用,免費30天試用,付費軟件。
個人認為,有必要了解Oracle自帶SQL客戶端管理工具SQL developer,免費使用。
以下將演示在Oracle數據庫中如何構建用戶、表、對數據查詢、新增、修改、刪除操作。
1、創建用戶
創建數據庫test,在Oracle中指創建用戶用于管理
常規(Oracle12c是一個拐點,有CDB和PDB之分)建表用法:
create user test identified by 123456;新版Oracle19c(帶c,默認為CDB模式),新建用戶
create user c##test identified by 123456;2、授權
授予用戶test權限resource,connect
grant resource,connect to test;3、建表
創建表girl,指定了用戶為test
create table test.girl(ID VARCHAR2(32) not null,GIRL_NAME VARCHAR2(64),GIRL_SEX VARCHAR2(2))4、索引
添加主鍵索引
alter table test.girl add primary key(ID);5、查詢、新增、修改、刪除
查詢表girl
select * from test.girl;新增數據
insert into test.girl values('1001','夢夢','女');修改數據
update test.girl t set t.ID='1002';刪除數據
刪除表中全部數據,但不刪除表結構。使用drop則刪除表結構以及數據。
delete from test.girl;PostgreSQL:初體驗
主要熟悉PostgreSQL自帶的SQL shell字符命令工具和pgAdmin客戶端管理工具的使用。
可以在我個人公眾號歷史文章中找到關于PostgreSQL入門教程。
Demo示例
SQL必知必會demo示例
官網地址:https://forta.com/books/0135182794/
涵蓋DBMS示例:DB2、SQLserver、MySQL、Oracle、PostgreSQL、SQLite
SQL表結構示例下載
個人整理一些資料進行整合打包。
鏈接: https://pan.baidu.com/s/1MHVa-oo22XKJoLmf7NrU4A
提取碼: cx3p
參考資料:
最后,以上總結僅供參考喲!
——END——
002’;
PostgreSQL:初體驗
主要熟悉PostgreSQL自帶的SQL shell字符命令工具和pgAdmin客戶端管理工具的使用。
可以在我個人公眾號歷史文章中找到關于PostgreSQL入門教程。
Demo示例
SQL必知必會demo示例
官網地址:https://forta.com/books/0135182794/
涵蓋DBMS示例:DB2、SQLserver、MySQL、Oracle、PostgreSQL、SQLite
SQL表結構示例下載
個人整理一些資料進行整合打包。
鏈接: https://pan.baidu.com/s/1MHVa-oo22XKJoLmf7NrU4A
提取碼: cx3p
參考資料:
最后,以上總結僅供參考喲!
——END——
總結
以上是生活随笔為你收集整理的SQL 基础知识扫盲的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VMware虚拟机安装Linux系统(详
- 下一篇: java正则表达式控制格式_“如果Jav