- 注意: 撰寫本文目的主要是為了給自己做一個(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í)更正、刪除承边,謝謝遭殉。