國(guó)外比較好的資源網(wǎng)站企業(yè)網(wǎng)站seo診斷報(bào)告
表的操作
- 前言
- 正式開始
- 建表
- 查看表
- show tables;
- desc xxx;
- show create table xxx;
- 修改表
- 修改表名 rename to
- 對(duì)表結(jié)構(gòu)進(jìn)行修改
- 新增一個(gè)列 add
- 對(duì)指定列的屬性做修改 modify
- 修改列名 change
- 刪除某列 drop
- 刪除表 drop
前言
前一篇講了庫相關(guān)的操作,如果你不太懂,可以先看看上一篇:【MySQL】庫的相關(guān)操作 + 庫的備份和還原
本篇主要講解對(duì)表的增刪查改工作。
正式開始
建表
先給出這張表:
先來創(chuàng)建一張表讓你看看,首先創(chuàng)建一個(gè)數(shù)據(jù)庫:
前面博客講過,創(chuàng)建一個(gè)數(shù)據(jù)庫就是在配置文件中的datadir目錄下創(chuàng)建一個(gè)同名目錄:
還會(huì)有一個(gè)文件來保存其字符集和校驗(yàn)規(guī)則的:
這里就不再說為啥了,不知道為啥的同學(xué)可以看這篇:數(shù)據(jù)庫基本概念
在db_test中創(chuàng)建一張表,我這里直接給出復(fù)雜的:
來解釋解釋。
建表的時(shí)候列的列名和列類型都放在()中,列名在前,列類型在后,列類型后面跟的comment就像平時(shí)寫代碼的注釋一樣。各個(gè)列之間用,間隔,注意最后一列后面不要加,。
charset就是字符集,collate就是校驗(yàn)規(guī)則,engine就是存儲(chǔ)引擎。
字符集、校驗(yàn)規(guī)則、存儲(chǔ)引擎在默認(rèn)情況下都是有的,字符集和校驗(yàn)規(guī)則如果不指明就會(huì)用數(shù)據(jù)庫的默認(rèn)字符集和校驗(yàn)規(guī)則,存儲(chǔ)引擎在配置文件中就已經(jīng)搞好了。
創(chuàng)建數(shù)據(jù)庫的時(shí)候如果不指明數(shù)據(jù)庫的字符集和校驗(yàn)規(guī)則就會(huì)直接用配置文件中的字符集和其對(duì)應(yīng)的默認(rèn)校驗(yàn)規(guī)則。
關(guān)于配置文件我剛剛給的那篇博客中也有,這里再給出來:
這里我的配置文件中字符集為utf8,默認(rèn)存儲(chǔ)引擎為InnoDB。
不過我上面創(chuàng)建表的時(shí)候指明了字符集、校驗(yàn)規(guī)則、默認(rèn)存儲(chǔ)引擎,所以就會(huì)直接按照我給出來的:
字符集為utf8,校驗(yàn)規(guī)則為utf8_general_ci,存儲(chǔ)引擎為MyIsam。
存儲(chǔ)引擎不同會(huì)有什么區(qū)別呢?
當(dāng)前這個(gè)表創(chuàng)建好這個(gè)表之后會(huì)多出三個(gè)文件:
再來創(chuàng)建一個(gè)新的,存儲(chǔ)引擎用InnoDB:
注:上面的完全是可以寫在一行的,不過這樣寫起來更美觀。
都是默認(rèn)的,字符集utf8,校驗(yàn)規(guī)則utf8_general_ci,存儲(chǔ)引擎InnoDB。
再看多了幾個(gè)文件:
可以看到新增了兩個(gè)文件。
第一個(gè)user用的是MyIsam,創(chuàng)建出了三個(gè)文件。
第二個(gè)用的是InnoDB,創(chuàng)建出了兩個(gè)文件。
不同存儲(chǔ)引擎對(duì)應(yīng)磁盤文件個(gè)數(shù)是不一樣的,MyIsam是3個(gè),InnoDB是2個(gè),后綴MY開頭的就是MyIsam的文件,D表示Data,MYD后綴就MyIsam的數(shù)據(jù)文件,MYI是MyIsam的索引文件。后綴i開頭的是InnoDB的文件,InnoDB是將數(shù)據(jù)和索引放在一塊存的,所以文件個(gè)數(shù)不一樣。后續(xù)我講索引的博客會(huì)詳談這一點(diǎn)。
這里最重要的是知道create table可以創(chuàng)建表就行。
后面還可以加上if not exists:
因?yàn)榍懊嬗衭ser2,所以不會(huì)成功的,里面的字段還是不變:
這里desc是查看表的一個(gè)操作,等會(huì)就說。
查看表
首先用select database()來查看你現(xiàn)在選中的是哪一個(gè)數(shù)據(jù)庫。
這里就是我剛剛創(chuàng)建出來的數(shù)據(jù)庫。
show tables;
show tables可以查看你在這個(gè)數(shù)據(jù)庫中創(chuàng)建的所有表:
desc xxx;
decs xxx; 可以查看xxx表的詳細(xì)信息:
這里面只要知道前面兩列的Field、Type(其中的varchar這樣的類型在下一篇講類型的時(shí)候說)就行,后面的四個(gè)字段Null、Key、Default、Extra我也是會(huì)在后面索引的博客中再細(xì)說。
不過這里還有一些東西看不到,比如說注釋、字符集、校驗(yàn)規(guī)則啥的看不到,想要看到的話用:
show create table xxx;
直接用show create table xxx; 看起來有點(diǎn)難受:
可以將;改成\G:
這樣可以在現(xiàn)實(shí)的時(shí)候去掉一些不必要的字段。
上面的 show create table xxx; 可以看到創(chuàng)建表時(shí)候的詳細(xì)信息,所以每個(gè)表的列字段屬性,查看表的詳細(xì)信息,現(xiàn)在都能看到了,但有個(gè)小問題,當(dāng)時(shí)創(chuàng)建表的時(shí)候可不是這里 show create table xxx;顯示出來的這樣寫的,因?yàn)閙ysqld會(huì)對(duì)你的指令做詞法語法分析,可能你剛開始寫的不太標(biāo)準(zhǔn),它就會(huì)給你轉(zhuǎn)化成更標(biāo)準(zhǔn)的寫法。既然能查到,肯定也是將這些操作記錄下了。
修改表
在項(xiàng)目實(shí)際開發(fā)中,經(jīng)常修改某個(gè)表的結(jié)構(gòu),比如字段名字,字段大小,字段類型,表的字符集類型,表的存儲(chǔ)引擎等等。我們還有需求,添加字段,刪除字段等等。這時(shí)我們就需要修改表。
都是這樣的格式:
alter table 表名 操作 ...
修改表名 rename to
把剛剛的user改成User:
其實(shí)不用加to也可以:
對(duì)應(yīng)目錄下文件名也會(huì)被修改:
對(duì)表結(jié)構(gòu)進(jìn)行修改
來往其中插入點(diǎn)數(shù)據(jù):
新增一個(gè)列 add
新增一個(gè)列,假如說用來保存用戶的一張圖片的路徑。(假如說圖片在系統(tǒng)的某個(gè)路徑下,現(xiàn)在不想在數(shù)據(jù)庫中保存圖片,而是保存圖片的路徑,所以新增一個(gè)列來保存路徑)。
add就是新增一個(gè)列,其中after表示插入到哪一列的后面。
其實(shí)默認(rèn)就是在最后一列插入:
指定:
注意不能插入重名的:
再來查看一下User的數(shù)據(jù):
其中新增列的數(shù)據(jù)為空。在這個(gè)列新增之前沒有這個(gè)屬性,所以默認(rèn)就是空,對(duì)原來的字段是不影響的。
show create:
可以看到新增了一列。
對(duì)指定列的屬性做修改 modify
還是User:
比如說我要對(duì)name這一列做修改,將varchar的長(zhǎng)度由20改為60。
這里將長(zhǎng)度改長(zhǎng),并不會(huì)影響表中的數(shù)據(jù):
再show一下:
可以看到注釋丟了,這里改不是該一部分,而是將原來的屬性字段全部覆蓋掉。
修改列名 change
注意這里改列名和改表名要去分開,不要搞混了。
前面的rename to進(jìn)行修改表名字的時(shí)候是原名在rename to前,新名在rename to后。
這里是都在change后面,原名后面跟新名。
注意不能修改成重名的:
刪除某列 drop
還是User:
刪掉密碼那一列:
select:
可以看到整列的數(shù)據(jù)都沒了。
注意,刪除某一列,這一列的數(shù)據(jù)都會(huì)丟失,所以刪除的時(shí)候一定要謹(jǐn)慎,沒用的再刪,或者備份一下。
到這里就完了,修改表結(jié)構(gòu)就這三個(gè)操作,增刪改,沒有查,查是用desc、select、show create table查看整個(gè)表。
刪除表 drop
直接給例子了:
記住,修改表和刪除表輕易不要做,數(shù)據(jù)庫本身在業(yè)務(wù)中是最靠近底層的,底層的東西一邊,上層的東西就要跟著變,非常麻煩,表中的類屬性、名稱等的改變會(huì)直接決定上層要不要變,數(shù)據(jù)庫名字一改,那么用到這個(gè)數(shù)據(jù)庫的軟件就都要改,如果出現(xiàn)開發(fā)到一半要改表結(jié)構(gòu),那上層的邏輯就會(huì)受影響。前期在開發(fā)前一定要把這些東西討論清楚。
前面提到了DDL(定義)、DML(操縱)、DCL(控制),那么本篇中表的操作屬于哪一個(gè)呢?
注意,表的操作都是屬于定義表結(jié)構(gòu)的范疇,所以是DDL。
建庫、建表都是對(duì)庫、表的結(jié)構(gòu)做操作,并沒有對(duì)表中的內(nèi)容做操作,所以都是DDL。
關(guān)于表的操作,該講的都講了,后續(xù)會(huì)對(duì)本篇中的一些坑做補(bǔ)充。
到此結(jié)束。。。