學習某個技能點或者是新知識點時,可以嘗試建立一項知識梳理體系,如下:- 札記:記錄收穫過程(手寫或者以電子文件形式記錄)。
上面也談到了,學習新知識點。善於總結,可以使用流程圖或者思維導圖構建知識體系。一般而言,在日常工作交流中,大家所描述的SQL是標準SQL(Standardized SQL),非特指某一資料庫廠商(DBMS)專有語言。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不是某一特定資料庫廠商專有語言。絕大多數流行的DBMS支援SQL,所以學習標準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 name):表名是唯一的(不可重複),實際上是資料庫名和表名等的組合,資料庫名理解為使用者會容易接受一點。有的資料庫使用資料庫擁有者的名字作為唯一名的一部分,例如Oracle、達夢資料庫。在同一個資料中不能使用相同的表名,但在不同的資料庫中可以使用相同的表名。列(column):表中的一個欄位。所有表由一個列或多列組成。資料分解:合理將資料分解為多個列尤為重要。例如:城市、州、郵政編碼總是彼此獨立的列。透過分解這些資料,才有可能利用特定的列對資料進行分類和過濾(比如找出特定州或城市的所有顧客)。如果城市和州組合到一個列中,則按州分類或過濾會很困難。當然,你可以根據自己的需求將資料分解到何種程度。例如,一般可以將街道名和門牌號一起儲存到地址裡,沒有特殊需求是可以這樣處理。如果那一天,需求發生變化,根據門牌號進行排序或過濾,最好將門牌號和街道名分開。資料型別:允許哪一種資料型別。每一張表中列具有相應資料型別,限制(或允許)該列中儲存哪一種型別的資料。主鍵(primary key):一列(或幾列),其值可以唯一標識表中每一行。定義主鍵:或許並不總是需要主鍵,達到便於管理目的,大多數資料設計者會保證他們建立的每張表具有一個主鍵。外來鍵(foreign key):用來保證參照完整性,通常在兩張或多張表中存在。如果有兩張表:主表(parent table)和子表(child table),在子表中擁有主表外來鍵約束;你想同時刪除兩張表;MySQL提示需要先刪除約束,才能徹底刪除。也有例外,比如設定了級聯(cascade)。理論知識看得再多,不如親自實踐一遍,效果來得更快。1.選擇:選擇一種流行且社群活躍DBMS廠商發行版資料庫軟體進行入門。2.安裝:雲伺服器或者本機亦或是虛擬機器模擬環境。3.初學:建議使用各大廠商自帶GUI字元命令介面進行互動。個人推薦學習MySQL(MariaDB),逐步學習,深入淺出。為什麼推薦入門首選學習MySQL,上面提到了流行、社群活躍,換句話說,MySQL資源豐富,官方文件全面,更新頻繁。一般而言,CRUD是指對資料庫錶行記錄進行新增(insert)、刪除(delete)、查詢(select)以及修改(update)操作。https://blog.cnwangk.top/2022/03/17/MySQL等主流資料庫廠商(DBMS)-官方文件地址5.工具:MySQL workbench、DBeaver(通用資料庫管理器)或者SQLyog;6.基本操作(CRUD:insert、delete、update、select);Windows install MySQL8.0.x (Archive zip) 簡易安裝教程1.解壓免安裝版MySQL:unzip mysql-8.0.x-winx64.zip2.切換到MySQL解壓目錄:cd mysql-8.0.x-winx644.初始化MySQL:bin\mysqld --initialize-insecure 或者 bin\mysqld --initialize-insecure --console5.註冊MySQL服務:bin\mysqld --install MySQL80(將MySQL服務註冊到service,可以使用net命令進行管理)6.啟動MySQL服務:net start MySQL80 或者 sc start MySQL807.登入MySQL字元管理介面:mysql -uroot -p注意:版本選擇:帶有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終端(管理員))•-p :回車後輸入密碼,如果直接輸入密碼回車即可登入。Windows平臺修改my.ini指定MySQL server埠,Linux平臺修改my.cnf指定埠。登入到MySQL字元操作介面,輸入select 1\G、select 1;或者select 1\g,會得到輸出內容:1。這種情況MySQL不用訪問表或索引,直接得到結果,透過explain使用執行計劃(後續可以瞭解)可以看出type=NULL,此時效率最高。***************************1.row*************************** 1: 1 1 row inset (0.00 sec)
提示:同樣在postgreSQL中也是支援select 1;或者select 1\g,輸出結果:1。在建立資料庫(使用者)、表,最好統一大小寫、駝峰命名、下劃線,不要混搭使用。個人給出的建議是:要麼純大寫,要麼純小寫,要麼使用下劃線進行分割。使用拼音命名庫名、表名、欄位名的時候(最好不要簡寫),如果簡寫,也請寫好註釋。比如地標性的命名北京(beijing)、上海(shanghai)、廣州(guangzhou)、深圳(shenzhen),使用全拼音這是可以的,即便查詢字典大概也是這樣命名的,最好與你的合作團隊達成統一意見。當然,你看到我所演示SQL語句,關鍵字部分統一使用大寫,庫名、表名、欄位名使用小寫。 /** MySQL基礎知識掃盲 **/ -- MySQL基礎知識掃盲
建立管理使用者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;
-- 插入 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;
最後附上官方示例資料庫,sakila-db資料庫一個非常完整的示例。包含:檢視、函式、觸發器以及儲存過程,當然也存在使用外來鍵。sakila-db資料庫包含三個檔案,便於大家獲取與使用:1.sakila-schema.sql:資料庫表結構;2.sakila-data.sql:資料庫示例模擬資料;3.sakila.mwb:資料庫物理模型,在MySQL workbench中可以開啟檢視。world-db資料庫,包含三張表:city、country、countrylanguage。MySQL官方文件(5.6、5.7、8.0)整合:初步使用,建議掌握Oracle自帶的字元命令操作工具 SQL plus。其次掌握第三方管理工具 PLSQL developer,管理Oracle很好用,免費30天試用,付費軟體。個人認為,有必要了解Oracle自帶SQL客戶端管理工具SQL developer,免費使用。以下將演示在Oracle資料庫中如何構建使用者、表、對資料查詢、新增、修改、刪除操作。建立資料庫test,在Oracle中指建立使用者用於管理常規(Oracle12c是一個拐點,有CDB和PDB之分)建表用法:create user test identified by 123456;
新版Oracle19c(帶c,預設為CDB模式),新建使用者create user c##test identified by 123456;
授予使用者test許可權resource,connectgrant resource,connect to test;
create table test.girl( ID VARCHAR2(32) not null, GIRL_NAME VARCHAR2(64), GIRL_SEX VARCHAR2(2) )
alter table test.girl add primary key(ID);
insert into test.girl values('1001','夢夢','女');
update test.girl t set t.ID='1002';
刪除表中全部資料,但不刪除表結構。使用drop則刪除表結構以及資料。主要熟悉PostgreSQL自帶的SQL shell字元命令工具和pgAdmin客戶端管理工具的使用。可以在我個人公眾號歷史文章中找到關於PostgreSQL入門教程。涵蓋DBMS示例:DB2、SQLserver、MySQL、Oracle、PostgreSQL、SQLite
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024420/viewspace-2940029/,如需轉載,請註明出處,否則將追究法律責任。