Mysql學習筆記(連載中)

来源:https://www.cnblogs.com/wutong666/archive/2023/04/06/17291722.html
-Advertisement-
Play Games

Mysql 01 使用CMD連接資料庫 -- 在控制台連接資料庫(需將位置切換到mysql所在地址) mysql -u root -p password:12345 -- 修改mysql賬戶密碼及許可權,安裝配置完後慎用 update mysql.user set authentication_str ...


Mysql

01 使用CMD連接資料庫

-- 在控制台連接資料庫(需將位置切換到mysql所在地址)
mysql -u root -p
password:12345

-- 修改mysql賬戶密碼及許可權,安裝配置完後慎用
update mysql.user set authentication_string = password('12345') where user = 'root' and Host = 'localhost';-- 修改用戶密碼
flush privileges; -- 刷新許可權

--------------------------------------------------
-- 所有語句需要使用;作為結尾
show databases; -- 查看所有資料庫

use test01; -- 切換資料庫 use+資料庫名

show tables; --查看資料庫中所有的表
describe `user`; --顯示某張表的信息

create database test01; -- 創建一個資料庫

exit; -- 退出連接

-- 單行註釋
-- 下麵是多行註釋
/*
hello
*/
  • 資料庫xxx語言 CRUD 增刪改查
    • DDL 定義
    • DML 操作
    • DQL 查詢
    • DCL 控制

02 操作資料庫

操作資料庫>操作資料庫中的表>操作資料庫中表的數據

mysql關鍵字不區分大小寫!!

2.1 操作資料庫

  • 創建資料庫
CREATE DATABASE test01; -- 創建資料庫01
-- 但問題是如果test01存在,系統會報錯
-- 所以一般會加入一個判斷條件
CREATE DATABASE IF NOT EXISTS test01;
  • 刪除資料庫
DROP DATABASE IF EXISTS test01;
  • 使用資料庫
-- tab鍵上方有一個``,如果資料庫的表名或者欄位名是一個特殊字元,就需要添加
USE `test01`;
  • 查詢資料庫
SHOW DATABASES; -- 查看所有資料庫

2.2 資料庫列數據類型

數字

2.3 資料庫欄位屬性(重要)

  • unsigned:

    • 無符號的整數
    • 聲明瞭該列不能填充負數
  • zerofill:

    • 0填充的
    • 不足位數在前面用0來填充,例如int(3),5-->005
  • 自增

    • 通常理解為自增,自動在上一條記錄的基礎上+1(預設)
    • 通常用來設計唯一的主鍵~index,必須是整數類型
    • 可以自定義自增步長
    • Navicat中Mysql自增設置在選項中

  • 非空 NULL not NULL
    • 假如設置為not null ,如果不給他賦值就會報錯!
    • NULL,如果不填寫值,預設就是NULL!
  • 預設:
    • 設置預設的值
    • 例如 sex,預設值為男性,如果沒有特別指定該列的值,則會有預設的值!
    • 需要註意,在Navicat中,預設值設置,自增,無符號以及填充零都在下方

  • 拓展
/*每一個表都必須存在以下五個欄位,未來做項目都有用,表示一個記錄存在的意義
id 主鍵
is_delete 偽刪除
gmt_create 創建時間
gmt_update 更新時間
*/

2.4 創建資料庫表(重點)

-- 目標:創建一個school資料庫
-- 創建學生表(列,欄位) 使用SQL語句創建
-- 學號int 登陸密碼varchar(20) 姓名 性別varchar(2) 出生日期(datetime) 家庭住址 email
-- 註意點,使用英文(),表的名稱和欄位儘可能使用``括起來
-- AUTO_INCREMENT 自增
-- 字元串使用單引號括起來;
-- 所有的語句後面加,(英文的),最後一個不用加
-- PRIMARY KEY 主鍵,一般一個表只有一個唯一的主鍵

CREATE TABLE IF NOT EXISTS `studentinformation`(
    `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '學號',
		`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT'姓名',
		`pwd` VARCHAR(20) NOT NULL DEFAULT '12345' COMMENT'密碼',
		`sex` VARCHAR(2) NOT NULL DEFAULT'男' COMMENT'性別',
		`birthday` DATETIME DEFAULT NULL COMMENT'出生日期',
		`address` VARCHAR(100) DEFAULT NULL COMMENT'家庭地址',
		`email` VARCHAR(50) DEFAULT NULL COMMENT'電子郵箱',
		PRIMARY KEY(`id`)
)ENGINE = INNODB DEFAULT CHARSET=utf8

格式

CREATE TABLE [IF NOT EXISTS] `表名`(
    `欄位名` 列類型 [屬性] [索引][註釋],
    `欄位名` 列類型 [屬性] [索引][註釋],
    ·······
    `欄位名` 列類型 [屬性] [索引][註釋]
)[表類型][字元集設置][註釋]

2.5 數據表的類型

-- 關於資料庫引擎
/*
INNODB 預設使用~
MYISAM 早些年使用
*/
MYISAM INNODB
事務支持 不支持 支持
數據行鎖定(同步) 不支持 支持
外鍵約束 不支持 支持
全文索引 支持 不支持
表空間大小 較小 較大,約為前者2倍

常規使用操作:

  • MYISAM 節約空間,速度較快
  • INNODB 安全性高,事務的處理,多表多用戶操作

在物理空間的位置

所有的資料庫文件都存在data目錄下

所以資料庫的本質還是文件的存儲

Mysql引擎在物理文件上的區別

  • InnoDB在資料庫表中只有一個*.frm文件,以及上級目錄下的ibdata1文件
  • MYISAM對應文件
    • *.frm 表結構的定義文件
    • *.MYD 數據文件(data)
    • *.MYI 索引文件(index)
  • 這裡有必要提到的是,MySQL8開始刪除了原來的frm文件,並採用 Serialized Dictionary Information (SDI), 是MySQL8.0重新設計數據詞典後引入的新產物,並開始已經統一使用InnoDB存儲引擎來存儲表的元數據信息。SDI信息源記錄保存在ibd文件中。
    如何可以查看表結構信息,官方提供了一個工具叫做ibd2sdi,在安裝目錄下可以找到,可以離線的將ibd文件中的冗餘存儲的sdi信息提取出來,並以json的格式輸出到終端。可參考一篇CSDN博客。https://blog.csdn.net/philipslu/article/details/102499234

設置資料庫表的字元集編碼

CHARSET = utf8

也可以採取在資料庫安裝目錄下新建一個ini文件的方式進行預設設置。不如不單獨設置,系統會預設為一個latin字元集,我的ini文件格式如下:

#設置3306埠
port=3306
#設置mysql的安裝目錄   ----------是你的文件路徑-------------
basedir=E:\WorkappPackage\Mysql\mysql-8.0.32-winx64
#設置mysql資料庫的數據的存放目錄  ---------是你的文件路徑data文件夾自行創建
#datadir=E:\WorkappPackage\Mysql\mysql-8.0.32-winx64\data
#允許最大連接數
max_connections=200
#允許連接失敗的次數。
max_connect_errors=10
#服務端使用的字元集預設為utf8mb4
character-set-server=utf8mb4
#創建新表時將使用的預設存儲引擎
default-storage-engine=INNODB
#預設使用“mysql_native_password”插件認證
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
#設置mysql客戶端預設字元集
default-character-set=utf8mb4
[client]
#設置mysql客戶端連接服務端時預設使用的埠
port=3306
default-character-set=utf8mb4

2.6 修改刪除表

修改

-- 修改表名:ALTER TABLE 舊表名 RENAME AS 新表名
ALTER TABLE test01 Rename AS test02

-- 增加表的欄位:ALTER TABLE 表名 ADD 欄位名 列屬性
ALTER TABLE test02 ADD age INT(10)

-- 修改表的欄位(重命名,修改約束)
-- ALTER TABLE 表名 MODIFY 欄位名 列屬性[]
ALTER TABLE test02 MODIFY age VARCHAR(10)
-- ALTER TABLE 表名 CHANGE 舊名字 新名字 列屬性[]
ALTER TABLE test01 CHANGE age age1 INT(1) -- 欄位重命名

-- 刪除表的欄位
ALTER TABLE test01 DROP age1
  • 可以觀察到,所有對於表的修改都是以ALTER開頭的

刪除

-- 刪除表(加入判斷條件,如果存在再刪除)
DROP TABLE IF EXISTS test01
  • 需要註意,所有的創建和刪除儘量加上判斷,以免出現報錯

03 MySQL數據管理

3.1 資料庫級別外鍵(瞭解)

方式一:在創建表的時候,增加外鍵語句和關聯語句等約束(比較複雜)

CREATE TABLE IF NOT EXISTS `studentinformation`(
    `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '學號',
		`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT'姓名',
		`pwd` VARCHAR(20) NOT NULL DEFAULT '12345' COMMENT'密碼',
		`sex` VARCHAR(2) NOT NULL DEFAULT'男' COMMENT'性別',
		`birthday` DATETIME DEFAULT NULL COMMENT'出生日期',
		`gradeid` INT(3) NOT NULL COMMENT'年級id',
		`address` VARCHAR(100) DEFAULT NULL COMMENT'家庭地址',
		`email` VARCHAR(50) DEFAULT NULL COMMENT'電子郵箱',
		PRIMARY KEY(`id`),
		KEY `FK_gradeid`(`gradeid`), -- 外鍵名稱設置
		CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`) -- 關聯約束設置
)ENGINE = INNODB DEFAULT CHARSET=utf8


CREATE TABLE IF NOT EXISTS `grade`(
    `gradeid` INT(3) NOT NULL COMMENT'年級id',
		`gradename` VARCHAR(10) NOT NULL COMMENT'年級名稱',
		PRIMARY KEY(`gradeid`)
)ENGINE = INNODB DEFAULT CHARSET=utf8
  • 運行結果如下

  • 可以看到此時由於外鍵關聯關係的存在,原表在刪除以及對某些欄位內容進行修改時都收到了約束
  • 刪除時需要先刪除引用的表,然後再回來刪除被引用的表

方法二:正如上面所示,可以在外鍵部分手動添加,這裡不做展開,與上面運行結果類似即可

方法三:

CREATE TABLE IF NOT EXISTS `grade`(
    `gradeid` INT(3) NOT NULL COMMENT'年級id',
		`gradename` VARCHAR(10) NOT NULL COMMENT'年級名稱',
		PRIMARY KEY(`gradeid`)
)ENGINE = INNODB DEFAULT CHARSET=utf8


-- 外部創建外鍵約束
CREATE TABLE IF NOT EXISTS `studentinformation`(
    `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '學號',
		`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT'姓名',
		`pwd` VARCHAR(20) NOT NULL DEFAULT '12345' COMMENT'密碼',
		`sex` VARCHAR(2) NOT NULL DEFAULT'男' COMMENT'性別',
		`birthday` DATETIME DEFAULT NULL COMMENT'出生日期',
		`gradeid` INT(3) NOT NULL COMMENT'年級id',
		`address` VARCHAR(100) DEFAULT NULL COMMENT'家庭地址',
		`email` VARCHAR(50) DEFAULT NULL COMMENT'電子郵箱',
		PRIMARY KEY(`id`)
)ENGINE = INNODB DEFAULT CHARSET=utf8

-- 創建表的時候沒有外鍵關係
-- 外部添加外鍵約束
ALTER TABLE `studentinformation`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)

-- 結構
ALTER TABLE 表
ADD CONSTRAINT 約束名 FOREIGN KEY(`作為外鍵的列`)
  • 但需要註意的是,以上的操作均為物理外鍵,是在資料庫級別進行操作的外鍵,一般不推薦使用。(避免資料庫過多造成困擾)

最佳實踐

  • 資料庫就是單純的表,只用來存數據,只有行(數據)和列(欄位)
  • 如果想使用多張表的關聯操作,即使用外鍵(在程式中實現)

參考文章:https://www.cnblogs.com/rjzheng/p/9907304.html

3.2 DML語言(需要全部記住)

資料庫意義:數據存儲、數據管理

DML語言:數據操作語言

  • INSERT
  • UPDATE
  • DELETE

3.3 添加INSERT

格式

-- 插入語句(添加)
-- INSERT INTO 表名 (`欄位名1`,`欄位名2`,`欄位名3`) VALUES('第一條數據欄位1數據','第一條數據欄位2數據','第一條數據欄位3數據'),('第二條數據欄位1數據','第二條數據欄位2數據','第二條數據欄位3數據')····

-- 例:
INSERT INTO `grade`(`gradename`)VALUES('大一')
-- 需註意的是,跟在表名後面的括弧內容可以選擇表中的部分欄位,但是需要觀察表結構,那些非空且沒有預設值的或者沒設置自增的欄位必須包括在內,否則會報錯。還需註意,選定了括弧內容後,VALUES後面的括弧內的結構需與前面保持一致。如果想一次性添加多條數據,需要在括弧中間用“,”隔開。

-- 錯誤示例:
INSERT INTO `grade` VALUES('大二')
-- 此處在表名`grade`後面沒有括弧,因此Mysql就會預設格式為全部欄位。依照上面所述,資料庫會對VALUES後面數據進行匹配。因此會報錯。
-- 正確示例:
INSERT INTO `grade` VALUES(2,'大二')

-- 插入多條數據
INSERT INTO `grade`(`gradename`)
VALUES ('大三'),('大四')
  • 再次強調,必須註意標點符號的中英文格式!

註意事項:

  • 欄位和欄位之間用英文逗號隔開
  • 欄位是可以省略的,但是後面括弧內的值需要一一對應,不能少
  • 可以同時插入多條數據,VALUES後面的值,需要使用隔開即可

3.4 修改UPDATE

3.5 刪除DELET


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # 大數據開發基礎學習編程語言往往是我們開啟學習之路的第一大步。大數據領域的很多框架都是基於Java語言開發的,而且各種框架也都提供了Java API來提供使用和操作介面,所以Java語言的學習逃不掉。除此之外Scala在必要時也可以學一下,在大數據開發領域里用得還是挺多的。Scala語言的表達能力 ...
  • 數據管理技術的發展 第一節 資料庫技術發展概述 數據模型是資料庫系統的核心和基礎 以數據模型的發展為主線,資料庫技術可以相應地分為三個發展階段: 第一代的網狀、層次資料庫系統 第二代的關係資料庫系統 新一代的資料庫系統 一、第一代資料庫系統 層次資料庫系統 層次模型 網狀資料庫系統 網狀模型 層次模 ...
  • ORACLE資料庫中ORACLE_SID與INSTANCE_NAME在概念和意義上有什麼異同呢?下麵簡單來總結概況一下,很多時候,不少人都搞不清楚兩者的異同,甚至認為兩者是等價的。 ORACLE_SID與INSTANCE_NAME的異同 ORACLE_SID參數是操作系統的環境變數,用於和操作系統進 ...
  • 最近寫了幾個簡單的spark structured streaming 的代碼實例。 目的是熟悉spark 開發環境搭建, spark 代碼開發流程。 開發環境: 系統:win 11 java : 1.8 scala:2.13 工具:idea 2022.2 ,maven 3, git 2.37 sp ...
  • 在日常工作中,我們會遇見一些慢SQL,在分析這些慢SQL時,我們通常會看下SQL的執行計劃,驗證SQL執行過程中有沒有走索引。通常我們會調整一些查詢條件,增加必要的索引,SQL執行效率就會提升幾個數量級。我們有沒有思考過,為什麼加了索引就會能提高SQL的查詢效率,為什麼有時候加了索引SQL執行反而會... ...
  • navicat15安裝破解教程 一.navicati15安裝 參考教程 安裝包文件查找過程不再這裡贅述了,大家自行百度,相關經驗帖很多。 二. 破解 啟動破解工具,並點擊Patch 點擊後選擇我們安裝navicat的目錄 註意第二步的相關配置 點擊Generate生成key 打開navicat15, ...
  • 摘要:本文主要介紹GaussDB(DWS)雲原生數倉架構、產品能力,幫助開發者快速瞭解GaussDB(DWS)雲原生數倉相關信息與能力。 本文分享自華為雲社區《直播回顧 | GaussDB(DWS)雲原生數倉技術解析》,作者:胡辣湯。 在本期《GaussDB(DWS)雲原生數倉技術解析》的主題直播中 ...
  • 2017年,美國信用評級機構 Equifax 遭受黑客攻擊,導致1.4億個人的敏感信息泄露; 2020年,發生了 SolarWinds 公司的軟體供應鏈遭受惡意代碼攻擊事件,涉及多個行業和國家; 2022年,網信辦依據《數據安全法》等法律法規,對滴滴公司開出人民幣80.26億元的巨額罰款,對互聯網企 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...