MySQL基礎(chǔ)教程3-DDL(創(chuàng)建表)

  • 注意: 撰寫本文目的主要是為了給自己做一個(gè)備忘錄,如果你學(xué)過(guò)Mysql并且希望從本文中找到一些忘記的知識(shí)點(diǎn),那么你可以閱讀本文章。由于文章內(nèi)講解并不是很多,因此此文章并不適合小白入門使用。

DDL-創(chuàng)建表

  • 所謂建表,就是一個(gè)聲明字段的過(guò)程
    列選什么類型,列選什么屬性

簡(jiǎn)單建個(gè)表:

create table people(
     -> age int,
     -> name varchar(10)
     -> );

建表語(yǔ)句:

建表語(yǔ)句

一、列

列的類型:

  • 數(shù)值型---整形、型,浮點(diǎn)型,定點(diǎn)型
  • 字符串型---char,varchar,text
  • 日期時(shí)間類型---2020-12-30 23:59:59

1.1.整型列

(1).各整型類型所占字節(jié)大小:

各整型類型所占字節(jié)大小

(2).整型列可選參數(shù):

  • unsigned: 無(wú)符號(hào),列的值從0開始,不為負(fù)
  • zerofill: 適用于 學(xué)號(hào)、編碼 等,固定寬度的數(shù)字,可以用0填充至固定寬度
    學(xué)號(hào)-->1-->0001
    學(xué)號(hào)-->123-->0123
    思路: zerofill填充至多寬?M
    注意: zerofill屬性默認(rèn)決定列為unsigned類型
  • M: 為zerofill 指定填充的寬度。只使用M沒(méi)有任何意義,必須配合zerofill使用
    注意: M的數(shù)值不是為了限制數(shù)值寬度,只是為了當(dāng)數(shù)值寬度不到M時(shí),為其填充至寬度為M

例:

/* 為user表添加帶有unsigned屬性的number字段 */
alter table user add number tinyint unsigned;

/* 為user表添加帶有zerofill屬性的number字段,并為其指定寬度 */
alter table user add number tinyint(5) zerofill;

1.2.浮點(diǎn)列與定點(diǎn)列

  • flocat(M,D): 浮點(diǎn)型
    M是精度,即總位數(shù)
    D是標(biāo)度,即小數(shù)點(diǎn)后面的位數(shù)
  • double: 浮點(diǎn)型
  • decimal: 定點(diǎn)型
    float/double浮點(diǎn)型數(shù)據(jù)會(huì)有精度損失,decmail定點(diǎn)型,更精確

float/double官方文檔:

float/double官方文檔

1.3.字符型

MySQL字符串類型:

  • Char: 定長(zhǎng)類型
    char型,傳入數(shù)據(jù)如果不夠M個(gè)字符,內(nèi)部用空格補(bǔ)齊,取出時(shí)再把右側(cè)空格刪掉。這意味著:如果數(shù)據(jù)本身右側(cè)有空格,將會(huì)丟失
  • Varchar: 變長(zhǎng)類型

注意:char(M)限制的是字符,不是字節(jié)。即char(2) charset utf8,能存兩個(gè)utf8字符,比如中國(guó);
**char與varchar型的選擇原則:

  • 1.空間利用率:
    四字成語(yǔ)表:char(4);
    微博個(gè)人簡(jiǎn)介140字:varchar(140)
  • 2.速度:
    用戶名: char

Char與Varchar:

MySQL字符串類型

Char右側(cè)空格丟失:
注: 從截圖中可以看出,最后輸出的數(shù)據(jù)中的char型數(shù)據(jù)丟失了右側(cè)的空格
Char右側(cè)空格丟失

其他類型的字符類型及容量:

  • Text: 文本類型,可以存比較大的文本段,搜索速度慢。因此,如果不是特別大的內(nèi)容,建議用char、varchar來(lái)代替。test不用默認(rèn)值(加了也沒(méi)用)
  • Blob:二進(jìn)制類型,用來(lái)存儲(chǔ)圖像、音頻等二進(jìn)制信息。
    意義:2進(jìn)制,0-255都有可能出現(xiàn)。Blob在于防止因?yàn)樽址鴮?dǎo)致信息丟失的問(wèn)題。比如: 一張圖片中有0xFF字節(jié),這個(gè)在ascii字符集中認(rèn)為非法,在入庫(kù)的時(shí)候被過(guò)濾了。
  • Enum:枚舉類型。意思是值是定義好的,就在幾個(gè)枚舉范圍內(nèi)。
    例: gender('男','女');insert時(shí)只能選"男","女"。
  • Set:同Enum。但insert時(shí)可同時(shí)選多個(gè)值。
其他類型的字符類型及容量

1.4.日期時(shí)間類型

日期時(shí)間類型

二、列的默認(rèn)值

列的默認(rèn)值

  • 1.NULL 查詢不便
  • 2.NULL的索引效果不高
    所以,實(shí)用中要避免列的值為NULL
  • 如何避免--聲明列 :
    NOT NULL default 默認(rèn)值

三、主鍵與自增

  • 主鍵:primary key,此列不重復(fù),能夠區(qū)分每一行
/* 第一重指定方式 */
create table t1(
     -> id int primary key,
     -> name char(2)
);
/* 第一重指定方式 */
create table t2(
     -> id int,
     -> name char(2),
     -> primary key(id)
);
  • 自增(auto_increment): 一張表只能有1列為auto_increment,且此列必須加索引(index/key)
    一般實(shí)用中自增與主鍵搭配使用
create table t3(
     -> id int auto_increment,
     -> name char(2),
     -> key id(id)
);
  • 表設(shè)計(jì)案例:某社交網(wǎng)站

建表秘訣:
1.定長(zhǎng)與變長(zhǎng)分離
2.常用與不常用分離

表設(shè)計(jì)案例

上面表設(shè)計(jì)的并不是很好,還可以優(yōu)化
分析:張這表除了username/intro列之外,每一行都是定長(zhǎng)的,我們不妨讓其所有列都定長(zhǎng)。可以極大地提高查詢速度。
表設(shè)計(jì)優(yōu)化

MySQL建立上述表表指令:

create table regist3(
    -> id int unsigned primary key auto_increment,
    -> username char(10) not null default ' ',
    -> gender tinyint not null default 0,
    -> weight tinyint unsigned not null default 0,
    -> Birth Date not null default '0000-00-00',
    -> Salary Decimal(8,2) not null default '000000.00',
    -> lastlogin int unsigned not null default 0
);

create table regist1(
    -> id int unsigned primary key auto_increment,
    -> username char(10) not null default ' ',
    -> intro varchar(1500) not null default ''
);

效果圖:

效果圖

四、列的增刪改

4.1.添加列

/*格式:*/
alter table 表名
     -> add 列名 列類型 列屬性... 
注意: 默認(rèn)將該列添加到表的最后

/*實(shí)例1:*/
alter table student
     -> add height tinyint unsigned not null default 0;

/*實(shí)例2: 添加到weight列后面*/
alter table student
     -> add height tinyint unsigned after weight;

4.2.刪除列

alter table student
     -> drop column height;

4.3.修改列

/*修改列名并修改該列的屬性*/
alter table student
     -> change height shengao smallint;

/*修改列的屬性*/
alter table student
     -> change shengao tinyint;

五、表管理語(yǔ)句

5.1.查看所有表

show tables;

5.2.查看表結(jié)構(gòu)

desc 表名/視圖名;

5.3.查看建表過(guò)程

/*查看建表過(guò)程*/
show create table 表名;

/*查看建視圖過(guò)程*/
show create view 視圖名;

5.4.查看表詳細(xì)信息

/*查看所有表詳細(xì)信息*/
show table status;

/*查看某張表詳細(xì)信息*/
show table status where name='表名';

/*豎列顯示表信息*/
show table status \G;

5.5.刪除表

/*刪除表*/
drop table 表名;

/*刪除視圖*/
drop view 視圖名;

5.6.為表改名

rename table oldName to newName;

5.7.清空表數(shù)據(jù)

truncate 表名;
/*相當(dāng)于刪除表,再重建*/

友情鏈接:

MySQL基礎(chǔ)教程全網(wǎng)最全1(基本指令操作)
MySQL基礎(chǔ)教程2-DQL(select查詢)
MySQL基礎(chǔ)教程4-細(xì)節(jié)知識(shí)點(diǎn)

文集推薦:

Java基礎(chǔ)方法集1
Python基礎(chǔ)知識(shí)完整版
Spring Boot學(xué)習(xí)筆記
Linux指令進(jìn)階
Java高并發(fā)編程
SpringMVC基礎(chǔ)知識(shí)進(jìn)階
Mysql基礎(chǔ)知識(shí)完整版
健康管理系統(tǒng)學(xué)習(xí)花絮(學(xué)習(xí)記錄)
Node.js基礎(chǔ)知識(shí)(隨手筆記)
MongoDB基礎(chǔ)知識(shí)
Dubbo學(xué)習(xí)筆記
Vue學(xué)習(xí)筆記(隨手筆記)

聲明:發(fā)表此文是出于傳遞更多信息之目的。若有來(lái)源標(biāo)注錯(cuò)誤或侵犯了您的合法權(quán)益,請(qǐng)作者持權(quán)屬證明與本我們(QQ:981086665;郵箱:981086665@qq.com)聯(lián)系聯(lián)系,我們將及時(shí)更正、刪除,謝謝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文基于MySQL5.6版本進(jìn)行描述從大的方面來(lái)講,MySQL的數(shù)據(jù)類型分為4種 數(shù)值類型 日期和時(shí)間 字符串類型...
    黑哥兒666閱讀 805評(píng)論 0 0
  • 數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí) 數(shù)據(jù)庫(kù)客戶端MySQL作為數(shù)據(jù)庫(kù)服務(wù)器來(lái)運(yùn)行,任何滿足mysql通信規(guī)范的軟件都可以作為客戶端來(lái)連...
    littlexjing閱讀 1,126評(píng)論 0 2
  • 回顧 數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí):關(guān)系型數(shù)據(jù)庫(kù)(磁盤)和非關(guān)系型數(shù)據(jù)庫(kù)(內(nèi)存) 關(guān)系型數(shù)據(jù)庫(kù):建立在關(guān)系模型上的數(shù)據(jù)庫(kù)數(shù)據(jù)結(jié)構(gòu)...
    翊溪閱讀 620評(píng)論 0 1
  • Mysql 基礎(chǔ) SQL分類: DDL—數(shù)據(jù)定義語(yǔ)言(create,alter,drop)DML—數(shù)據(jù)操縱語(yǔ)言(s...
    零一間閱讀 5,398評(píng)論 0 10
  • 一年又一年,字節(jié)跳動(dòng) Lark(飛書) 研發(fā)團(tuán)隊(duì)又雙叒叕開始招新生啦!【內(nèi)推碼】:GTPUVBA【內(nèi)推鏈接】:ht...
    盧卡斯嗶嗶嗶閱讀 889評(píng)論 0 9

友情鏈接更多精彩內(nèi)容