配置文件 資料庫存儲引擎 嚴格模式 MySQL欄位基本數據類型

来源:https://www.cnblogs.com/passion2021/archive/2022/11/23/16918427.html
-Advertisement-
Play Games

字元編碼與配置文件 \s查看MySQL相關信息 相關信息有:當前用戶、版本、編碼、埠號 MySQL5.6及之前的版本編碼需要人為統一 之後的版本已經全部預設統一 如果想要永久修改編碼配置 需要操作配置文件my-default.ini 註意事項: mysql預設埠號3306 當重覆起mysql服務 ...


目錄

字元編碼與配置文件

\s查看MySQL相關信息

相關信息有:當前用戶、版本、編碼、埠號
MySQL5.6及之前的版本編碼需要人為統一 之後的版本已經全部預設統一

如果想要永久修改編碼配置 需要操作配置文件my-default.ini

image
註意事項:

  1. mysql預設埠號3306 當重覆起mysql服務端時 記得查看埠號
  2. MySQL5.6版本及之前的版本 編碼既有拉丁文 也有gbk 需要人為統一
    MySQL5.6版本之後的MySQL編碼已經統一

修改配置文件my-default.ini

2.預設的配置文件是my-default.ini
	拷貝上述文件並重命名為my.ini
    
直接拷貝字元編碼相關配置即可無需記憶
    [mysqld]
        character-set-server=utf8mb4
        collation-server=utf8mb4_general_ci
    [client]
        default-character-set=utf8mb4
    [mysql]
        default-character-set=utf8mb4
ps:
    1.utf8mb4能夠存儲表情 功能更強大
    2.utf8與utf-8是有區別的 MySQL中只有utf8
 
修改了配置文件中關於[mysqld]的配置 需要重啟服務端

  
"""
利用配置文件我們可以偷懶
	將管理員登錄的賬號密碼直接寫在配置文件中 之後使用mysql登錄即可
	[mysql]
		user='root'
		password=123
"""

解決5.6版本字元編碼問題

  1. 配置文件位置
    image
  2. 查看配置文件介紹:
    image
  3. 拷貝一份並重命名為my.ini這個名字不能隨便取,放在旁邊(註意打開文件擴展名)
    image
  4. 在my.ini文件里修改配置信息
    image
  5. 重啟服務端(註意使用管理員cmd)
    image
  6. 修改成功
    image
補充說明:
1. mysql中'utf8'和'utf-8'這兩個是有區別的:mysql中只允許有utf8.
2. [client]表示第三方的客戶端 [mysql]表示自己寫的客戶端 [server]表示服務端.
3. 如果是8.0版本的mysql,則預設編碼是utfmb4.

配置文件什麼時候載入?

在mysqld的配置文件中加一串不明所以的代碼
image
重啟服務端,登錄mysql:
image
會直接報錯 連密碼都輸不進去了。所以說配置文件是在客戶端啟動之前載入的。

偷懶操作:輸入mysql直接登錄root賬戶

修改配置文件:
image
實現不輸入密碼直接登錄,原來是賬號密碼寫配置文件里了:
image

資料庫存儲引擎

存儲引擎簡介

資料庫針對數據採取的多種存取方式

舉例:
不同的引擎針對相同的數據 採取的方式不一樣
給小勇,小紅一份數據:
小勇 ---> 存電腦 取的時候:小勇乖乖拿過來
小紅 ----> 存網盤 取的時候:小紅叫我過來拿

查看引擎 show engines;

在mysql中使用show engines;命令查看引擎:
image
表格從左到右 ---> 引擎 模式 描述 事務 斷點
事務:當兩個不同的資料庫交互時 例如小紅轉賬時 銀行癱瘓 只扣錢沒加錢 事務可以讓時間倒流

需要瞭解的四個存儲引擎

  1. MyISAM
    MySQL5.5之前預設的存儲引擎
    存取數據的速度快 但是功能較少 安全性較低
    myisam 不支持事務 行鎖表鎖

  2. InnoDB
    MySQL5.5之後預設的存儲引擎
    支持事務、行鎖、外鍵等操作 存取速度沒有MyISAM快 但是安全性更高

  3. Memory
    基於記憶體存取數據 僅用於臨時表數據存取
    基於hash 預設不持久保存

  4. BlackHole
    任何寫入進去的數據都會立刻丟失
    備份時數據的處理

瞭解不同存儲引擎底層文件個數

查看表的存儲引擎:
image

瞭解不同存儲引擎底層文件個數
	create database db2;
 	use db2;
	create table t1(id int) engine=innodb;
 	create table t2(id int) engine=myisam;
  	create table t3(id int) engine=memory;
 	create table t4(id int) engine=blackhole;
	'''
	1.innodb兩個文件
		.frm	表結構
		.ibd	表數據(表索引)
	2.myisam三個文件
		.frm	表結構
		.MYD	表數據
		.MYI	表索引
	3.memory一個文件
		.frm	表結構
	4.blackhole一個文件
		.frm	表結構
	'''
 	insert into t1 values(1);
 	insert into t2 values(1);
 	insert into t3 values(1);
 	insert into t4 values(1);
'''
表索引相當於書的目錄 用於加快數據查詢
memery 基於記憶體所以沒有表數據 文件是操作系統暴露出來給用戶操作硬碟的快捷方式'''
ps:MySQL預設忽略大小寫
  1. 創建表:
    image
  2. 查看文件:
    image

驗證memory\blackhole 數據消失

t3 重啟服務數據消失:
image
t4 數據直接消失:
image

創建表的完整語法(重要)

'''
create table 表名(
	欄位名 欄位類型(數字) 約束條件,
	欄位名 欄位類型(數字) 約束條件,
 	欄位名 欄位類型(數字) 約束條件
);
'''   
1.欄位名和欄位類型是必須的
2.數字和約束條件是可選的
3.約束條件也可以寫多個 空格隔開即可
4.'''最後一行結尾不能加逗號'''

ps:編寫SQL語句報錯之後不要慌 仔細查看提示 會很快解決 
    	near ')' at line 7

欄位類型之整型

tinyint			1bytes			正負號(占1bit)
smallint		2bytes			正負號(占1bit)
int			4bytes		        正負號(占1bit)
bigint			8bytes			正負號(占1bit)

image

驗證整型預設是否攜帶正負號

create table t5(id tinyint);
insert into t5 values(-129),(128);

  1. 創建表
    image
  2. 插入值
    image

結果是-128和127 也就意味著預設自帶正負號
正負數也要占用一個bit位 故只能存128
手機號(13位)存儲時,Int的位數不夠(10位) 需要使用bigint、字元串。

取消正負號

我們也可以取消正負號,使用約束條件unsigned.
create table t6(id tinyint unsigned);
insert into t6 values(-129),(128),(1000);
image

嚴格模式

當我們在使用資料庫存儲數據的時候 如果數據不符合規範
應該直接報錯而不是擅自修改數據 這樣會導致數據的失真(沒有實際意義)
正常情況下是應該報錯 但是我們之前修改了配置文件 將嚴格模式的配置代碼給刪掉了

查看當前資料庫是否有嚴格模式

代碼的意思是找出所有帶mode的配置信息:
show variables like '%mode%';
image
這表示沒有開啟嚴格模式

臨時修改

	set session sql_mode='strict_trans_tables';
    	在當前客戶端有效 當前用戶有效 用戶退出之後重新登錄無效
 	set global sql_mode='strict_trans_tables';
    	在當前服務端有效 只要伺服器沒重啟 對所有用戶都有效

image

永久修改

改配置文件:
sql mode = STRICT TRANS TABLES
image

欄位類型之浮點型

語法:
float (存儲數字的位數,小數點後面的數)

float(20,10)
	總共存儲20位數 小數點後面占10
double(20,10)
	總共存儲20位數 小數點後面占10
decimal(20,10)
	總共存儲20位數 小數點後面占10

create table t7(id float(60,20));
create table t8(id double(60,20));
create table t9(id decimal(60,20));
insert into t7 values(1.11111111111111111111);
insert into t8 values(1.11111111111111111111);
insert into t9 values(1.11111111111111111111);

三者的核心區別在於精確度不同
	float	<	double  < 	decimal

image
驗證三者精確度:
image

欄位類型之字元類型(重要)

char
	定長
    	char(4)  最多存儲四個字元 超出就報錯 不夠四個空格填充至四個
varchar
	變長
    	varchar(4) 最多存儲四個字元 超出就報錯 不夠則有幾位存幾位

create table t10(id int, name char(4));
create table t11(id int, name varchar(4));
insert into t10 values(1, 'jason1');
insert into t11 values(1, 'jason2');

ps:char_length()獲取欄位存儲的數據長度
預設情況下MySQL針對char的存儲會自動填充空格和刪除空格

數字限制存儲的字元長度:
image

驗證定長和變長

  1. 建立表:
    image
  2. 使用char_length()查看字元長度
    image
  3. 大失所望:char怎麼沒有填充空白?
    mysql存的時候真的是有空格 取出的時候會將空格去掉
    所以還是1 可以取消這個機制 但是沒必要取消

取消mysql自動去掉空格的特性

輸入:
set global sql_mode='strict_trans_tables,pad_char_to_full_length';
註意這修改的是服務端層面,重啟服務端則失效。
image
重新登錄:
image

char VS varchar

char
        優勢:整存整取 速度快
        劣勢:浪費存儲空間
varchar
    	優勢:節省存儲空間 
       	劣勢:存取數據的速度較char慢
"""
char與varchar的使用需要結合具體應用場景

char(32)存中國人名字 劣勢 因為大多數人名字都是兩三個字 少部分人名字長 
存姓名 用varchar
存手機號碼 男女性別 用char
"""

為什麼varchar的存取速度慢?

# 為什麼varchar存取速度較慢?
char取固定位數 直接拿就好了
jasonjacktomjerry 不知道存的時候是幾位
不知道要取幾位的時候 使用報頭
存數據時用1bytes作為報頭
取的時候先取一個位元組的報頭 解析數據真實的長度:
1bytes+jack 1bytes+tony 1bytes+jason 1bytes+kevin 1bytes+tom 1bytes+jerry
報頭1bytes不夠用怎麼辦?

補充

image

int類型中數字的含義

數字在很多地方都是用來表示限制存儲數據的長度
但是在整型中數字卻不是用來限制存儲長度

  1. 不是用來限制存儲長度:
    create table t12(id int(3));
    insert into t12 values(12345);
    image
  2. 而是用來控制展示的長度:
    create table t13(id int(5) zerofill);
    insert into t13 values(123),(123456789);
    create table t14(id int);
    image
    3.以後寫整型無需添加數字,會預設添加數字
    image

欄位類型之枚舉與集合

枚舉

多選一
create table t15(
	id int,
  	name varchar(32),
   gender enum('male','female','others')
);
insert into t15 values(1,'tony','猛男');
insert into t15 values(2,'jason','male');
insert into t15 values(3,'kevin','others');
  1. 給表添加枚舉類型
    image
  2. 欄位不對:
    image
  3. 添加成功
    image

集合

集合包括枚舉!

多選多(多選一)
create table t16(
	id int,
  	name varchar(16),
   hobbies set('basketabll','football','doublecolorball')
);
insert into t16 values(1,'jason','study');
insert into t16 values(2,'tony','doublecolorball');
insert into t16 values(3,'kevin','doublecolorball,football');
  1. 給表添加集合類型
    image
  2. 無法輸入集合外的數據
    image

欄位類型之日期類型

datetime		年月日時分秒
date			年月日
time			時分秒
year			年

create table t17(
	id int,
  	name varchar(32),
 	register_time datetime,
 	birthday date,
 	study_time time,
 	work_time year
);
insert into t17 values(1,'jason','2000-11-11 11:11:11','1998-01-21','11:11:11','2000');
ps:以後涉及到日期相關欄位一般都是系統自動回去 無需我們可以操作
'''
以後所有的表都要用日期類型
datatime可以切割 想怎麼切怎麼切 用mysql內置函數 流程式控制制'''
  1. 添加時間類型
    image
  2. 給時間類型添加值
    image
    更多:
    image
    關於 DATETIME 與 TIMESTAMP 兩種類型如何選用,可以按照存儲需求來,比如要求存儲範圍更廣,則推薦使用 DATETIME ,如果只是存儲當前時間戳,則可以使用 TIMESTAMP 類型。不過值得註意的是,TIMESTAMP 欄位數據會隨著系統時區而改變但 DATETIME 欄位數據不會。總體來說 DATETIME 使用範圍更廣。

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

-Advertisement-
Play Games
更多相關文章
  • windowserver2012伺服器部署.net core3.1環境操作文檔 一、安裝.net core3.1要先具備這些系統補丁,如果沒有則需要安裝,這些 KB 必須按以下順序安裝:(clearcompressionflag.exe、KB2919442、KB2919355、KB2932046、K ...
  • rpm環境安裝dpkg包管理工具 索引:dpkg-scanpackages、dpkg、dpkg-query、dpkg-source、dpkg-scansource 在centos、redhat、麒麟伺服器版本中想對deb包進行管理,那麼就需要安裝dpkg包管理工具 主要是解決一些內網環境的特定包的需 ...
  • 使用的MCU型號為 AIR32F103CCT6. 通過工作機制和示例代碼, 說明如何使用AIR32自帶的記憶體實現簡單的語音錄製和播放功能, 以及使用 ADPCM 對音頻數據進行壓縮, 提高錄製時長. 通過這些機制, 可以快速擴充為實用的錄製設備, 例如外掛I2C或SPI存儲, 或提升無線傳輸的音質,... ...
  • 1、安裝軟體包時報錯 sudo apt-get install make libc6:i386 lib32z1 lib32stdc++6 zlib1g-dev libncurses5-dev ncurses-term libncursesw5-dev g++ u-boot-tools:i386 te ...
  • powercfg /lastwake 查詢誰喚醒了我的電腦。 禁止設備喚醒電腦:設備管理器——滑鼠和其它指針設備——電源管理——允許此設備喚醒電腦(取消勾選) ...
  • Mac 如何連接遠程伺服器 iTerm2可以以明文保存密碼,實現快速連接遠程伺服器,但是,密碼最好不要暴露在明文里。我們可以藉助更為通用的方法。 在Mac這樣的類UINX系統中,使用iTerm2這樣的終端工具(當然也可以使用Mac自帶的終端)連接遠程伺服器,邏輯是比較通暢的,不需要像Win那樣使用X ...
  • 一、創建表的完整語法 1、創建表的語法 create table 表名( ​ 欄位名1 欄位類型(數字) 約束條件, ​ 欄位名2 欄位類型(數字) 約束條件, ​ 欄位名3 欄位類型(數字) 約束條件,...) 2、創建表的條件 欄位名和欄位類型必須填寫 數字和約束條件是可選的,可以不填 約束條件 ...
  • 我們將 身份驗證 選擇為 SQL Server 身份驗證。輸入剛剛創建的用戶名和密碼: 但是現在還是不能直接使用,因為許可權問題。你會看到下麵的錯誤提示框: 解決問題的方法 所以,我們現在還是需要通過 Windows 身份驗證 連接資料庫。在裡面進行下麵的設置設置。 Step 1 . 對著伺服器,點擊 ...
一周排行
    -Advertisement-
    Play Games
  • JWT(JSON Web Token)是一種用於在網路應用之間傳遞信息的開放標準(RFC 7519)。它使用 JSON 對象在安全可靠的方式下傳遞信息,通常用於身份驗證和信息交換。 在Web API中,JWT通常用於對用戶進行身份驗證和授權。當用戶登錄成功後,伺服器會生成一個Token並返回給客戶端 ...
  • 老周在幾個世紀前曾寫過樹莓派相關的 iOT 水文,之所以沒寫 Nano Framework 相關的內容,是因為那時候這貨還不成熟,可玩性不高。不過,這貨現在已經相對完善,老周都把它用在項目上了——第一個是自製的智能插座,這個某寶上50多塊可以買到,搜“esp32 插座”就能找到。一種是 86 型盒子 ...
  • 引言 上一篇我們創建了一個Sample.Api項目和Sample.Repository,並且帶大家熟悉了一下Moq的概念,這一章我們來實戰一下在xUnit項目使用依賴註入。 Xunit.DependencyInjection Xunit.DependencyInjection 是一個用於 xUnit ...
  • 在 Avalonia 中,樣式是定義控制項外觀的一種方式,而控制項主題則是一組樣式和資源,用於定義應用程式的整體外觀和感覺。本文將深入探討這些概念,並提供示例代碼以幫助您更好地理解它們。 樣式是什麼? 樣式是一組屬性,用於定義控制項的外觀。它們可以包括背景色、邊框、字體樣式等。在 Avalonia 中,樣 ...
  • 在處理大型Excel工作簿時,有時候我們需要在工作表中凍結窗格,這樣可以在滾動查看數據的同時保持某些行或列固定不動。凍結窗格可以幫助我們更容易地導航和理解複雜的數據集。相反,當你不需要凍結窗格時,你可能需要解凍它們以獲得完整的視野。 下麵將介紹如何使用免費.NET庫通過C#實現凍結Excel視窗以鎖 ...
  • .NET 部署 IIS 的簡單步驟一: 下載 dotnet-hosting-x.y.z-win.exe ,下載地址:.NET Downloads (Linux, macOS, and Windows) (microsoft.com) .NET 部署 IIS 的簡單步驟二: 選擇對應的版本,點擊進入詳 ...
  • 拓展閱讀 資料庫設計工具-08-概覽 資料庫設計工具-08-powerdesigner 資料庫設計工具-09-mysql workbench 資料庫設計工具-10-dbdesign 資料庫設計工具-11-dbeaver 資料庫設計工具-12-pgmodeler 資料庫設計工具-13-erdplus ...
  • 初識STL STL,(Standard Template Library),即"標準模板庫",由惠普實驗室開發,STL中提供了非常多對信息學奧賽很有用的東西。 vector vetor是STL中的一個容器,可以看作一個不定長的數組,其基本形式為: vector<數據類型> 名字; 如: vector ...
  • 前言 最近自己做了個 Falsk 小項目,在部署上伺服器的時候,發現雖然不乏相關教程,但大多都是將自己項目代碼複製出來,不講核心邏輯,不太簡潔,於是將自己部署的經驗寫成內容分享出來。 uWSGI 簡介 uWSGI: 一種實現了多種協議(包括 uwsgi、http)並能提供伺服器搭建功能的 Pytho ...
  • 1 文本Embedding 將整個文本轉化為實數向量的技術。 Embedding優點是可將離散的詞語或句子轉化為連續的向量,就可用數學方法來處理詞語或句子,捕捉到文本的語義信息,文本和文本的關係信息。 ◉ 優質的Embedding通常會讓語義相似的文本在空間中彼此接近 ◉ 優質的Embedding相 ...