日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

SQL 基础知识扫盲

發布時間:2024/1/8 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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,所以學習標準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)。

    理論知識看得再多,不如親自實踐一遍,效果來得更快

    挺身入局,實踐出真知

    選擇

  • 選擇:選擇一種流行社區活躍DBMS廠商發行版數據庫軟件進行入門。
  • 安裝:云服務器或者本機亦或是虛擬機模擬環境
  • 初學:建議使用各大廠商自帶GUI字符命令界面進行交互。
  • 推薦

    個人推薦學習MySQL(MariaDB),逐步學習,深入淺出。為什么推薦入門首選學習MySQL,上面提到了流行社區活躍,換句話說,MySQL資源豐富,官方文檔全面,更新頻繁。

    關于CRUD:增刪查改

    一般而言,CRUD是指對數據庫表行記錄進行新增(insert)、刪除(delete)、查詢(select)以及修改(update)操作。

    各大DBMS廠商數據庫官方文檔地址整合

    https://blog.cnwangk.top/2022/03/17/MySQL等主流數據庫廠商(DBMS)-官方文檔地址

    DBMS初體驗

  • MySQL(MariaDB)
  • Oracle
  • postgreSQL
  • MySQL:初體驗

  • 部署MySQL;
  • 檢驗(啟動與關閉服務);
  • 修改密碼與權限(為第5步做準備);
  • 字符命令界面進行交互;
  • 工具:MySQL workbench、DBeaver(通用數據庫管理器)或者SQLyog;
  • 基本操作(CRUD:insert、delete、update、select);
  • 參考官方文檔 & 官方完整Demo示例。
  • 部署MySQL8.0.x

    Windows install MySQL8.0.x (Archive zip) 簡易安裝教程

  • 解壓免安裝版MySQL:unzip mysql-8.0.x-winx64.zip
  • 切換到MySQL解壓目錄:cd mysql-8.0.x-winx64
  • 新增MySQL配置文件: my.ini
  • 初始化MySQL:bin\mysqld --initialize-insecure 或者 bin\mysqld --initialize-insecure --console
  • 注冊MySQL服務:bin\mysqld --install MySQL80(將MySQL服務注冊到service,可以使用net命令進行管理)
  • 啟動MySQL服務:net start MySQL80 或者 sc start MySQL80
  • 登錄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終端(管理員))

    參數作用

    • -u:指定用戶為root。
    • -p :回車后輸入密碼,如果直接輸入密碼回車即可登錄。
    • -P :指定端口號(port),默認為3306。

    Windows平臺修改my.ini指定MySQL server端口,Linux平臺修改my.cnf指定端口。

    mysql -uroot -p -P 3306

    Linux發行版打開終端(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數據庫包含三個文件,便于大家獲取與使用:

  • sakila-schema.sql:數據庫表結構;
  • sakila-data.sql:數據庫示例模擬數據;
  • sakila.mwb:數據庫物理模型,在MySQL workbench中可以打開查看。
  • 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,免費使用。

  • SQL plus
  • PLSQL developer
  • 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客戶端管理工具的使用。

  • 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

    參考資料

  • SQL必知必會第5版。
  • 最后,以上總結僅供參考喲!

    ——END——
    002’;

    刪除數據刪除表中全部數據,但不刪除表結構。使用drop則刪除表結構以及數據。 ```sqldelete from test.girl;

    PostgreSQL:初體驗

    主要熟悉PostgreSQL自帶的SQL shell字符命令工具和pgAdmin客戶端管理工具的使用。

  • 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

    參考資料

  • SQL必知必會第5版。
  • 最后,以上總結僅供參考喲!

    ——END——

    總結

    以上是生活随笔為你收集整理的SQL 基础知识扫盲的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。