tft每日頭條

 > 生活

 > mysql整理表

mysql整理表

生活 更新时间:2024-06-13 02:56:15

mysql 架構是系統架構 。它包含存儲 MySQL 服務器運行時所需信息的表。廣義的分類是, mysql模式包含存儲數據庫對象元數據的數據字典表,以及用于其他操作目的的系統表。

《三國志》數據庫各個表的實施過程掌握表結構管理。其中包含MySQL數據類型、如何創建表單、修改表結構、索引引用等内容。

mysql整理表(MySQL表結構的管理)1

MySQL數據類型數值類型(整數類型)

mysql整理表(MySQL表結構的管理)2

整數類型的數,默認情況下既可以表示正整數又可以表示負整數(此時稱為有符号數)。如果隻希望表示零和正整數,可以使用無符号關鍵字 unsigned 對整數類型進行修飾(此時稱為無符号整數)。

mysql整理表(MySQL表結構的管理)3

數值類型(小數類型)

mysql整理表(MySQL表結構的管理)4

decimal(length,precision)用于表示精度确定(小數點後數字的位數确定)的小數類型,length決定了該小數的最大位數,precision用于設置精度(小數點後數字的位數)。

例如:

  • decimal(5,2)表示小數取值範圍:-999.99~999.99
  • decimal(5,0)表示:-99999~99999的整數。

mysql整理表(MySQL表結構的管理)5

字符串類型

mysql整理表(MySQL表結構的管理)6

字符串類型的數據外觀上使用單引号括起來,例如三國人物姓名 張飛、國家名稱 蜀國 等。

char()與varchar() 的區别

例如對于簡體中文字符集gbk的字符串而言,varchar(255)表示可以存儲255個漢字,而每個漢字占用兩個字節的存儲空間。假如這個字符串沒有那麼多漢字,例如僅僅包含一個‘中’字,那麼varchar(255)僅僅占用1個字符(兩個字節)的儲存空間;而char(255)則必須占用255個字符長度的存儲空間,哪怕裡面隻存儲一個漢字。

日期類型
  • date表示日期 默認格式為 YYYY-MM-DD
  • time表示時間 默認格式為 HH:ii:ss
  • year表示年份
  • datetime與timestamp 是日期和時間的混合類型 默認格式為 YYYY-MM-DDHH:ii:ss

datetimetimestamp 都是日期和時間的混合類型,區别在于:表示的取值範圍不同,datetime 的取值範圍遠遠大于 timestamp 的取值範圍。将NULL插入timestamp字段後,該字段的值實際上是MySQL服務器當前的日期和時間。同一個timestamp類型的日期或時間,不同的時區,顯示結果不同。

複合類型(包括enum類型和set類型)

MySQL支持兩種複合數據類型:enum枚舉類型和set集合類型。

  • enum類型的字段類似于單選按鈕的功能,一個enum類型的數據最多可以包含65535個元素。
  • set類型的字段類似于複選框的功能,一個set類型的數據最多可以包含64個元素。
二進制類型

mysql整理表(MySQL表結構的管理)7

二進制類型的字段主要用于存儲由 01 組成的字符串,因此從某種意義上将,二進制類型的數據是一種特殊格式的字符串。

二進制類型與字符串類型的區别在于:字符串類型的數據按字符為單位進行存儲,因此存在多種字符集、多種字符序;而二進制類型的數據按字節為單位進行存儲,僅存在二進制字符集binary。

選擇合适的數據類型

選擇合适的數據類型,不僅可以節省儲存空間,還可以有效地提升數據的計算性能。

  1. 在符合應用要求(取值範圍、精度)的前提下,盡量使用“短”數據類型。
  2. 數據類型越簡單越好。
  3. 在MySQL中,應該用内置的日期和時間數據類型,而不是用字符串來存儲日期和時間。
  4. 盡量采用精确小數類型(例如decimal),而不采用浮點數類型。使用精确小數類型不僅能夠保證數據計算更為精确,還可以節省儲存空間,例如百分比使用decimal(4,2)即可。
  5. 盡量避免NULL字段,建議将字段指定為NOTNULL約束。
創建表單

Createtable 表名( 字段名1數據類型 [約束條件], … [其他約束條件],[其他約束條件] ) 其他選項(例如存儲引擎、字符集等選項)

設置約束

設置主鍵(PrimaryKey)約束

如果一個表的主鍵是單個字段,直接在該字段的數據類型或者其他約束條件後加上 primarykey 關鍵字,即可将該字段設置為主鍵約束。也可以是多個主鍵共同約束,設置為複合主鍵。

CREATE TABLE san_wujiang ( ...... primarykey 姓名); CREATE TABLE san_wujiang ( ...... primarykey (姓名,性别));

mysql整理表(MySQL表結構的管理)8

設置自增型字段

默認情況下,MySQL自增型字段的值從1開始遞增,且步長為1。

CREATE TABLE san_wujiang ( `序号` int(11) NOT NULL AUTO_INCREMENT,

mysql整理表(MySQL表結構的管理)9

其他選項的設置

設置表的存儲引擎

CREATE TABLE san_wujiang (......) engine = 存儲引擎類型

設置該表的字符集

CREATE TABLE san_wujiang (......) default charset = 字符集類型

設置索引關鍵字的壓縮方式,可以通過設置 pack_keys 選項實現(注意僅對MyISAM存儲引擎的表有效)。

  • 壓縮類型值為default: 表示隻壓縮索引中字符串類型的關鍵字(例如char、varchar、text等字段),但不壓縮數值類型的關鍵字。
  • 壓縮類型值為0: 表示取消索引關鍵字的壓縮。
  • 壓縮類型值為1: 表示壓縮索引中所有關鍵字的儲存空間,這樣做通常會使檢索速度加快,更新速度變慢。

CREATE TABLE san_wujiang (......) pack_keys=壓縮類型

複制一個表結構

方法一,在create table語句的末尾添加like子句,可以将源表的表結構複制到新表中。

create table 新表名 like 源表

方法二,在create table語句的末尾添加一個select語句,可以實現表結構的複制,甚至可以将源表的表記錄拷貝到新表中。下面的語法格式将源表的表結構以及源表的所有記錄拷貝到新表中。

create table 新表名 select * from 源表

修改表結構

成熟的數據庫設計,數據庫的表結構一般不會發生變化。數據庫的表結構一旦發生變化,基于該表的視圖、觸發器、存儲過程将直接受到影響,甚至導緻應用程序的修改。

修改字段相關信息

删除 姓名 字段。

alter table san_wujiang drop 姓名

添加 昵稱 新字段。

alter table san_wujiang add 昵稱 varchart(255)

修改表的 姓名數據類型

alter table san_wujiang change 姓名 新姓名 varchart(255)

僅對 姓名 字段的數據類型進行修改。

alter table san_wujiang modify 姓名 varchart(100)

修改約束條件

添加約束條件

向表的某個字段添加約束條件的語法格式如下(其中約束類型可以是唯一性約束、主鍵約束及外鍵約束)。

alter table san_wujiang add constraint 約束名 primary key ('序号')

删除表的主鍵約束條件

alter table san_wujiang drop primary key

删除表的外鍵約束時,指定外鍵約束名稱

alter table san_wujiang drop foreign key 約束名

删除表字段的唯一性約束

實際上隻需删除該字段的唯一性索引即可。

alter table san_wujiang drop index 索引名;

修改表的其他選項

修改引擎

alter table san_wujiang engine=innodb

修改字符集

alter table san_wujiang default charset=utf8mb4

修改起始值為1

alter table san_wujiang auto_increment=1

修改壓縮類型

alter table san_wujiang pack_keys=1

修改表名

rename table san_wujiang to san_wujiang_new alter table san_wujiang rename san_wujiang_new

删除表

如果表之間存在外鍵約束關系,此時需要注意删除表的順序。

drop table san_wujiang

索引

創建數據庫表時,初學者通常僅僅關注該表有哪些字段、字段的數據類型及約束條件等信息,數據庫表中另一個重要的概念 索引 很容易被忽視。

什麼是索引

想象一下現代漢語詞典的使用方法,理解索引的重要性。

  1. 索引的本質是什麼?
  2. MySQL數據庫中,數據是如何檢索的?
  3. 一個數據庫表隻能創建一個索引嗎?
  4. 什麼是前綴索引?
  5. 索引可以是字段的組合嗎?
  6. 能跨表創建索引嗎?想象一下現代漢語詞典的使用方法,理解索引的重要性。
  7. 索引數據需要額外的存儲空間嗎?
  8. 表中的哪些字段适合選作表的索引?什麼是主索引?什麼是聚簇索引?
  9. 索引與數據結構是什麼關系?
  10. 索引非常重要,同一個表,表的索引越多越好嗎?
索引關鍵字的選取原則

索引的設計往往需要一定的技巧,掌握了這些技巧,可以确保索引能夠大幅地提升數據檢索效率,彌補索引在數據更新方面帶來的缺陷。

  1. 表的某個字段值離散度越高,該字段越适合選作索引的關鍵字。
  2. 占用儲存空間少的字段更适合選作索引的關鍵字。
  3. 較頻繁地作為where查詢條件的字段應該創建索引,分組字段或者排序字段應該創建索引,兩個表的連接字段應該創建索引。
  4. 更新頻繁的字段不适合創建索引,不會出現在where子句中的字段不應該創建索引。
  5. 最左前綴原則。
  6. 盡量使用前綴索引。
索引與約束

約束主要用于保證業務邏輯操作數據庫時數據的完整性;約束是邏輯層面的概念。 索引則是将關鍵字數據以某種數據結構的方式存儲到外存,用于提升數據的檢索性能;索引既有邏輯上的概念,更是一種物理存儲方式,且事實存在、需要耗費一定的儲存空間。

索引種類
  • 主索引、聚簇索引
  • 唯一性索引
  • 普通索引
  • 複合索引
  • 全文索引(fulltext)
創建索引

創建表的同時創建索引

create table 表名(字段名1 數據類型 [約束條件], …[其他約束條件],… [ unique | fulltext ] index [索引名] ( 字段名 [(長度)] [ asc | desc ] ) ) engine=存儲引擎類型 default charset=字符集類型

使用姓名當作索引

CREATE TABLE san_wujiang ( '序号' CHAR ( 20 ) PRIMARY KEY, '姓名' CHAR ( 100 ) NOT NULL, UNIQUE INDEX name_index ( '姓名' ( 20 )), FULLTEXT INDEX brief_fulltext ('姓名'), ) ENGINE = MyISAM DEFAULT charset = gbk;

在已有表上創建索引

create [ unique | fulltext ] index 索引名 on 表名 ( 字段名 [(長度)] [ asc | desc ] ) alter table 表名 add [ unique | fulltext ] index index_name ( '姓名' [(varchar(20))] [ asc | desc ] )

删除索引

drop index index_name on san_wujiang

思考問題

問題1:如何創建一個劇本中需要的武将數據?

問題2:在新的劇本中如何創建我們自定義的武将?

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved