- 注意: 撰寫本文目的主要是為了給自己做一個(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ǔ)句:

一、列
列的類型:
- 數(shù)值型---整形、型,浮點(diǎn)型,定點(diǎn)型
- 字符串型---char,varchar,text
- 日期時(shí)間類型---2020-12-30 23:59:59
1.1.整型列
(1).各整型類型所占字節(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官方文檔:

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:

Char右側(cè)空格丟失:
注: 從截圖中可以看出,最后輸出的數(shù)據(jù)中的char型數(shù)據(jù)丟失了右側(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í)間類型

二、列的默認(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ì)的并不是很好,還可以優(yōu)化
分析:張這表除了username/intro列之外,每一行都是定長(zhǎng)的,我們不妨讓其所有列都定長(zhǎng)。可以極大地提高查詢速度。

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í)更正、刪除,謝謝。