【MySQL】數據類型和表的操作

目錄

一. 常用的數據類型

1.數值類型

1.1 整形類型

?1.2 浮點型類型

2.字符串類型

char和varchar的區別

如何選擇char和varchar

3.日期類型

4.二進制類型

二. 表的操作

1.查看所有表

2.表的創建

3.查看表的結構

4.表的修改

4.1 添加新的列

?4.2 修改表中現有的列

?4.3 刪除表中現有的列

4.4 重命名表中現有的列

?4.5 重命名當前表

5.表的刪除


一. 常用的數據類型

在我們日常開發中最用的MySQL數據類型有:數值類型、字符串類型、日期型類型、二進制類型,MySQL中的數據類型和我們之前學習的java中的基本類型是類似的,都是用來存儲不同類型的數據,接下來我們分別來認識一下這些類型的特點。

1.數值類型

1.1 整形類型

注:M表示每個值的位數

類型大小說明
BIT[(M)]bit只能存0或者1(相當于只能存二進制位的數)取值范圍為1 ~ 64,省略M則默認大小為1
TINYINT1byte取值范圍-2^7 ~ 2^7-1,無符號取值范圍2^8-1
BOOL1byte只能包含1位數字的值,值為0則為假,非零則為真
SMALLINT[(M)]2byte取值范圍 -2^15 ~ 2^15-1,無符號取值范圍2^16-1
MEDIUMINT[(M)]3byte取值范圍 -2^23 ~ 2^23-1,無符號取值范圍2^24-1
INT[(M)]4byte取值范圍 -2^31 ~ 2^31-1,無符號取值范圍2^32-1
INTEGER[(M)]4byteINT[(M)]的同義詞(用哪個都行)
BIGINT[(m)]8byte取值范圍 -2^63 ~ 2^63-1,無符號取值范圍2^64-1

在現在存儲資源不缺乏的情況下,我們能用BIGINT類型就用BIGINT類型,因為取值范圍更大,避免不必要的錯誤

?1.2 浮點型類型

類型大小說明
FLOAT[(M,D)]4byte單精度浮點型,M表示總位數,D表示小數點后面的位置,大約可以精確到小數點后面7位
DOUBLE[(M,D)]8byte雙精度浮點型,M表示總位數,D表示小數點后面的位置,大約可以精確到小數點后面15位
DECIMAL[(M,D)]動態不存在精度丟失,DECIMAL的最大位數為65
,最??數位數為30。如果省略M,則默認為10,如果省略D,則默認為0。M中不計算?數點和負數的-號,如果D為0,則值沒有?數點和?數部分。

因為FLOATDOUBLE的精度丟失問題,在我們的開發中時一般不使用這兩種類型,我們都使用DECIMAL,那么DECIMAL是如何保證數據精度是不受損失的?

假設我們現在有一個浮點數:123456789987654321123456789.123456789987654321123456789

那么Decimal的底層是將這個浮點數進行拆分,每一份用一個int表示:(小數點和符號不記錄)

整數位:123456789 | 987654321 | 123456789 | 小數位:123456789 | 987654321 | 123456789?

整數部分用了3個int表示,小數部分用了3個int表示


那么假設后面還有多余的小數(剩余部分),那么就會使用最小的合適的數據類型進行存儲,最終通過這樣的方式保存數據,就保證了數據精度不受損失。

那么在我們真實的開發過程中,如果遇上描述金額的所需要的數據類型時,一般有以下兩種解決方式:

  1. 用上述說的不損失精度的Decimal類型
  2. 將金額的單位轉換成分或者更小的單位,使用int類型去存儲(這是一個小技巧)

2.字符串類型

類型說明
CHAR[(M)]固定長度的字符串,以字符為單位,取值范圍為0 ~ 255,M省略長度默認為1
VARCHAR[(M)]可變長度字符串,取值范圍為0 ~ 65535 ,有效字符個數取決于實際字符數和使用字符集,例如使用utf8mb4字符集時65535/4約等于16383個字符
TINYTEXT小文本類型,最大長度為255個字節
TEXT[(M)]文本類型,最大長度為65535字節
MEDIUMTEXT中文本類型,最大長度為16777215字節
LONGTEXT大文本類型,最大長度為4294967295字節
enum(value,value...)枚舉類型:
  • 從值列表 'value1','value2' ''(空字符串) NULL 中選?個值
  • 最多可以有 65,535 個不同的元素
set(value,value...)
集合
  • 從值列表 'value1','value2' 中選零個或多個值
  • 最多64個元素

注:當我們使用TEXT類型時,如果超出的最大長度,那么它就是自動變為MEDIMTEXT類型,當超出?MEDIMTEXT類型時就會自動轉變成LONGTEXT類型

char和varchar的區別

  • char是固定長度的字符串,獲取列的值時會從尾部刪除空格(就像java中的next()讀入一樣,不會讀入末尾的空格,但是一個字符串如果中間存在空格,那么是會保留的)
  • varchar是可變長度字符串,有效?度取決于實際字符數和使?的字符集,獲取列的值時不會從尾部刪除空格,插?數據時會刪除超出?度的空格。

舉個例子:

varchar類型的字符串是會保留空格的,char類型的字符串將后面的空格進行了刪除?

如何選擇char和varchar

  • ?如果數據確定?度都?樣,就使?定? CHAR 類型,?如:?份證,md5,學號,郵編。
  • 如果數據?度有變化,就使?變? VARCHAR , ?如:名字,地址,但要規劃好?度,保證最?的字符串能存的進去。
  • 定? CHAR 類型?較浪費磁盤空間,但是效率?。
  • 變? VARCHAR 類型?較節省磁盤空間,但是效率低?

3.日期類型

類型大小說明
DATE3 bytes日期類型
?持范圍 1000-01-01 ~ 9999-12-31
顯?格式為 YYYY-MM-DD
TIME3 bytes
時間類型
?持范圍 -838:59:59.000000 ~ 838:59:59.000000
顯?格式為 hh:mm:ss
DATETIME
8 bytes
?期類型和時間類型的組合
?持范圍 1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.499999
顯?格式為 YYYY-MM-DD hh:mm:ss[.fraction]
YEAR1 bytes
4位格式的年份
?持范圍 1901 ~ 2155
顯?格式為 YYYY

4.二進制類型

類型說明
BINARY固定長度二進制字節,存儲的是二進制字節,取值范圍0~255
VARBINARY可變長度二進制字節,存儲的是二進制字節

注:在現在的開發中我們已經不使用二進制類型來存儲數據了?,了解即可

二. 表的操作

數據庫中的表就像java中的一個類,那么我們一起來學習一下表的基本操作,那么我們需要先新建一個庫,在庫中來實現表的一些操作~

1.查看所有表

在創建表之前,我們肯定需要查看一下當前庫中已經具備了哪些表,以防止重復創建:

show tables;

?那么可以看見當前庫中沒有任何的表,這時候我們就要來創建表啦!

2.表的創建

創建表的語法:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_namefield datatype [約束] [comment '注解內容'][, field datatype [約束] [comment '注解內容']] ...
) [engine 存儲引擎] [character set 字符集] [collate 排序規則];
  • field:列名
  • datatype:數據類型
  • comment:對列的描述或說明
  • engine:存儲引擎,不指定則使?默認存儲引擎
  • character set:字符集,不指定則使?默認字符集
  • collate:排序規則,不指定則使?默認排序規則

?現在我們來創建一個學生表:

create table users (name VARCHAR(20) comment'姓名',age BIGINT COMMENT'年齡',class VARCHAR(20)COMMENT'班級'
) CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;

?

?此時一個學生表就創建完成了,接下來我們查看一下當前學生表的結構~

3.查看表的結構

語法:

desc 表名;

?查看剛才創建的學生表:

  • Field:表中的列名
  • Type:列的數據類型
  • Null:該列的值是否允許為Null
  • Key:該列的索引類型
  • Default:該列的默認值
  • Extra:擴展信息

4.表的修改

在我們的項目實際開發中,經常會對表結構進行調整,這個時候就要對表進行修改操作

ALTER TABLE tbl_name [alter_option [, alter_option] ...];
alter_option: {table_options| ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]| MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]| DROP [COLUMN] col_name| RENAME COLUMN old_col_name TO new_col_name| RENAME [TO | AS] new_tbl_name
  • tbl_name:要修改的表名
  • ADD:向表中添加列
  • MODIFY:修改表中現有的列
  • DROP:刪除表中現有的列
  • RENAME COLUMN:重命名表中現有的列
  • RENAME [TO | AS] new_tbl_name:重命名當前的表

?這么多修改表的操作,我們一個一個來看:

4.1 添加新的列

假設我們現在需要為剛才創建的添加一個birthday列;

此時birthday列就被添加成功了,那么這是在尾部插入一個新的列,那么現在我想在頭部插入一個gender列能不能實現呢?其實是可以實現的,只需要將最后的after改成first即可:

?4.2 修改表中現有的列

那么假設說現在name列的varchar( 20 )不夠用了,我需要做出調整改成varchar( 40 ):

?4.3 刪除表中現有的列

現在我不需要birthday這個列了,需要將它刪除:

此時表中的birthday這個字段就被刪除了

4.4 重命名表中現有的列

現在我需要將表中的name字段重命名成studentname:

?4.5 重命名當前表

我現在需要將當前student表重命名成students:

5.表的刪除

語法:

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
  • TEMPORARY:表?臨時表
  • tbl_name:將要刪除的表名

?現在我們將剛才創建的students表刪除:

刪除表不僅可以單個刪除,同時也可以進行多個刪除,那么我們現在重新創建兩個表:student表和class表,然后進行多個表同時刪除

?注:表的創建和刪除跟庫的創建和刪除是類似的,都可以加上 if not exists 和 if exists來防止報錯

?

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

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

相關文章

漲薪技術|0到1學會性能測試第43課-apache status模塊監控

前面的推文我們認識了apache目錄結構與配置知識,今天我們繼續來看下apache監控技術,究竟是怎么做性能監控的。后續文章都會系統分享干貨,帶大家從0到1學會性能測試。 Apache監控技術 關于apache監控通常會有兩種方法: 一是:使用apache自帶的status監控模塊進行監控; 二是…

關于 MCP 的理論知識學習

文章目錄 1. 寫在最前面2. 基本概念2.1 Why MCP2.1.1 大模型訪問的局限2.1.2 過渡階段—Function Call2.1.3 當前階段— MCP 3. 碎碎念4. 參考資料 1. 寫在最前面 最近有一項任務是寫舊版本遷移到新版本的支持文檔,文檔的編寫是借助于 cursor 幫忙寫的。但是實現的…

C++學習之路,從0到精通的征途:List類的模擬實現

目錄 一.list的介紹 二.list的接口實現 1.結點 2.list結構 3.迭代器 (1)begin (2)end 4.修改 (1)insert (2)push_back (3)push_front &#xff0…

【游戲ai】從強化學習開始自學游戲ai-2 使用IPPO自博弈對抗pongv3環境

文章目錄 前言一、環境設計二、動作設計三、狀態設計四、神經網路設計五、效果展示其他問題總結 前言 本學期的大作業,要求完成多智能體PPO的乒乓球對抗環境,這里我使用IPPO的方法來實現。 正好之前做過這個單個PPO與pong環境內置的ai對抗的訓練&#…

計算機考研精煉 操作系統

第 14 章 操作系統概述 14.1 基本概念 14.1.1 操作系統的基本概念 如圖 14 - 1 所示,操作系統是計算機系統中的一個重要組成部分,它位于計算機硬件和用戶程序(用戶)之間,負責管理計算機的硬件資源,為用戶和…

什么是基爾霍夫第一定律

基爾霍夫第一定律(Kirchhoffs First Law),也稱為基爾霍夫電流定律(Kirchhoffs Current Law,簡稱 KCL),是電路分析中最基礎的定律之一。它描述了電路中電流的守恒特性,適用于任何集總…

解決 RN Switch 組件在安卓端樣式很丑的問題

解決此種問題的方式有很多 可以導入原生庫react-native-switch 切圖 (會缺少動畫) 使用 js 組件 這里使用 js 繪制組件(原生體驗)解決此類問題 Switch.tsx import React, { useEffect, useRef, useState } from react; import { Animated, Pressabl…

【AI】【MCP】搭建私人王炸MCP自動化工作流

目錄 一、什么是MCP 二、MCP大集合 三、準備工作 3.1 安裝node.js 3.2 安裝vscode 3.3 安裝cline插件 3.3.1 安裝 3.3.2 配置Cline 四、配置MCP服務 4.1 Search-mcp服務 4.2 playwright-mcp 服務 前言:夢想組合,輕松辦公,告別手動&a…

Git 實操:如何使用交互式 Rebase 移除指定提交(真實案例分享)

在日常開發中,有時候我們提交了一些不想保留的記錄,比如測試代碼、錯誤的功能提交等。 ?? 在操作 4. 強制推送到遠程倉庫前的注意事項 強制推送(git push --force 或 git push -f)確實很強大但也危險,因為它會重寫…

11.Excel:函數

一 函數是什么 函數是定義好的公式。 單元格內輸入sum然后tab,框選要求和的范圍,然后回車鍵。 補充:公式。 公式以開頭,可以用于計算,返回數值。 分別點擊各個數值,中間用加號連接。這樣很不方便&#xff…

Springboot使用ThreadLocal提供線程局部變量,傳遞登錄用戶名

文章目錄 概述使用創建ThreadLocalUtil工具類在登錄攔截器中使用ThreadLocal存儲登錄用戶名在/userInfo接口中獲取登錄用戶名 注意事項參考視頻 概述 使用 創建ThreadLocalUtil工具類 utils/ThreadLocalUtil.java package org.example.utils;/*** ThreadLocal 工具類*/ Supp…

1399. 統計最大組的數目

1399. 統計最大組的數目 題目鏈接&#xff1a;1399. 統計最大組的數目 代碼如下&#xff1a; class Solution { public:int countLargestGroup(int n) {int res 0;unordered_map<int, int> um;int maxValue 0;for (int i 1;i < n;i) {string value to_string(i);…

VS Code 插件Git History Diff 使用

右上角 查看單個文件記錄

數學建模論文手的學習日常01

目錄 一.要寫的內容&#xff1a; 二.文章標題&#xff1a; 三.摘要&#xff08;非常非常非常重要&#xff09; 四、關鍵詞&#xff1a; 五、問題重述 六、模型假設 七、符號說明 八、模型的建立與求解 九、模型的分析與檢驗 十、模型的評價、改進與推廣 十一、參考…

深度學習: AI 體育領域

一、引言 在科技與體育深度融合的當下&#xff0c;AI 體育逐漸成為推動體育行業變革的重要力量。深度學習憑借其強大的數據分析與模式識別能力&#xff0c;為 AI 體育帶來了全新的發展機遇。從運動員動作分析到智能健身指導&#xff0c;從賽事預測到運動康復輔助&#xff0c;深…

在 Ubuntu24.04 LTS 上 Docker 部署英文版 n8n 和 部署中文版 n8n-i18n-chinese

一、n8n 簡介 n8n 是一個低代碼&#xff08;Low-Code&#xff09;工作流自動化平臺&#xff0c;可以幫助用戶以非常簡單的方式創建自動化流程&#xff0c;連接不同的應用程序和服務。n8n的設計理念是為了讓復雜的工作流變得簡單易用&#xff0c;同時也支持高度的自定義&#xf…

《系統分析師-第三階段—總結(八)》

背景 采用三遍讀書法進行閱讀&#xff0c;此階段是第三遍。 過程 本篇總結第15章的內容 第15章 總結 系統運行與維護&#xff0c;系統經過測試交付之后&#xff0c;進入運行維護階段&#xff0c;維護分為系統運行、故障維護、系統評價和系統相關的策略。 疑問&#xff1a;…

LeetCode 1295.統計位數為偶數的數字:模擬

【LetMeFly】1295.統計位數為偶數的數字&#xff1a;模擬 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/find-numbers-with-even-number-of-digits/ 給你一個整數數組 nums&#xff0c;請你返回其中位數為 偶數 的數字的個數。 示例 1&#xff1a; 輸入&#xff1…

DDD是什么?電商系統舉例

一、DDD的基本概念 領域驅動設計&#xff08;Domain-Driven Design&#xff0c;簡稱DDD&#xff09;是由Eric Evans提出的一種軟件開發方法論&#xff0c;旨在應對復雜業務系統的設計和實現。它的核心思想是將軟件的設計與業務領域緊密結合&#xff0c;通過深入理解業務需求&a…

K8S ConfigMap 快速開始

一、什么是 ConfigMap&#xff1f; ConfigMap 是 Kubernetes 中用于存儲非敏感配置數據的 API 對象&#xff0c;支持以鍵值對&#xff08;Key-Value&#xff09;或文件的形式存儲配置&#xff0c;允許將配置與鏡像解耦&#xff0c;實現配置的集中管理和動態更新。 二、主要用…