day02-MySQL基礎知識

来源:https://www.cnblogs.com/liyuelian/archive/2022/10/01/16747574.html
-Advertisement-
Play Games

MySQL基本知識 1.資料庫 1.1.創建資料庫 語法: CREATE DATABASE [IF NOT EXISTS] db_name [create_specification[,create_specification]...] create_specification: [DEFAULT] ...


MySQL基本知識

1.資料庫

1.1.創建資料庫

語法:

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification[,create_specification]...]
create_specification:
    
    [DEFAULT]CHARACTER SET charset_name
    [DEFAULT]COLLATE collation_name
  1. CHARACTER SET:指定資料庫採用的字元集,如果不指定字元集,預設為utf8
  2. COLLATE:指定資料庫字元集的校對規則(常用的uft8_bin[區分大小寫]、utf8_general_ci[不區分大小寫] 預設是 utf8_general_ci)

練習:

  1. 創建一個名為hsp_db01的資料庫[圖形和指令演示]

  2. 創建一個utf8字元集的hsp_db02的資料庫

  3. 創建一個使用utf8字元集,並帶校對隊則的hsp_db03資料庫

    指令創建:

#演示資料庫的操作
#1. 創建一個名為hsp_db01的資料庫
CREATE DATABASE hsp_db01;

#刪除資料庫指令
DROP DATABASE hsp_db01;

#2. 創建一個utf8字元集的hsp_db02的資料庫
CREATE DATABASE hsp_db02 CHARACTER SET utf8

#3. 創建一個使用utf8字元集,並帶校對隊則的hsp_db03資料庫
CREATE DATABASE hsp_db03 CHARACTER SET utf8 COLLATE utf8_bin
#校對規則 utf8_bin 區分大小寫   預設utf8_general_ci 不區分大小寫

​ 可以看見在不指定採用字元集和校驗規則的情況下,字元集預設為utf8,校驗規則預設為utf8_general_ci

image-20221001131246165

關於字元集和校驗規則:

如果在創建表的時候沒有指定字元集和校驗規則,則遵循和資料庫一樣的規則

如下:在資料庫hsp_db02中創建表t1,t1設為預設字元集和校驗規則。

在表t1中用select查詢可以得到不區分大小寫的兩條數據:

image-20221001133406513

在資料庫hsp_03中創建同樣的表t1並插入同樣的數據,查詢後只得到一條數據:

image-20221001133908482

因為資料庫hsp_03在創建時指定校驗規則為utf8_bin,區分大小寫,查詢返回的數據也區分了大小寫

資料庫hsp_02沒有指定大小寫,返回的查詢沒有區分大小寫

因此可知當表設置預設的字元集和校驗規則時,其則遵循資料庫的字元集和校驗規則

1.2查看、刪除資料庫

  • 語法:
#顯示資料庫語句
#顯示資料庫創建時的語句
#資料庫刪除語句[一定要慎用]

練習

  1. 查看當前伺服器中的所有資料庫

    SHOW DATABASES
    
    image-20221001135837515
  2. 查看前面創建的hsp_02資料庫的定義信息

    SHOW CREATE DATABASE hsp_db02
    
    image-20221001135916849
  3. 刪除前面創建的資料庫

  • 關鍵字作名字創建資料庫:

    • 說明1:資料庫名用反引號括起來,是為了規避數據名字為關鍵字

    例如:創建一個名為create的資料庫,不使用反引號就會報錯

    image-20221001140802726

    使用了反引號之後,就可以成功創建資料庫

    image-20221001141001393 image-20221001141021681

    使用關鍵字創建,在刪除的時候也要在名字旁邊反引號

    image-20221001141223088
    • 說明2:後面的語句用/*!40100...*/ 說明版本要在4以上執行這條語句

1.3備份恢復

1.3.1備份恢複數據庫

  • 語法:

備份資料庫 (註意:在DOS執行)

mysqldump -u 用戶名 -p -B 資料庫1 資料庫2 資料庫n > 文件名.sql

恢複數據庫(註意:進入MySQL命令行再執行)

Source 文件名.sql

練習:備份恢複數據庫

備份hsp_db02和hsp_db03庫中的數據,並恢復

  1. 備份:

    如下,在Dos視窗下輸入指令,指明備份的資料庫和保存的文件名

image-20221001150557630

在指定的路徑下生成了對應的sql文件

image-20221001150802838

這個備份的文件就是對應的sql語句:

image-20221001150909059
  1. 恢復

首先刪除掉資料庫hsp_db02和hsp_db03

登錄賬號,進入mysql命令行,輸入指令 Source d:\\\bak.sql

image-20221001151406361

可以看到資料庫及裡面的信息成功恢復:

image-20221001151552728

1.3.2備份恢複數據庫表

  • 語法:

備份資料庫的表

mysqldump -u 用戶名 -p 資料庫 表1 表2 表n > 文件名.sql

(註意:在DOS執行)

image-20221001152812485 image-20221001152900535

恢復和資料庫同理(註意進入mysql命令行執行)

2.表

2.1創建表

  • 語法:
CREATE TABLE table_name
(
    field1 datatype,
    field2 datatype,
    field3 datatype
)character set 字元集 collate 校對規則 engine 存儲引擎

# field:指定列名  datatype:指定列類型(欄位類型)
# character set:如不指定則為所在的資料庫字元集
# collate:如不指定則為所在的資料庫的校驗規則
# engine:引擎(這個涉及較多,後面單獨講解)

練習

在資料庫hsp_db02創建一張表,根據需求的數據創建相應的列,並根據數據的類型定義相應的列類型

user表:

id  		整形
name  		字元串
passwoed  	字元串
birthday 	日期
#id  		整形
#name  		字元串
#passwoed  	字元串
#birthday 	日期
CREATE TABLE `user`(
	id INT,
	`name` VARCHAR(255),
	`password` VARCHAR(255),
	`birthday` DATE)
	CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB; 
image-20221001160742953

3.MySQL常用數據類型(列類型)

image-20221001165855153

Mysql列類型即mysql的數據類型

詳見MySQL的參考手冊

3.1列類型之整型

  • 說明

數值型(整型)的基本使用

說明:使用規範:在能夠滿足需求的情況下儘量選擇空間小的類型

image-20221001173132855

應用實例

  • 3.1.2.1無符號TINYINT
  1. 在資料庫hsp_02中創建一個表t2,在表中插入列類型tinyint,列名為id
CREATE TABLE t2(
id TINYINT);
  1. 在表中插入數據 -129,執行後提示錯誤,可以看到t2為空表

image-20221001174310390 image-20221001174632661

  1. 往表中插入數據-128,執行成功,表中成功插入數據

image-20221001174822054 image-20221001174839813

  1. 同理,分別往表中插入數據128、127,只有127插入成功

    說明在有符號情況下,tinyint的範圍為-128~127

image-20221001175049183
  • 有符號TINYINT

在列類型後面指定無符號

CREATE TABLE t3(
id TINYINT UNSIGNED);
INSERT INTO t3 VALUES(-1);#錯誤,超出範圍
INSERT INTO t3 VALUES(0);
INSERT INTO t3 VALUES(256);#錯誤,超出範圍
INSERT INTO t3 VALUES(255);
image-20221001175845175

3.2列類型之BIT

  • 說明
  1. bit欄位顯示時,按照位的方式顯示(按照指定位數的二進位顯示)
  2. 查詢的時候仍然可以使用 添加時的數值(比如十進位)來查詢
  3. 如果一個值只有0,1,可以考慮使用bit(1),可以節省空間
  4. 位類型。M指定位數,預設值1,範圍1-64

練習

#演示bit類型使用
#說明
#1.bit(M) M在1-64位
#2.添加數據 的範圍是按照你給定的M的位數來確定,例如M=8 表示一個位元組(8bit) 0~255
create table t5 (num bit(8));
INSERT INTO t5 VALUES(5);
insert into t5 values(3);
select * from t5;
#3.查詢時仍然可以按照十進位數來查詢
select * from t5 where num = 5;

3.3列類型之小數類型

  • 說明
  1. FLOAT/DOUBLE[UNSIDNED]

    float 單精度,double 雙精度

  2. DECIMAL[M,D] [UNSIGNED]

    • 可以支持更加精確的小數位。M是小數位數(精度)的總數,D是小數點(標度)後面的位數。

    • 如果D是0,則值沒有小數點或分數部分。M最大65,D最大是30。如果D被省略,預設D是0;如果M被省略,預設M是10.

    • 建議:如果希望小數點的精度高,推薦使用decimal

練習

#案例演示 float、double、decimal的使用
CREATE TABLE t6(
num1 FLOAT,
num2 DOUBLE,
num3 DECIMAL(30,20));
#添加數據
INSERT INTO t6 VALUES(88.12345678912345,88.12345678912345,88.12345678912345);

#查詢
SELECT * FROM t6;

#decimal可以存放很大的數
image-20221001200555093

3.4列類型之字元串(文本類型)

  • 說明

    字元串的基本使用:

    CHAR(size)

    固定長度字元串 最大255字元

    VARCHAR(size)

    可變長度字元串 最大65532位元組

    [ utf8編碼最大字元為21844字元,1-3個位元組用於記錄大小,uft8編碼每個字元占用三個位元組 ]

    如果編碼是uft8 則varchar(size) size = (65535-3) / 3 = 21844

    如果編碼是gbk 則varchar(size) size = (65535-3) / 2 = 32766

    錯誤使用:(uft8)

image-20221001203037160

成功插入:(uft8)

image-20221001203356769

gbk字元集下:

image-20221001204145788
  • 字元串使用細節

  • 細節1:

    • 如 char(4) //這個4表示字元數(最大255),不是位元組數,不管是中文還是字母都是放四個,按字元計算

    • varchar(4) //這個4表示字元數,(這四個字元占用多少個位元組取決於你定義的編碼) 不管是字母還是中文都以定義好的表的編碼來存放數據

    上面的例子不管是中文還是字母都是最多存放4個,是按照字元來存放的

  • 細節2:

    • char(4)是定長(固定的大小),就是說,即時你插入'aa',也會占用分配的4個字元
    • varchar(4)是可變長,即如果你插入的是'aa',實際占用的空間大小並不是4個字元,而是按照實際占用空間來分配。VARCHAR值保存時只保存需要的字元數,另加一個位元組來記錄長度(如果列聲明的長度超過255,則使用兩個位元組) ,因此varchar的實際長度=實際的數據大小+(1-3個位元組)
image-20221001212928485
  • 細節3:使用的的時機

    • 如果數據是定長,推薦使用char,比如md5的密碼,郵編,手機號,身份證號碼等
    • 如果一個欄位的長度不定,就使用varchar,比如留言,文章
    • 查詢速度 char > varchar
  • 細節4:

    • 在存放文本時,也可以使用text數據類型。可以將text列視為varchar列,註意text不能有預設值,大小 0~2^16位元組
    • 如果希望存放更多字元,可以選擇mediumtext 0~2^24 或者 longtext 0~2^32

例子:

在下圖中,不管插入的是中文還是字母,每一個都按一個字元來算,因此'abcde'相當5個字元長度,插入失敗;varchar同理。

失敗:

image-20221001210037354

成功:

image-20221001210336635

例子2:關於text,mediumtext 和 longtext的使用

image-20221001214822449

如上圖所示:在插入的數據後面顯示了實際使用的數值大小

content1有兩個中文=2*3=6bit,每個數字占用一個位元組,共計9bit

content2也有兩個中文=2*3=6bit,有八個數字,共計14bit

3.5列類型之日期類型

  • 日期類型的細節說明

    TimeStamp在Insert和Update時,會自動更新

例子:

#演示時間相關的案例
#創建一張表,data ,datatime,timestamp
CREATE TABLE t13(
	birthday DATE,-- 生日
	job_time DATETIME,-- 記錄年月日 時分秒
	login_time TIMESTAMP
		NOT NULL DEFAULT CURRENT_TIMESTAMP
		ON UPDATE CURRENT_TIMESTAMP);-- 登錄時間,如果希望login_time列自動更新,需要配置

INSERT INTO t13(birthday,job_time)
VALUES('2022-11-11','2022-11-11 10:10:10');
#如果我們更新了t13的某條記錄,login_time會自動地以當前時間來進行更新

SELECT * FROM t13;
image-20221001225439528
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 總結: ArrayList與Vector集合的底層都是通過Object[] elementData數組存放對象的 ArrayList使用無參構造器時,初始容量為0,當存放一個對象後,容量擴容為10,此後按1.5*當前容量進行擴容 ArrayList使用帶參構造器時,初始容量為設定值,當存放對象個數達 ...
  • 1.List集合概要 2.Iterable介面 1.概要 2.重要方法 forEach方法:對Collection集合中的每個對象進行消費 List<Student> list = Stream.generate(() -> new Student("張三", 23)).limit(100).col ...
  • Servlet4.0 Response對象Response對象封裝Server返回Client的所有信息。在HTTP協議中,Server傳達給Client信息轉換到HTTP Header或者HTTP BODY中。5.1 Buffering緩衝區Serverlet Container可以但不強制緩衝發 ...
  • 我們在創建條形碼時,如果以圖片的方式將創建好的條碼保存到指定文件夾路徑,可以在程式中直接載入圖片使用;已生成的條碼圖片,需要通過讀取圖片中的條碼信息,如條碼類型、條碼繪製區域在圖片中的四個頂點坐標位置等,可參考本文中的方法。 註:讀取時,也支持讀取二維碼類型。 引入dll 調用API:Spire.B ...
  • 前言 WPF 的 ComboBox 控制項等綁定 enum 值很繁瑣,很讓人頭疼,網上也有提供了一些方法,基本是使用 ObjectDataProvider 方式和 MarkupExtension 方式, 有沒有辦法綁定值為 enum 類型就自動載入所有枚舉值選項,下麵記錄一種方法; 實現方式 主要通過 ...
  • CORS跨域訪問問題往往出現在“瀏覽器客戶端”通過ajax調用“服務端API”的時候。而且若是深究原理,還會發現跨域問題其實還分為【簡單跨域】與【複雜跨域】這兩種情況。 網上對解決跨域限制有很多說明文章,但絕大多數要麼解決的不完善(比如,沒有區分【簡單跨域】與【複雜跨域】),要麼就是解決方案過於複雜 ...
  • 一. 背景 我們在日常開發中,可能你會遇到這樣的需求:"每個月的3號給用戶發信息,提醒用戶XXX "、"每天的0點需要統計前一天的考勤記錄"、"每個月的1號計算上個月的庫存情況"、"定時初始化數據供其它業務使用"、"每隔2分鐘輪詢查資料庫看某業務是否被審核通過,並提示用戶" 等等。 以上需求在開發中 ...
  • 一、crond任務調度 概述: 使用crontab 指令進行定時任務的設置,任務調度是指系統在某個時間端執行的特定任務或程式,例如:病毒掃描,資料庫備份等 基本語法: crontab 【選項】 常用選項: -e編輯crontab定時任務 -l查詢crontab任務 -r刪除當前用戶所有的cronta ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...