配置文件 資料庫存儲引擎 嚴格模式 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
  • 簡介 本文的初衷是希望幫助那些有其它平臺視覺演算法開發經驗的人能快速轉入Halcon平臺下,通過文中的示例開發者能快速瞭解一個Halcon項目開發的基本步驟,讓開發者能把精力完全集中到演算法的開發上面。 首先,你需要安裝Halcon,HALCON 18.11.0.1的安裝包會放在文章末尾。安裝包分開發和 ...
  • 本文是對Datawhale的動手學數據分析課程的學習總結,記錄了整體的學習過程、答案以及個人感想,代碼較為詳細。 ...
  • JZ7重建二叉樹 描述 給定節點數為 n 的二叉樹的前序遍歷和中序遍歷結果,請重建出該二叉樹並返回它的頭結點。 例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6} 提示: 1.vin.length == pre.length 2.pre 和 vin ...
  • 我們都知道在Java編程中多線程的同步使用synchronized關鍵字來標識,那麼這個關鍵字在JVM底層到底是如何實現的呢。 我們先來思考一下如果我們自己實現的一個鎖該怎麼做呢: 首先肯定要有個標記記錄對象是否已經上鎖,執行同步代碼之前判斷這個標誌,如果對象已經上鎖線程就阻塞等待鎖的釋放。 其次要 ...
  • 目錄 一.OpenGL 色階 1.Windows OpenGL ES 版本 2.Windows OpenGL 版本 二.OpenGL 色階 GLSL Shader 三.猜你喜歡 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 基礎 零基礎 Ope ...
  • 1. 查看Linux伺服器版本信息 # cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) 2. 禪道開源版安裝包下載 wget http://dl.cnezsoft.com/zentao/9.8.2/ZenTaoPMS.9.8. ...
  • Spring 框架可以為 Java 應用程式開發提供全面的基礎設施支持,它是現在非常流行的 Java 開源框架,對於一個 Java 開發人員來說,熟練掌握 Spring 是必不可少的。 ...
  • 前言 本篇是c++總結的第二篇,關於c++的對象模型,在構造、拷貝虛函數上重點分析,也包含了c++11class的新用法和特性,如有不當,還請指教! c++三大特性 訪問許可權 ​ 在c++中通過public、protected、private三個關鍵字來控製成員變數和成員函數的訪問許可權,它們分別表示 ...
  • 一.小結 1.使用二維數組來存儲表格 2.可以使用以下語法來聲明二維數組變數: 元素類型[ ] [ ]數組變數 3.可以使用以下語法來創建二維數組變數: new 元素類型 [行的個數][列的個數] 4.使用下麵的語法表示二維數組中的每個元素: 數組變數[行下標][列的個數] 5.可使用數組初始化語法 ...
  • typimg是一款為typora編輯器提供圖像自定義上傳服務的工具,該工具將在typora中輸入的網路圖片、本地圖片、剪貼板圖片/截圖上傳到博客園,支持在MacOS、Windiws、Linux三個平臺上運行。 ...