配置文件 資料庫存儲引擎 嚴格模式 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
  • 移動開發(一):使用.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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...