從0開始回顧Mysql --- MySQL初體驗

大白話從0開始回顧MySQL,去除了一些繁瑣的操作的演示以及內容,如MySQL安裝等,本篇文章適合復習MySQL語法,學習MySQL語句,對MySQL不太熟練的同學,希望對大家有一些幫助。

MySQL初體驗

首先,我將Mysql安裝到了如下位置

image.png
我們點進bin目錄(bin目錄存放了許多可執行文件)

image.png
通常,我們是可以雙擊執行這些bin目錄下的可執行文件,常常會出現錯誤,我們需要傳遞一些參數讓它們正常運行,如bin目錄下有許多客戶端程序,比方說:mysqladmin,mysqldump,mysqlcheck等,我們啟動客戶端可執行文件一般參數格式如下:

mysql -h主機名 -u用戶名 -p密碼 (-p和密碼之間不要有空格)

image.png
本機連接可以忽略-h,連接成功的前提是必須開啟服務器程序,可以在任務管理器中查看

image.png
雖然之后編寫sql語句可能不在小黑框中編寫,我們還是需要簡單介紹一下MySQL語句的注意事項

  • 書寫結束符號

    • ;
    • \g
    • \G(不以表格形式展現)

image.png

  • 沒有大小寫問題 (NOW)
  • 語句可以隨意換行
  • 可以一次性提交多個語句
  • 使用\c放棄本次操作
  • 字符串表示

image.png

MySQL數據類型

Mysql把數據存到表中,表由若干行組成,每一行由若干列組成,下圖是一張文章表

image.png
一行代表一個文章的基本信息,一列代表基本信息的一個屬性,每個屬性有一定格式,不同格式是不能亂填的,比如不能把title填到用戶Id中,為了更好的規范表數據,MySQL設計者針對屬性不同格式定義的不同的數據類型。

數值類型

  • 整數類型

計算機采用若干個二進制來表示數字,一個二進制位只能表示21種信息,也就是0和1。

 無符號整數  :符號1就表示1,符號0表示0,數字范圍(0 ~ 1),有符號整數  :最左端的二進制數表示正負號,符號1就表示-1,符號0表示0, 數字范圍(-1 ~ 0)
二進制位無符號數代表數值有符號代表數值
0 000
0 111
1 02-2
1 13-1

一個二進制位所能存儲的信息實在太少,計算機一般采用8個二進制位作為分配空間的基本單位,也就是一個字節(Byte),我們采用的字節數越多,意味著數值范圍就越大,但消耗的存儲空間也就多,所以我們可以是根據字節數的不同,將整數劃分為以下幾個類型

image.png

在數據類型后面加上UNSIGNED單詞,表明是無符號數,在數據類型后面加上SIGNED單詞或者不加,表明有符號數

create table t3(age tinyint unsigned
);

在數據類型后面加,顯示寬度 (zerofill),整型顯示寬度, 位數不足時用 0 填充

create table t7(id int(10) zerofill primary key auto_increment,name char(32)
);
insert into t7 values(12345, '5個');
insert into t7 values(1234567890, '10個');
insert into t7 values(123456789012, '12個');
select * from t7;

image.png

浮點數類型

image.png

create table t5 (a float(10, 2),b double(10, 2),c decimal(10, 2)
);

注意:浮點數表示小數是不準確的,比如0.3用二進制是無限循環小數,有時候是需要進行取舍的, MySQL8.0之后float和double不推薦使用(M,D)格式,直接使用float和double即可

如果我們事先知道小數的范圍,就可以使用float(M,D)和double(M,D)這種格式,M 是支持多少個長度, D 是小數點后面的位數

如果想要精準的保存小數,我們可以采用定點數DECIMAL(M, D),M的最大值為65, D的最大值為30,D的值不能超過M的值它占用的存儲空間與M和D有關,這和它是如何解決小數因為取舍不精確有關,它將小數點分割開,將小數點左右倆個十進制整數分別存儲下來,關于它是如何分配的便簡單概述,感興趣的同學可以網上尋找。

  • 從小數點分別向左向右每隔9個十進制劃為一組,不足9個十進制也同樣進行
組中的十進制位數占用內存大小
1或 21字節
3 或 42字節
5 或 63字節
7 或 8 或 94字節

很多場景并不需要精細化處理,比如0.3元可以轉化成20分進行存儲,這樣使用整數存儲即可,還有在float,double,decimal類型后面添加unsigned是沒有必要的,并不會增加它們所能表示的正數范圍

日期和時間類型

image.png

  • datetime
create table datetime_test (create_at datetime
);insert into datetime_test values('2019-4-2 16:54:00');
insert into datetime_test values('2019/4/2 16:54:00');
insert into datetime_test values(now());
-- 年份最大支持4個長度
insert into datetime_test values('10000/4/2 16:54:00');  -- 錯誤
insert into datetime_test values('9999/4/2 16:54:00');
  • time
create table time_test (create_at time
);insert into time_test values('12:12:12');
insert into time_test values('100:12:12');
insert into time_test values('-100:12:12');
insert into time_test values('10 10:12:12');
-- 時間的范圍是: [-838:59:59 - 838:59:59]
insert into time_test values('839:12:12'); -- 錯誤的
  • timestamp 時間戳類型
  1. 時間戳類型在顯示方面和datetime是一樣的, 在存儲上不一樣
  2. 范圍從 1970-1-1 0:0:0 到 2038-1-19 11:14:07
  3. 時間戳使用 4 個字節表示
  4. 該值大小與存儲的位長有關: 2? ** (4* 8 - 1)
create table timestamp_test (create_time timestamp
);insert into timestamp_test values(now());
insert into timestamp_test values('2038-1-19 11:14:07');  -- 時間戳最大值
insert into timestamp_test values('2038-1-19 11:14:08');  -- 錯誤
  • year

    create table `year`(    create_at_year);
    -- 從1900年開始 - 1900+255
    insert into `year` values(now());
    insert into `year` values('2155'); 
    -- 年份最大值
    insert into `year` values('2156'); -- 錯誤
    

在MySQL 5.6.4版本之后,DATETIME存儲空間被優化成了5字節,提供對毫秒,微秒的支持,比如DATETIME(0)表示精確到秒,DATETIME(3)表示精確到毫秒,小時秒位在0~6之間選擇,保留的小數秒位不同,需要增加的內存空間也不同

保留的小數秒位額外需要增加的存儲空間
00字節
1或 21字節
3或42字節
5或 63字節

字符串類型

image.png

表一行數據字節數不能超過165535字節,這個對text是不生效的

字符編碼 : 字符是面向人的概念, 字節是面向計算機的概念,根據字符使用的字節數量是否是固定的可以分為下面倆種

1.固定長度編碼 :ASCII編碼采用一字節,GB2312采用2字節

2.可變長度編碼 :UTF-8采用1~ 4字節編碼,GB2312采用1~2字節編碼,Mysql中使用的utf8mb4就是正宗的UTF-8

CHAR?與?VARCHAR?類型的區別:

  1. 允許的最大值范圍不同。

    注意:無論是char(n)還是varchar(n),n表示的都是字符數,而不是字節數。

    • char(n)類型里,無論數據庫使用的是哪種編碼方式,n的最大取值都只能取到255,char = char(1),char(0)只能存""和null,
    • varchar(n)類型里,如果使用的是Latin1編碼,最大值允許到65535(但是實際取值只能到65532,還要保留三個字節用來記錄長度);如果使用的是UTF8編碼,最大值允許到21845(但是實際取值只能到21844,還要保留一個字符用來記錄長度)。
  2. 數據庫內存存儲的長度不同。

    • char(n)類型里,無論輸入的內容是什么,存儲的長度都是 n個字符。例如,數據類型char(10),寫入字符串’張三’,在數據庫里存入的數據長度是10個字符,所占字節數為n * 編碼集編碼一個字符需要的最大字節。
    • varchar(n)類型里,存儲的長度是不固定可變的。
  3. 對于空格的處理不同。

    • char類型在存儲字符串時,會將右側末尾的空格去掉。
    • varchar類型在存儲字符串時,會將右側末尾的空格保留。
    create table student (id int primary key auto_increment ,name char(20),city varchar(20));  -- 創建數據表
    insert into student values(0,'  zhangsan   ','   shanghai    '); -- 插入數據select concat(id,name,'good') from student where id=1;
    /*
    從查詢的結果中可以看到,name左側的空格保留了,但是右側的空格被去掉了
    +------------------------+
    | concat(id,name,'good') |
    +------------------------+
    | 1  zhangsangood        |
    +------------------------+
    */
    select name,length(name) from student where id=1;
    /*
    從查詢的結果中可以看到,長度只包括左邊的空格,不包括右邊的空格
    +------------+--------------+
    | name       | length(name) |
    +------------+--------------+
    |   zhangsan |           10 |
    +------------+--------------+
    */select concat(id,city,'good') from student where id=1;
    /*
    從查詢的結果中可以看到,city右側的空格也保留了
    +------------------------+
    | concat(id,city,'good') |
    +------------------------+
    | 1   shanghai    good   |
    +------------------------+
    */
    select city,length(city) from student where id=1;
    /*
    從查詢的長度中也可以看到,city兩端的空格都被保留了
    +-----------------+--------------+
    | city            | length(city) |
    +-----------------+--------------+
    |    shanghai     |           15 |
    +-----------------+--------------+
    */
    Copy
    
  • binary和varbinary類似于char和varchar,不同的是它們包含二進制字符串,不支持模糊查詢之類的,BINARY(M)和VARBINARY這個M存的是最大字節數。

枚舉(enum)

多選一的時候使用的一種數據類型

在前端使用單選框的時候, 枚舉類型可以發揮作用

枚舉類型的優點:

  1. 限制了可選值
  2. 節省空間
  3. 運行效率高
create table t6(name varchar(32),sex enum('男','女','保密') default '保密'
);-- 枚舉類型的計數默認從1開始
insert into t6 set name='王寶強',sex=1;
Copy

集合(set)

SET最多可以有64個不同的成員。類似于復選框, 有多少可以選多少。

create table t7 (name varchar(32),hobby set('吃','睡','玩','喝','抽')
);insert into t7 values('張三','睡,抽,玩,吃,喝');
insert into t7 values('李四','睡,抽');

BIT類型

類型占用存儲空間含義
BIT(M)近似(M +7)/ 8存儲M個二進制位的值

BLOG類型

這個可以用來存儲圖片,壓縮文件,音頻等,但我們通常將他們村在文件系統中,然后將路徑存到數據庫表中

MySQL初體驗到這就結束啦,如果您感覺有幫助的話,請點贊收藏,您的點贊是我創作的動力。

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

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

相關文章

如何在Window系統部署VisualSVN服務并結合cpolar實現無公網ip遠程訪問

文章目錄 前言1. VisualSVN安裝與配置2. VisualSVN Server管理界面配置3. 安裝cpolar內網穿透3.1 注冊賬號3.2 下載cpolar客戶端3.3 登錄cpolar web ui管理界面3.4 創建公網地址 4. 固定公網地址訪問 前言 SVN 是 subversion 的縮寫,是一個開放源代碼的版本控制系統…

數字孿生與智慧交通的融合發展:推動交通行業數字化轉型,構建智慧城市新生態

隨著信息技術的快速發展和城市化進程的深入推進,交通行業正面臨著前所未有的機遇與挑戰。傳統的交通管理模式已難以滿足日益增長的交通需求,而數字化轉型則成為了推動交通行業創新發展的必由之路。數字孿生技術作為一種前沿的信息技術手段,為…

聊一聊腦機接口

截至我所知的信息,腦機接口(Brain-Computer Interface, BCI)技術正在迅速發展,但仍處于相對早期階段。這一領域的研究涉及神經科學、工程學、計算機科學和人工智能等多個學科。以下是一些關于腦機接口目前進展的要點: …

基于springboot+vue的公寓報修管理系統

博主主頁:貓頭鷹源碼 博主簡介:Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰,歡迎高校老師\講師\同行交流合作 ?主要內容:畢業設計(Javaweb項目|小程序|Pyt…

每天的三哥牌小雞腿沒了

查看印度基金(164824)公告,從2024年2月28日起,暫停印度基金的申購,限額100塊的一拖七套利告一段落。這意味著看好印度股市的國內投資者,以后只能通過在場內買入獲得份額。 關于暫停申購的原因,官方說是為保護基金持有…

學Python如此簡單--停車管理模塊

簡介 (本停車場一個小時4塊) 模塊名稱:黑心停車管理模塊 模塊功能:汽車進場錄入、汽車出場收費 代碼 #進入停車場 def enter():print(歡迎進入黑心停車場)#模擬識別車牌號car_number input(請輸入車牌號:)t 0 #停車時間car…

重磅!交通領域頂級會議TRB會議將進行重大改革

美國交通研究委員會年會(Transportation Research Board annual meeting,以下簡稱TRB會議)是由美國交通研究委員會舉辦的交通領域的國際頂級會議。該會議每年舉辦一次,在華盛頓特區召開。TRB會議是交通研究領域知名度最高的學術會議之一&…

安裝 node 錯誤的配置環境變量之后使用 npm 報錯

安裝 node 錯誤的配置環境變量之后使用 npm 報錯 node:internal/modules/cjs/loader:1147 throw err; ^ Error: Cannot find module ‘F:\ACodeTools\Node\node_modules\npm\bin\node_modules\npm\bin\npm-cli.js’ at Module._resolveFilename (node:internal/modules/cjs/loa…

基于springboot實現企業員工績效考評系統項目【項目源碼+論文說明】

基于springboot實現企業員工績效考評系統演示 摘要 時代的變化速度實在超出人類的所料,21世紀,計算機已經發展到各行各業,各個地區,它的載體媒介-計算機,大眾稱之為的電腦,是一種特高速的科學儀器&#xf…

AI-數學-高中-32-統計-樣本空間與隨機事件

原作者視頻:【概率】【一數辭典】1樣本空間與隨機事件_嗶哩嗶哩_bilibili 1.隨機試驗: 2.樣本點、樣本空間、有限樣本空間: 示例1 示例2 3.事件: 示例:

[DEBUG] spring boot-如何處理鏈接中的空格等特殊字符

問題&#xff1a; get或者post中提交的內容可能有空格、#等特殊字符&#xff0c;不做處理的話可能解析錯誤。 解決&#xff1a; html中&#xff1a; <a th:href"{/listSgrna(id${item.getGeneId()},geneName${item.getGeneName()},genome${genome},sgrnaNum${sgrnaN…

Qt CMake 國際化相關配置

文章目錄 更新ts文件發布ts文件 本來用qmake使用pro文件很簡單的一件事&#xff0c;結果用cmake折騰了半天。 何必呢~ 參考&#xff1a;QT6.3 CMake 多語言切換 這是我的 cmake_minimum_required(VERSION 3.16)project(testQml3_6 VERSION 0.1 LANGUAGES CXX)set(CMAKE_AUTO…

06.QT信號和槽-1

一、信號和槽概述 在Qt中&#xff0c;用戶和控件的每次交互過程稱為一個事件。比如"用戶點擊按鈕"是一個事件&#xff0c;"用戶關閉窗口"也是一個事件。每個事件都會發出一個信號&#xff0c;例如用戶點擊按鈕會發出"按鈕被點擊"的信號&#xff…

Java練習(第5天)【總結】在字符串中尋找特定的字符(5種方法)

問題描述&#xff1a;在字符串中尋找特定字符 1、第1次出現位置 實現函數原型&#xff1a; int indexOf(char c) Java代碼&#xff1a; import java.io.*; public class Way_1 {public static void main(String args[]){String str "Geeks for Geeks is a computer s…

疲勞駕駛監測報警攝像機

疲勞駕駛是導致交通事故的重要原因之一&#xff0c;為了提高駕駛安全性&#xff0c;科技日新月異&#xff0c;疲勞駕駛監測報警攝像機因其先進的技術而成為關注焦點。 疲勞駕駛監測報警攝像機采用先進的人臉識別技術和人工智能算法&#xff0c;能夠實時監測駕駛員的狀態。通過對…

基于Python淘寶水果銷售數據可視化系統設計與實現(Django框架) 研究背景與意義、國內外研究現狀

博主介紹&#xff1a;黃菊華老師《Vue.js入門與商城開發實戰》《微信小程序商城開發》圖書作者&#xff0c;CSDN博客專家&#xff0c;在線教育專家&#xff0c;CSDN鉆石講師&#xff1b;專注大學生畢業設計教育和輔導。 所有項目都配有從入門到精通的基礎知識視頻課程&#xff…

文件操作和IO(2):Java中操作文件

目錄 一、File的屬性 二、File的構造方法 三、File的方法 四、代碼示例 1、getName&#xff0c;getParent&#xff0c;getPath方法 2、getAbsolutePath&#xff0c;getCanonicalPath方法 3、exists&#xff0c;isDirectory&#xff0c;createNewFile方法 4、createNewF…

龍蜥 Anolis OS8.4 設置IP

1、配置文件路徑 /etc/sysconfig/network-scripts/ [rootlocalhost ~]# cd /etc/sysconfig/network-scripts/ [rootlocalhost network-scripts]# ls ifcfg-ens32 進入配置文件路徑后&#xff0c;展示。ifcfg-ens32這個不同的服務器不一樣&#xff0c;本次虛擬機所對應的是ens3…

掌握AI文本生成的關鍵:深入解析Prompt、Token和Completions

在當今時代&#xff0c;人工智能&#xff08;AI&#xff09;技術的迅速發展已經成為我們生活和工作中不可或缺的一部分。特別是在自然語言處理&#xff08;NLP&#xff09;領域&#xff0c;生成式AI技術&#xff0c;如GPT-4和ChatGPT等&#xff0c;已經成為熱點。為了更好地理解…

2. vue 工程創建

1. 基于 vite創建 官方文檔: https://v3.cn.vuejs.org/guide/installation.html#vite vite官網: https://vitejs.cn 使用vite創建的優勢&#xff1a; 開發環境中&#xff0c;無需打包操作&#xff0c;可快速的冷啟動。輕量快速的熱重載(HMR)。真正的按需編譯&#xff0c;不再…