日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库设计笔记——MySQL基础知识(四)

發布時間:2023/12/15 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库设计笔记——MySQL基础知识(四) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

  • 關系型數據庫——由表來存儲相關的數據,MySQL,SQL Server,Oracle等都是關系型數據庫;
  • 元數據:用于集成并管理數據。
  • MySQL數據庫

    • 用戶數據庫:用戶根據需求創建數據庫
    • 系統數據庫
      • information_schema:主要存儲系統中的一些數據庫對象信息,如用戶信息、列信息、權限信息、字符集信息和分區信息等
      • performance_schema:存儲數據可以服務器性能參數
      • mysql:系統的用戶權限信息
        • test
  • MySQl的數據對象

      • 欄位:該表的列(也叫屬性或者字段)的名字和數據類型
      • 索引:根據指定的數據庫表列建立起來的順序,提供快速訪問的路徑且可以監督表的數據。
    • 視圖
    • 存儲過程(手動調用,無返回值)
    • 函數(手動調用,必須有返回值)
    • 觸發器(自動調用)
    • 事件
  • 數據庫的命名規則

    • 由字母、數字、下劃線、@、#、$符號組成,首字母不能是數字和$符號,標識符不允許是MySQL的保留字,不允許有空格和特殊字符,長度小于128位。
  • MySQL版本

    • MySQL Community Server(社區版):完全免費,官方不提供技術支持
    • MySQL Enterprise Server(企業版服務器):他能夠以很高性價比為企業提供數據倉庫應用,支持ACID事務處理,提供完整的提交、回滾、崩潰恢復和行級鎖定功能。但是該版本付費,官方提供電話支持。
  • MySQL的優勢

    • 速度:運行速度快。
    • 價格:MySQL對大多數個人來說是免費的。
    • 容易使用:與其他大型數據庫的設置和管理相比,其復雜程度較低,易于學習。
    • 可移植性:能夠工作在眾多不同的系統平臺,例如:Windows、Linux、Unix、Mac OS。
    • 豐富的接口:提供了用于C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等語言的API。
    • 支持查詢語言:MySQL可以利用標準SQL語法和支持ODBC的應用接口。
    • 安全性和連接性:十分靈活和安全的權限和密碼系統,允許基于主機的驗證。連接到服務器時,所有的密碼傳輸均采用加密形式,從而保證了密碼安全。并且由于MySQL是網絡化的,因此可以在因特網上的任何地方訪問,提供數據共享的效率。

存儲引擎

  • 存儲引擎決定數據庫對象表的類型,即如何如何存儲、索引數據、是否支持事務,也決定了表在計算機中的存儲方式。
  • 數據類型,決定數據庫對象表可以存儲數據的類型。
  • 存儲引擎類別(9)
    • InnoDB(默認)

      支持事務,支持具有提交、回滾、崩潰恢復能力的事務安裝,比MyISAM占磁盤空間大。

    • MyISAM

      不支持事務,也不支持外檢,訪問速度較快

    • MEMORY

      使用內存來存儲數據,訪問速度快,但安全上無保障

    • FEDERATED
    • MRG_MYISAM:
    • BLACKHOLE
    • CSV
    • ARCHIVE
    • PEFORMANCE_SCHEMA
  • 相關命令

    • 查看DBNS版本

      1
      SELECT version();
    • 查詢默認存儲引擎

      1
      SHOW VARIABLE LIKE 'storage _engine%';
  • 修改默認存儲引擎通過修改my.ini文件中的"default_storage-engine"參數

數據類型(每個字節8為)

  • 數值
    • 整型
      • TINYINT(1字節)
      • SMALLINT(2字節)
      • MEDIUMINT(3字節)
      • INT/INTEGER(4字節)
      • BIGINT(8字節)
    • 浮點型
      • FLOAT(4字節)
      • DOUBLE(8字節)
    • 定點型:DEC/DECIMAL(M/D)

      其中M是小數點左右數字之和,D是右邊數字個數,M<=38

  • 字符串型

    • CHAR(0~255字節) :固定字長
    • VARCHAR(0~65535字節):可變長度
  • 日期時間類型

    • YEAR:年份,1字節
    • TIME:時分秒,3個字節
    • TIMESTAMP:經常插入或者更新日期為當前系統時間,4字節
    • DATATIME:年月日時分秒,8字節
    • DATE:年月日,4字節

查看表結構

  • 表的操作

    1
    2
    DESCRIBE table_name //查看定義
    SHOW CREATE TABLE table_name; //查看表詳細定義
  • 操作表的約束

    • 通過表的約束來完成對表中所存儲的數據是否合法、是否具有完整性,進行檢查。
  • 約束

    • 單列約束:每個約束只約束一列數據。
    • 多列約束:每個約束約束多列數據。
  • 完整性約束

    • NOT NULL :非空
    • DEFLAULT :設置字段的默認值
    • UNIQUE KEY:設置字段的值是唯一
    • PRIMARY KEY(PK):約束字段為表的主鍵,只作為表的唯一標識
    • AUTO_INCREMENT :約束字段自動增加
    • FOREIGN KEY(FK):約束字段為表的外鍵
  • 注意

    • 多字段主鍵:主鍵有多個字段組合而成。
    • 字段自動增加(AUTO_INCREMENT):MySQL唯一擴展的完整性約束,當為數據庫表中插入新記錄時,字段上的值會自動生成唯一的ID。一個數據表中只能有一個字段使用該約束,且字段數據類型一定是整型,由于其唯一的ID,該字段經常會設置為PK主鍵。
    • 置外鍵約束(FK):外鍵約束保證多個表(通常兩個)之間參照完整性,即構建兩個字段之間的參照關系。設置外鍵的兩個表之間具有父子關系,即子表中某個字段的取值范圍由父表所決定。如全年級的成績表,以學號作為總表的主鍵,而班級作為另一個表的主鍵,則班級為總表的外鍵,也就是總表的子表。

索引的操作

  • :包含數據庫的所有數據的數據庫對象,數據庫對象表是存儲和操作數據的邏輯結構
  • 索引:一種有效組合數據的方式。通過索引對象,可以快速查詢到數據庫對象表中的特殊記錄,是一種提高性能的常用方式,一個索引會包含表中安排一定順序排序的一列或多列字段。
  • 根據索引的存儲類型,可分為:
    • B型樹索引(BTREE)<- InnoDB支持
    • 哈希索引(HASH)<- MEMORY支持
  • 索引作用

    • 提高查找數據的速度
    • 實現數據庫對象表的完整性
  • MySQL支持6種索引

    • 普通索引: 在創建索引時,不附加任何限制條件(如唯一、非空等),可創立在任何數據類型的字段上。
    • 唯一索引:在創建索引時,限制索引的值必須是唯一的,可更快查詢某記錄。
    • 全文索引
      • 主要是關聯在數據類型為CHAR、VARCHAR、TEXT的字段上,以便能夠更加快速地查詢數據量較大的字符串類型字段。
      • 全文索引只能在存儲引擎為MYISAM的數據表上創建。
    • 單列索引
    • 多列索引
    • 空間索引
  • 適用于創建索引的情況

    • 經常查詢的字段,即在where子句中出現的字段。
    • 在分組的字段,即group By子句中出現的字段。
    • 存在依賴關系的子表和父表之間的聯合查詢,即關鍵/外鍵字段。
    • 設置唯一完整性約束的字段。
  • 不適用于創建索引的情況

    • 在查詢中很少被使用的字段
    • 擁有許多重復值的字段

注意,過多的創建索引則會占據許多磁盤空間。

視圖的操作

  • 視圖:通過視圖的操作不僅可以實現查詢的簡化,而且可以提高安全性。所謂的視圖,本質上是一種虛擬表,其內容與真實表相似包含一系列帶有名稱的列和行數據,但是視圖并不在數據庫中以存儲的數據值形式存在。行和列數據來自定義視圖的查詢所引用基本表,并且在具體引用視圖時動態生成
  • 視圖的特點

    • 視圖的列可以來自不同的表,是表的抽象和在邏輯意義上建立的新關系。
    • 視圖時由基本表(實表)產生的虛表。
    • 視圖的建立和刪除不影響基本表。
    • 對視圖內容的更新(添加、刪除和修改)直接影響基本表。(相當于對基本表操作的工具)
    • 當視圖來自多個基本表時,不允許添加和刪除數據。
  • 創建視圖語法

    1
    CREATE VIWE 'database_name'.'VIWE_name' AS (SELECT * FROM ...);

    database_name為當前的數據庫名稱,VIWE_name為新建視圖名稱,“*”處填寫要查詢的列,用“,”隔開,“…”處寫表名稱。

  • 由于視圖的功能實際上是封裝查詢語句,分為以下幾類

    • (1)封裝實現查詢常量語句的視圖,即所謂的常量視圖

      1
      CREATE VIWE view_test1(新建視圖的名稱) AS SELECT 3.1415926;

      可將上面的語句輸入到MySQL5.7 command line client 中。

    • (2)封裝使用聚合函數(SUM、MIN、MAX、COUNT等),查詢語句的視圖。

      1
      CREATE VIWE view_test2 AS SELECT COUNT(col_name) FROM table_name;
    • (3)封裝了實現排列功能(ORDER BY)查詢語句的視圖

      1
      CREATE VIWE view_test3 AS SELECT col_name FROM table_name ORDER BY id DESC; //排列方式
    • (4)封裝了實現表內連接查詢語句的視圖

      1
      CREATE VIWE view_test4 AS SELECT col_name FROM table_name as s.t_group as g WHERE s.group_id=g.id AND g.id=2;
    • (5)封裝了實現表外連接(LEFT JOIN和RIGHT JION)查詢語句的視圖

      1
      CREATE VIWE view_test5 AS SELECT col_name FROM table_name as s LEFT/RIGHT/ALL JION t_group as ON s.group=g.id WHERE g.id=2;
    • (6)封裝實現子查詢相關查詢語句的視圖

      1
      CREATE VIWE view_test6 AS SELECT col_name FROM table_name AS s WHERE s.group_id=g,id IN (SELECT id FROM t_group);
    • (7)封裝了實現記錄聯合(UNION和UNION ALL)查詢語句的視圖

      1
      CREATE VIWE view_test7 AS SELECT id,name FROM table_name UNION ALL SELECT id,name FROM t_group;
  • 查看視圖

    1
    2
    USE database_name;
    SHOW TABLES;
  • 查看視圖詳細信息

    1
    2
    SHOW TABLE STATUS [FROM db_name]|[LIKE 'pattern']
    SHOW TABLE STATUS FROM db_name \G
  • 查看視圖定義信息

    1
    SHOW CREATE VIWE view_name;
  • 查看視圖設計信息

    1
    DESCRIBE/DESC view_name;
  • 通過系統表查看視圖信息

    1
    2
    USE infoemation_schema;
    SELECT * FROM views WHERE table_name='view_selectproduct' \G

    SQLyog軟件中直接“工具”—>“信息”

觸發器的操作

  • 觸發器用來實現由一些表事件觸發的某種操作,是與數據庫對象表關聯最緊密的數據庫對象之一。在DBS中,當執事件間時,則會激活觸發器,從而執行其包含的操作。觸發器類似于編程語言中的函數。總的來說就是表發生更改時,自動進行一些處理

  • MySQL的觸發器語句(事件引導):

    • DELETE語句:刪除
    • INSERT語句:添加
    • UPDATE語句:修改

      其他SQL語句不會激發觸發器,會經常使用觸發器數據庫對象,是由于該對象能夠加強數據庫表中數據的完整性約束和業務規則等。

  • 創建觸發器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DELIMITER $ //固有格式,當有多個觸發器語句時使用
    CREATE TRIGGER t_afterinsert_on_doorlog AFTER INSERT
    ON t_doorlog FOR EACH ROW
    BEGIN
    DECLARE jobno VARCHAR(30);
    DECLARE time1 VARCHAR(20);
    SET jobno = (SELECT job_num FROM tb_park_user_base WHERE card_num = new.cardNo);
    SET time1 = DATE_FORMAT(new.operateTime,'%Y%m%d%H%i%s');
    INSERT INTO t_attendance (job_no, operateTime)
    VALUES
    (jobno,time1);
    END$

  • DELIMITER $ 意思是告訴mysql下文執行語句以“$”結束,如果沒有這句,下面語句會出錯,mysql無法判斷哪句結束。
  • CREATE TRIGGER t_afterinsert_on_doorlog AFTER INSERT ON t_doorlog FOR EACH ROW 創建觸發器的語法 其中AFTER同級關鍵字有BEFORE,而 INSERT同級關鍵字還有DELETEUPDATE
  • BEGIN和END之間的是觸發器執行語句。DECLARE jobno VARCHAR(30) 意思是聲明觸發器SQL中的局部變量,SET jobno=….  意思是給局部變量賦值,=右邊可為查詢語句或函數方法

單表數據記錄查詢

  • 四則運算:+(加)、-(減)、*(乘)、/(DIV除)、%(取余)。->字段間運算

    1
    SELECT ename(字段) sal*12 FROM table_name; //查詢年薪
  • 對運算結果/某字段修改字段名,使顯示更直觀

    1
    2
    SELECT ename(字段),sal*12 yearsalary FROM table_name;
    SELECT ename(字段),sal*12 AS yearsalary FROM table_name;
  • 設置數據顯示格式,以便用戶瀏覽所查詢到的數據. 在MySQL軟件中提供函數CONCAT()來連接字符串,從而實現設置顯示數據的格式,語句如下:

    1
    SELECT CONCAT|ename ,'雇員的年薪為:', sal*12) yearsalary FROM table_name;

結果:SMITH雇員的年薪為:9600.00

多表數據記錄查詢

  • 多表數據記錄查詢

    • 內連接查詢:笛卡爾積內連接表后查詢

    • 外連接查詢:笛卡爾積外連接表后查詢

    • 子查詢

      進行連接查詢中,首先要對兩張或兩張以上表進行連接操作。多表數據記錄查詢是關系數據操作中專門用于數據庫操作的關系運算。有并、笛卡爾積、連接(UNION)

  • 查詢語法

實現特殊功能比較運算符

  • 正則表達式匹配

    • ^:匹配字符串開始部分,如REGEXP '^c'

    • $:匹配字符串結束部分,如REGEXP 'g$'

    • .:匹配字符集合任意一個字符,如REGEXP '^c···g$'

    • [字符集合]:匹配字符集合任意一個字符,如REGEXP '[abc]'

    • [^字符集合]:匹配字符集合任意一個字符,如REGEXP '^[abc]'

    • str1|str2|str3:匹配str1、str2、str3中任意一個字符

    • *:匹配字符,包括0個或1個,如REGEXP 'a*g'

    • +:匹配字符,包括1個,如REGEXP 'a+g'

    • 字符串{N}:字符串出現N次

    • 字符串{M,N}:字符串出現至少M次,至多N次

  • 位運算符

    • &:按位與

    • |:按位或

    • ~:按位取反

    • ^:按位異或

    • <<:按位左移

    • >>:按位右移

    • 例子:

      1
      2
      SELECT 5&6, BIN (5&6) 二進制;
      SELECT 4&5&6, BIN (4&5&6) 二進制;
結果:

MySQL常用函數

存儲過程和函數的操作

MySQL事務

MySQL安全性機制

總結

以上是生活随笔為你收集整理的数据库设计笔记——MySQL基础知识(四)的全部內容,希望文章能夠幫你解決所遇到的問題。

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