MySQL - 數據庫基礎操作

SQL語句

結構化查詢語言(Structured Query Language),在關系型數據庫上執行數據操作、數據檢索以及數據維護的標準語言。

分類

  • DDL
    • 數據定義語言(Data Definition Language),定義對數據庫對象(庫、表、列、索引)的操作。
  • DML
    • 數據操作語言(Data Manipulation Language),定義對數據庫記錄的操作。
  • DQL
    • 數據查詢語言(Data Query Language)。
  • DCL
    • 數據控制語言(Data Control Language),定義對數據庫、表、字段、用戶的訪問權限和安全級別。

書寫規范

  • 在數據庫系統中,SQL語句不區分大小寫(關鍵字建議用大寫) 。
  • 字符串常量區分大小寫。
  • SQL語句可單行或多行書寫,以分號“;”結尾。
  • 關鍵詞不能跨多行或簡寫。
  • 用空格和縮進來提高語句的可讀性。
  • 子句通常位于獨立行,便于編輯,提高可讀性。
  • 注釋
    • SQL標準:多行注釋使用”/**/“;單行使用“-- ”。
    • MySQL:“#”。

數據庫操作

編碼問題

  • 早期MySQL為了兼容像中文這種符號,提供了utf8編碼。
  • 現在因為表情包已經需要使用第四個字節存儲,所以,utf8不建議使用了,建議使用另一種真正的Unicode編碼 — utf8mb4。

MySQL自帶的數據庫

  • Information_schema

    • 主要存儲了系統中的一些數據庫對象信息,如用戶表信息、列信息、權限信
      息、字符集信息、分區信息等。(數據字典表)
  • performance_schema

    • 主要存儲數據庫服務器的性能參數。
  • mysql

    • 存儲了系統的用戶權限信息及幫助信息。
  • sys

    • MySQL5.7新增,之前版本需要手工導入。這個庫是通過視圖的形式把information_schema和performance_schema結合起來,查詢出更加令人容易理解的數據。
  • test

    • 系統自動創建的測試數據庫,任何用戶都可以使用。

創建數據庫

  • -- 創建數據庫。
    CREATE DATABASE 數據庫名稱;
    
  • -- 創建數據庫,同時指定編碼。
    CREATE DATABASE 數據庫名稱 DEFAULT CHARACTER SET 編碼;
    
  • -- 創建數據庫,同時指定編碼和排序規則。
    CREATE DATABASE 數據庫名稱 DEFAULT CHARACTER SET 編碼 COLLATE 排序規則;
    

查詢當前處于哪一個數據庫

SELECT DATABASE();

查看數據庫版本

SELECT VERSION();

查看當前用戶

SELECT USER();

以查詢SQL語句的方式查看數據庫

SHOW CREATE DATABASE 數據庫名;

刪除數據庫

DROP DATABASE 數據庫名;-- 一般加上if exists語句,意為如果存在才刪除,可以防止報錯。
DROP DATABASE IF EXISTS 數據庫名;

數據庫表操作

創建表

-- 語法。
CREATE TABLE 表名 (字段1 數據類型 [約束條件],字段2  數據類型 [約束條件],……字段n 數據類型 [約束條件]
);-- 同樣可以添加判斷語句。
CREATE TABLE IF NOT EXISTS 表名 (字段1 數據類型 [約束條件],字段2  數據類型 [約束條件],……字段n 數據類型 [約束條件]
);

查詢表中的所有數據

SELECT * FROM 表名;

向表中插入數據

INSERT INTO 表名 VALUES(字段1數據, 字段2數據,  ……,  字段n數據);
-- 這種數據添加方式具有一定缺點,數據的順序和數量要和字段一樣。
INSERT INTO 表名(字段1, 字段n) VALUES(字段1數據, 字段n數據);
-- 這樣可以只用輸入前面寫了字段的數據,沒寫的其他字段有默認值的取默認值,沒有的默認為NULL。

查看表結構

DESC 表名;
-- 此處desc是describe的縮寫。
-- 故可以這樣寫:
DESCRIBE 表名;

以查詢SQL語句的方式查看表結構

SHOW CREATE TABLE 表名;

在查詢語句后面以 “\G” 結尾,表示縱向顯示每行記錄。但如果以\G結尾,就不必在語句后加分號了。

刪除數據庫表

DROP TABLE 表名;
-- 仍然可以加上判斷語句
DROP TABLE IF EXISTS 表名;

數據類型

數據庫用來存儲數據的,而數據存在很多類型,因此MySQL數據提供了很多類型,供開發者使用。

MySQL中的主要數據類型

  • 文本(Text)

    • 數據類型描述
      CHAR(size)保存固定長度的字符串(可包含字母、數字以及特殊字 符)。在括號中指定字符串的長度。最多 255 個字符。
      VARCHAR(size)保存可變長度的字符串(可包含字母、數字以及特殊字 符)。在括號中指定字符串的最大長度。最多 255 個字 符。 如果值的長度大于 255,則被轉換為 TEXT 類型。
      TINYTEXT存放最大長度為 255 個字符的字符串。
      TEXT存放最大長度為 65535 個字符的字符串。
      BLOB用于 BLOBs (Binary Large OBjects)。存放最多 65535 字節的數據。
      MEDIUMTEXT存放最大長度為 16777215 個字符的字符串。
      MEDIUMBLOB用于 BLOBs (Binary Large OBjects)。存放最多 16777215 字節的數據。
      LONGTEXT存放最大長度為 4294967295 個字符的字符串。
      LONGBLOB用于 BLOBs (Binary Large OBjects)。存放最多 4294967295 字節的數據。
      ENUM(x,y,z,etc.)允許你輸入可能值的列表。可以在 ENUM 列表中列出最大 65535 個值。如果列表中不存在插入的值,則插入空值。 這些值是按照輸入的順序存儲的。
      SET與 ENUM 類似, SET 最多只能包含 64 個列表項,不過 SET 可存儲一個以上的值。
  • 數字(Number)

    • 數據類型描述
      TINYINT(size)-128 到 127 常規。 0 到 255 無符號。在括號中規定最大位數。
      SMALLINT(size)-32768 到 32767 常規。 0 到 65535 無符號。在括號中規定最大位數。
      MEDIUMINT(size)-8388608 到 8388607 普通。 0 到 16777215 無符號。在括號中規定最大位數。
      INT(size)-2147483648 到 2147483647 常規。 0 到 4294967295 無符號。在括號中規定最大位數。
      BIGINT(size)-9223372036854775808 到 9223372036854775807 常規。 0 到18446744073709551615 無符號。在括號中規定最大位數。
      FLOAT(size,d)帶有浮動小數點的小數字。在括號中規定最大位數。在 d 參數中規定小數點右側的最大位數。
      DOUBLE(size,d)帶有浮動小數點的大數字。在括號中規定最大位數。在 d 參數中規定小數點右側的最大位數。
      DECIMAL(size,d)作為字符串存儲的 DOUBLE 類型,允許固定的小數點。
  • 日期/時間(Date)

    • 數據類型描述
      DATE()日期。格式: YYYY-MM-DD 注釋:支持的范圍是從 ‘1000-01-01’ 到 ‘9999-12-31’
      DATETIME()日期和時間的組合。格式: YYYY-MM-DD HH:MM:SS 注釋:支持的范圍是’1000-01-01 00:00:00’ 到 ‘9999-12- 31 23:59:59’
      TIMESTAMP()時間戳。 TIMESTAMP 值使用 Unix 紀元(‘1970-01-01 00:00:00’ UTC) 至今的描述來存儲。格式: YYYY-MM-DD HH:MM:SS
      注釋:支持的范圍是從 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-09 03:14:07’ UTC
      TIME()時間。格式: HH:MM:SS 注釋:支持的范圍是從 ‘-838:59:59’ 到 ‘838:59:59’
      YEAR()2 位或 4 位格式的年。
      注釋: 4 位格式所允許的值: 1901 到 2155。 2 位格式所允許 的值: 70 到69,表示從 1970 到 2069

數據庫約束

約束是在表上強制執行的數據校驗規則。

大部分數據庫支持下面五類完整性約束:

  • 主鍵約束

    • 從功能上看相當于非空且唯一,一個表中只允許一個主鍵,主鍵是表中唯一確定一行數據的字段。常在表中添加id字段作為主鍵。

    • 一般建議主鍵采用“int類型”(id),一般建議由數據庫自身維護這個字段的值。

    • 當建立主鍵約束時,MySQL為主鍵創建對應的索引,稱為主鍵索引,主鍵約束名總為PRIMARY。

    • 創建方式

      • CREATE TABLE 表名 (id int PRIMARY KEY
        );
        -- 創建后id字段的值強制非空且唯一,不滿足條件的數據插入行為將會報錯。
        
      • -- 我們一般將id作為主鍵,賦予自增的能力。
        CREATE TABLE 表名 (id int PRIMARY KEY AUTO_INCREMENT
        );
        -- 這樣寫,表示插入一條數據,該數據的id字段默認為上一條數據的id值加1。需要注意的是,既使數據添加失敗,id字段也會自增。
        -- 自增情況下,存在自增的字段在添加數據時可以直接寫DEFAULT或者NULL。
        
      • -- 除上述主鍵約束寫法外,還存在一種寫法。
        CREATE TABLE 表名 (id int AUTO_INCREMENT,PRIMARY KEY(id)
        );
        
  • 唯一約束

    • 唯一約束的作用,是保證該字段的值是唯一的。

    • 唯一性約束條件的字段允許出現一個NULL。

    • 同一張表內可建多個唯一約束。

    • 唯一約束可由多列組合而成。

    • 建唯一約束時MySQL會為之建立對應的索引,稱為唯一索引。

    • 如果不給唯一約束起名,該唯一約束默認與列名相同。

    • 兩種創建方式

      • CREATE TABLE 表名 (字段 數據類型 UNIQUE
        );
        
      • CREATE TABLE 表名 (字段 數據類型,UNIQUE(字段)
        );
        
  • 默認值約束

    • 給予給定的字段默認值。

    • 創建方式

      • CREATE TABLE 表名 (字段 數據類型 DEFAULT 默認值
        );
        
  • 非空約束

    • 不允許字段的值為空。

    • 創建方式

      • CREATE TABLE 表名 (字段 數據類型 NOT NULL
        );
        
  • 外鍵約束

    • 用于確保數據完整性和實現表之間關系的一種數據庫對象。

MySQL8以后支持檢查約束,之前的版本不生效,寫了也不報錯。

  • 檢查約束

    • 添加數據時檢查添加數據是否符合給定條件,不符合不允許添加。

    • 兩種創建方式

      • CREATE TABLE 表名 (字段 數據類型 CHECK(字段 IN (數據1, 數據2, ……))
        );
        
      • CREATE TABLE 表名 (字段 數據類型,字段 ENUM(數據1, 數據2, ……)
        );
        

修改表的結構

修改字段(列)數據類型

ALTER TABLE 表名 MODIFY 字段 數據類型;
-- 注意存在數據的情況下,修改不一定能成功,因為存在修改的數據類型與表中該字段中存在的數據的數據類型不符等情況。

在表中增加字段(列)

ALTER TABLE 表名 ADD 字段 數據類型;

刪除字段(列)

ALTER TABLE 表名 DROP 字段;

修改字段(列)名

ALTER TABLE 表名 CHANGE 舊字段名 新字段名 數據類型;

更改表名(兩種方案)

ALTER TABLE 舊表名 RENAME 新表名;
RENAME TABLE 舊表名 TO 新表名;

復制表結構和內容

復制表結構(兩種方法)

-- 在create table語句的末尾添加like子句,可以將源表的表結構復制到新表中。
CREATE TABLE 新表 LIKE 源表;
-- 在create table語句的末尾添加一個select語句,可以實現將想要的源表的表記錄及其字段結構拷貝到新表中。
CREATE TABLE 新表 SELECT */關鍵字 FROM 源表;

復制表內容

-- 已經存在一張機構一致的表,復制數據。
INSERT INTO 新表 SELECT * FROM 原表;

注意

  • 如果直接復制表結構,則會默認將約束也一起復制。
  • 如果復制表結構的同時,復制數據,則不會復制約束。

數據庫字典

由information_schema數據庫負責維護。

  • tables
    • 存放數據庫里所有的數據表、以及每個表所在數據庫。
  • schemata
    • 存放數據庫里所有的數據庫信息。
  • views
    • 存放數據庫里所有的視圖信息。
  • columns
    • 存放數據庫里所有的列信息。
  • triggers
    • 存放數據庫里所有的觸發器。
  • routines
    • 存放數據庫里所有存儲過程和函數。
  • key_column_usage
    • 存放數據庫所有的主外鍵。
  • table_constraints
    • 存放數據庫全部約束。
  • statistics
    • 存放了數據表的索引。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899189.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899189.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899189.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GraalVM原生鏡像支持:Spring Cloud應用啟動速度提升90%

引言:當Spring Cloud遇見GraalVM,啟動時間進入秒級時代 傳統Spring Cloud應用因動態類加載、反射等機制導致啟動緩慢(通常超過30秒),在Serverless和Kubernetes滾動更新場景下成為性能瓶頸。Spring Cloud 2023.x通過**G…

【Unity3D】攝像機適配場景以及Canvas適配

目錄 寬度不變策略 高度不變策略 寬度不變策略 開發分辨率 750*1334 (寬高比:0.56) 真機分辨率 1170*2532 (寬高比:0.46) 真機寬高比<開發寬高比&#xff0c;采用寬度不變策略 理由&#xff1a;小于代表真機高度比開發高度更大&#xff0c;因此不需要擔心高度上…

HarmonyOS:基于axios實現文件的下載以及下載進度的監聽

#前言&#xff1a;項目開發中&#xff0c;避免不了實現文件下載功能&#xff0c;其他平臺的下載都很成熟&#xff0c;網上的例子也比較多&#xff0c;我就自己項目中實現的下載功能做個總結&#xff0c;你可以參考我的寫法實現功能。 下載封裝基于axios實現的下載功能。 1.下載…

簡單一周日期展示及選擇切換

醫院掛號&#xff0c;可能需要切換日期&#xff0c;選擇一周內的某一天。 提供一周內的日期段&#xff0c;通過點擊&#xff0c;切換到不同天。 簡單的js&#xff0c;html實例。切換玩調用后臺接口&#xff0c;實現后續邏輯。 使用Vue,插值語法&#xff0c;更簡單。 一周日歷…

二叉樹的前,中,后序遍歷

我們來了解一下二叉樹的遍歷&#xff0c;話不多說 二叉樹的遍歷的概念&#xff1a; 二叉樹有四種遍歷方式&#xff0c;分別為前序遍歷&#xff0c;中序遍歷&#xff0c;后序遍歷和層序遍歷&#xff0c;但我們今天談談前三種&#xff0c;并實現它 前序遍歷&#xff1a; 按照根…

golang Error的一些坑

golang Error的一些坑 golang error的設計可能是被人吐槽最多的golang設計了。 最經典的err!nil只影響代碼風格設計&#xff0c;而有一些坑會導致我們的程序發生一些與我們預期不符的問題&#xff0c;開發過程中需要注意。 ?? errors.Is?判斷error是否Wrap不符合預期 ?…

逼用戶升級Win11,微軟開始給Win10限速

隨著Windows10的支持時間越來越短&#xff0c;微軟也加大了對Win10用戶的驅趕力度。 最近&#xff0c;微軟官宣了將要在今年6月份降低OneNote for Windows 10的同步速度。軟件也將和Windows10在今年的10月14日一同停止支持和維護。 這將影響實時協作和多設備訪問。 對OneNote…

SpringMVC_day02

一、SSM 整合 核心步驟 依賴管理 包含 SpringMVC、Spring JDBC、MyBatis、Druid 數據源、Jackson 等依賴。注意點&#xff1a;確保版本兼容性&#xff08;如 Spring 5.x 與 MyBatis 3.5.x&#xff09;。 配置類 SpringConfig&#xff1a;掃描 Service 層、啟用事務管理、導入…

Android14 原生PackageInstaller安裝某些apk報錯問題

最近遇到Android14安裝客戶一個大型app的時候&#xff0c;執行到開始安裝的時候就直接閃退了&#xff0c;查看log發現下面報錯&#xff1a; 03-25 18:01:29.531 3085 3085 E AndroidRuntime: java.lang.RuntimeException: Could not copy bitmap to parcel blob. 03-25 18:01:2…

SQLAlchemy關鍵詞搜索技術深度解析:從基礎過濾到全文檢索

在數據驅動的應用開發中&#xff0c;基于關鍵詞的模糊查詢是常見的業務需求。SQLAlchemy作為Python生態中最流行的ORM框架&#xff0c;提供了多種實現關鍵詞搜索的技術方案。本文將從性能、適用場景和技術復雜度三個維度&#xff0c;系統對比分析SQLAlchemy中關鍵詞搜索的最佳實…

基于 ffmpeg 實現合并視頻

ffmpeg是一個強大的多媒體處理工具&#xff0c;支持視頻文件的合并。 列出目錄下所有MP4文件 import os import glob# 當前目錄 directory os.getcwd() directory "/directory/to/mp4/*"# 列出目錄下所有MP4文件 files glob.glob(directory)# 排序 files.sort(…

算法每日一練 (20)

&#x1f4a2;歡迎來到張翊塵的技術站 &#x1f4a5;技術如江河&#xff0c;匯聚眾志成。代碼似星辰&#xff0c;照亮行征程。開源精神長&#xff0c;傳承永不忘。攜手共前行&#xff0c;未來更輝煌&#x1f4a5; 文章目錄 算法每日一練 (20)不同路徑 II題目描述解題思路解題代…

【銀河麒麟系統常識】命令:uname -m(查看系統架構)

命令&#xff1a; uname -m 功能 常用的 Linux/Unix 終端命令&#xff0c;用于顯示當前系統的硬件架構&#xff1b; 返回 返回系統的CPU架構類型&#xff0c;用于判斷軟件兼容性&#xff1b; 輸出結果架構說明常見設備x86_64Intel/AMD 64位 CPU主流 PC、服務器aarch64ARM 64位 …

sql結尾加刷題

找了一下mysql對extractvalue()、updatexml()函數的官方介紹https://dev.mysql.com/doc/refman/5.7/en/xml-functions.html#function_extractvalue ExtractValue(xml_frag, xpath_expr) 知識點 解釋一下這兩個參數xml_frag&#xff0c;是xml標記片段&#xff0c;第二個參數…

JVM類加載過程詳解

文章目錄 前言1.加載2.鏈接驗證文件格式驗證元數據驗證字節碼驗證符號引用驗證 準備解析 3.初始化4.類卸載 前言 類從被加載到虛擬機內存中開始到卸載出內存為止&#xff0c;它的整個生命周期可以簡單概括為 7 個階段&#xff1a;加載&#xff08;Loading&#xff09;、驗證&a…

el-select 可搜索下拉框 在ios、ipad 無法喚出鍵盤,造成無法輸入

下一篇&#xff1a;el-select 可搜索下拉框&#xff0c;選中選項后&#xff0c;希望立即失去焦點&#xff0c;收起鍵盤&#xff0c;執行其他邏輯 【效果圖】&#xff1a;分組展示選項 >【去界面操作體驗】 首先&#xff0c;通過 夸克瀏覽器的搜索: el-select 在 ipad 輸入框…

前端框架的定制化:滿足項目獨特需求

hello寶子們...我們是艾斯視覺擅長ui設計和前端數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在數字化轉型浪潮中&#xff0c;前端技術體系已成為企業構建數字競爭力的核心戰場。當標準化前端框架…

Flutter網絡請求封裝:高效、靈活、易用的Dio工具類

在Flutter開發中&#xff0c;網絡請求是必不可少的功能。為了簡化代碼、提高開發效率&#xff0c;我們通常會封裝一個網絡請求工具類。本文基于Dio庫&#xff0c;詳細介紹如何封裝一個高效、靈活、易用的網絡請求工具類&#xff0c;支持以下功能&#xff1a; 單例模式&#xf…

MyBatis-Plus(SpringBoot版)學習第一講:簡介入門案例

目錄 1. MyBatis-Plus簡介 1.1 簡介 1.2 特性 1.3 支持的數據庫 1.4 框架結構 1.5 代碼及文檔地址 2. 入門案例 2.1 開發環境 2.2 創建數據庫及表 1. 創建表 2. 添加數據 2.3 創建SpringBoot工程 1. 初始化工程 2. 引入依賴 3. IDEA中安裝lombok插件 ?編輯 2.4 編…

k8s高可用集群安裝

一、安裝負載均衡器 k8s負載均衡器 官方指南 1、準備三臺機器 節點名稱IPmaster-1192.168.1.11master-2192.168.1.12master-3192.168.1.13 2、在這三臺機器分別安裝haproxy和keepalived作為負載均衡器 # 安裝haproxy sudo dnf install haproxy -y# 安裝Keepalived sudo yum …