MySQL那些不常用的一些SQL語句
不知道大家有沒遇到過是用 MyCat 進行分庫分表的數(shù)據(jù)庫,對于這種的數(shù)據(jù)庫,相信大家在是用 Navicat 進行連接時候,會發(fā)現(xiàn),有時候明明自己的表是存在的,但是在使用 Navicat 的時候,左邊是看不到這個表的,從而導致了,對添加字段,查看表結(jié)構(gòu)不熟悉的同學來說,這簡直是一種折磨,今天阿粉就把一些經(jīng)典的 SQL 給大家整理出來,讓大家以后在想看的時候,直接拉出來看。
MySQL的添加表
這個頁面都熟悉,很多人建表的時候,都是直接在這里定義表的結(jié)構(gòu),然后直接保存,確實是沒毛病,但是如果分庫之后,你不知道規(guī)則,那么你只能讓有權(quán)限的人去幫你執(zhí)行建表語句,這時候就用到了SQL語句創(chuàng)建表。
CREATE TABLE 表名稱
(
列名稱1 數(shù)據(jù)類型,
列名稱2 數(shù)據(jù)類型,
列名稱3 數(shù)據(jù)類型,
....
)
但是這么指定,肯定還不行,還得有主鍵不是么?
給個最簡單的:
CREATE TABLE `USER` (
`ID` varchar(64) NOT NULL ,
`Name` varchar(64) NULL ,
`Age` int(11) NULL ,
PRIMARY KEY (`ID`)
)
我們創(chuàng)建一個 USER 表,然后給表加上主鍵,就完成了創(chuàng)建一個基本的表。
如果你想增加字段的時候,又找不到表了,那應該怎么辦呢?
非常簡單,ALTER TABLE 語句,語法格式如下;
ALTER TABLE table_name ADD column_name datatype default xxx COMMENT '注釋'
這個語法 table_name 就是你的表名,column_name 是你的字段名,datatype 是你的字段類型, default后面則是你字段的默認值,而COMMENT后面,則是跟著的對應字段的注釋,是不是很簡單。
雖然簡單,但是很多直接習慣是用 Navicat 的人來說,還得去百度,現(xiàn)在不需要了,直接收藏一下,下次拉過來繼續(xù)用。
如果覺得我們給這個表設計的某個字段的類型不合適,那么又應該怎么改呢?
同樣的還是 ALTER 語法:
ALTER TABLE table_name MODIFY COLUMN column_name datatype comment '注釋';
實際上和加字段區(qū)別并不大,但是 MODIFY 這個是修改的意思,畢竟寫代碼還有 CRUD 呢!
MYSQL 查看表結(jié)構(gòu)
當你找不到表的時候,而且還深信表一定存在,那么就得用到一個關(guān)鍵字了 DESC,看到這個關(guān)鍵詞的時候,相信小伙伴們都懵逼了,什么鬼,DESC 不是排序的時候是用的么?
是,DESC 在排序的時候確實是使用的,但是此 DESC 非彼 DESC,這里的 DESC 實際上是 DESCRIBE 的縮寫,而 排序所用的 DESC 是 DESCEND 的縮寫,這個你懂了么?
DESC table_name
這個語句就能成功的把你創(chuàng)建的表的結(jié)構(gòu)都展示出來。
MYSQL 查看表索引的語句
這個相信大家肯定是都會的。
show index from tbname;
這里要注意的就是他的每個字段是什么意思了。
1.Table: 表名。
2.Non_unique: 如果索引不能包括重復值則為0,如果可以則為1。也就是平時所說的唯一索引。
3.Key_name 索引名稱,如果名字相同則表明是同一個索引,而并不是重復,比如上圖中的第四、五條數(shù)據(jù),索引名稱都是name,其實是一個聯(lián)合索引。
4.Seq_in_index 索引中的列序列號,從1開始。上圖中的四、五條數(shù)據(jù),Seq_in_index一個是1一個是2,就是表明在聯(lián)合索引中的順序,我們就能推斷出聯(lián)合索引中索引的前后順序。
5.Column_name 索引的列名。
6.Collation指的是列以什么方式存儲在索引中,大概意思就是字符序。
7.Cardinality 是基數(shù)的意思,表示索引中唯一值的數(shù)目的估計值。我們知道某個字段的重復值越少越適合建索引,所以我們一般都是根據(jù)Cardinality來判斷索引是否具有高選擇性,如果這個值非常小,那就需要重新評估這個字段是否適合建立索引。
8.Sub_part 前置索引的意思,如果列只是被部分地編入索引,則為被編入索引的字符的數(shù)目。如果整列被編入索引,則為NULL。
9.Packed 指示關(guān)鍵字如何被壓縮。如果沒有被壓縮,則為NULL。壓縮一般包括壓縮傳輸協(xié)議、壓縮列解決方案和壓縮表解決方案。
10.Null 如果列含有NULL,則含有YES。
11.Index_type表示索引類型,Mysql目前主要有以下幾種索引類型:FULLTEXT,HASH,BTREE,RTREE。
12.Comment Index_comment 注釋的意思。
說到查看索引,那么就得說新增和刪除索引。
索引的類型:
- UNIQUE(唯一索引):不可以出現(xiàn)相同的值,可以有NULL值
- INDEX(普通索引):允許出現(xiàn)相同的索引內(nèi)容
- PROMARY KEY(主鍵索引):不允許出現(xiàn)相同的值
- fulltext index(全文索引):可以針對值中的某個單詞,但效率確實不敢恭維
- 組合索引:實質(zhì)上是將多個字段建到一個索引里,列值的組合必須唯一
創(chuàng)建索引
CREATE INDEX index_name
ON table_name (column_name)
刪除索引
DROP INDEX index_name ON table_name
非常簡單,阿粉不多說,這里就說一個比較經(jīng)典的,如果表已經(jīng)創(chuàng)建好了,那么再添加索引,那就還得是 ALTER。
ALTER TABLE table_name add INDEX `index_name` (`xxx`,`xx`,`x`)
以上的語句替換一下表名和索引的名稱和字段的名稱,那么就建立了一個聯(lián)合索引了,這樣看起來好像很簡單是不是。
最后阿粉再來個總結(jié):
總結(jié)
創(chuàng)建表
CREATE TABLE `USER` (
`ID` varchar(64) NOT NULL ,
`Name` varchar(64) NULL ,
`Age` int(11) NULL ,
PRIMARY KEY (`ID`)
)
添加字段
ALTER TABLE table_name MODIFY COLUMN column_name datatype comment '注釋';
查看表結(jié)構(gòu)
DESC table_name
查看表索引
show index from tbname;
創(chuàng)建索引
CREATE INDEX index_name
ON table_name (column_name)
刪除表索引
DROP INDEX index_name ON table_name
增加表索引
ALTER TABLE table_name add INDEX `index_name` (`xxx`,`xx`,`x`)