天天看點

一些MySQL的使用技巧

學習總結了一些MySQL的使用技巧:

Tips1 : 關于結束符

MySQL中的結束符預設是分号(;),除了分号外終止語句的另外一種方法是使用\g(表示go),當然也可以使用\G,這樣可以豎直排列顯示結果,每行一個值,對于輸出行比較長,使用\G輸出更易于閱讀(比如下面是檢視資料庫定義的語句顯示);倘若不想執行已經輸入的指令可以在指令的結尾加上\c(clear)清除已經輸入的指令。

一些MySQL的使用技巧

Tips2 :執行sql檔案

如果mysql的指令已經在一個檔案當中,則可以利用Shell重定向執行,格式如下:

$ mysql -u root -p < fileName
           

接着會提示你輸入mysql資料庫管理者root的密碼,輸入成功,則執行。

當然,如果你想在用到某個資料庫,又沒有在sql檔案中指明(比如建立一個表,但沒有指明資料庫),這時就可以在上述指令中指明,格式如下:

$mysql databaseName -u root -p < fileName
           

或者,你已經進入到MySQL指令模式,可是使用MySQL的source指令執行sql檔案

mysql> source /root/test/mysql-learning/insert.sql
           

還有一種使用Load data載入資料的方式

load data local infile '/root/test/mysql-learning/data.txt' into table T;
           

其中,檔案data.txt的格式如下( 以制表符隔開各列資料)

3       tom
4       messi
5       xavi
           

Tip3 關于作業系統的差異

在windows下,mysql資料庫名、表名是不區分大小寫的,但是在Linux環境下,由于其檔案系統嚴格區分大小寫,是以,大小寫不同,也就是不同的資料庫或者表明。

Tip4 : 關于字元集和排序方式

MySQL的字元串分為兩大類: 1)二進制字元串:即一串位元組序列,對位元組的解釋不涉及字元集,是以它沒有字元集和排序方式的概念 2)非二進制字元串:由字元構成的序列,字元集用來解釋字元串的内容,排序方式決定字元的大小 字元集和排序方式 字元集和排序方式的關系是這樣的:一個字元集可以有一個或多個排序方式,有一個預設的排序方式,我們可以通過以下例子說明:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [sql] mysql> show characterset like '%gbk%' ;  + ---------+------------------------+-------------------+--------+  | Charset | Description            | Default collation | Maxlen |  + ---------+------------------------+-------------------+--------+  | gbk     | GBK Simplified Chinese | gbk_chinese_ci    |      2 |   + ---------+------------------------+-------------------+--------+  1 row in set (0.00 sec)      mysql> show collation like '%gbk%' ;  + ----------------+---------+----+---------+----------+---------+  | Collation      | Charset | Id | Default | Compiled | Sortlen |  + ----------------+---------+----+---------+----------+---------+  | gbk_chinese_ci | gbk     | 28 | Yes     | Yes      |       1 |   | gbk_bin        | gbk     | 87 |         | Yes      |       1 |   + ----------------+---------+----+---------+----------+---------+  2 rows in set (0.00 sec)  

從上例中我們可以看出字元集gbk有兩個排序方式(分别為gbk_chinese_ci何gbk_bin),其中預設的排序方式為gbk_chinese_ci。 排序方式的命名規則為:字元集名字_語言_字尾,其中各個典型字尾的含義如下: 1)_ci:不區分大小寫的排序方式 2)_cs:區分大小寫的排序方式 3)_bin:二進制排序方式,大小比較将根據字元編碼,不涉及人類語言,是以_bin的排序方式不包含人類語言 是以,gbk_chinese_ci排序方式就表示:字元集為gbk,人類語言使用中文來比較大小,比較時區分大小寫。

Tips5 : 檢視MySQL的存儲引擎,及其說明

一些MySQL的使用技巧

。。。。中間省略若幹行

一些MySQL的使用技巧

其中字段engine是存儲引擎名稱,support字段為YES表示支援,為DEFAULT表示預設存儲引擎,為DISABLED表示支援但是已經關閉;comment是一些說明;transaction表示是否支援事物,XA表示是否支援分布式存儲,savepoint表示是否支援事務復原。上述顯示的内容,其實是MySQL自帶的資料庫表(information_schema資料庫中ENGINES表)中的資訊。

Tips 6 : 資料庫表的檔案存儲

MySQL指令行下使用指令檢視相關存儲路徑

mysql> show variables like '%dir%';
           

其中變量 datadir 的value就是資料庫表的存儲路徑

一些MySQL的使用技巧

其中MEMORY引擎表中的所有資料均放在記憶體中,是臨時性的,資料庫伺服器掉電後,所有資料将消失,它不占用任何硬碟空間,是以大量資料不使用該引擎,研究臨時性資料的時候可以選擇。

Tips 7 : 建立臨時表

create temporary table t10(id int ,name varchar(20));
           

這樣做的好處時,當斷開伺服器連接配接的時候,這張臨時表會被自動的删除,不必每次手動drop掉,節省資料庫資源。

temporary表隻對建立它的使用者可見,不同的使用者可以建立名字相同的臨時表。

可以建立一個與永久表同名的臨時temporary表,隻是這樣做臨時temporary表會隐藏永久表,在臨時表存在的情況下無法對原有表操作,當臨時表消失的時候,原來的永久表就會重制。

對于有連接配接池(或者永久性連接配接)的應用最好不要用臨時temporary表,因為無法保證每次使用的是同一個連接配接,以及用完無法保證連接配接會被及時釋放,進而銷毀臨時表。

Tips 8 :建立新的資料表

備份表結構操作的時候,可以使用下面的語句,備份表的結構,但不備份原有表的資料:

create table tt2 like t2;
           

當然也可以選擇複制原來表中的一些列,一些行和資料

create table ttt2 select name from t2 where id=2;
           

使用create table ... select 語句的缺點是不會把原有表的所有屬性都複制過來,會丢失像AUTO_INCREMENT、UNSIGNED等屬性,解決的辦法是select部分使用cast()函數強制使用特定的屬性。

Tips 9 : 改變表的結構

使用alter table可以改變表的結構,如修改某一列的類型,屬性名.....

Alter table table_name modify columnName ....  或者

Alter table table_name change columnName columnName ...

change需要把列定義重寫一片的原因是change能夠改變列明,而modify不可以。

修改資料表的引擎

Alter table tab_name Engine =  engineName;

重命名資料表

Alter table tb1_name RENAME To tb2_name;  或者

Rename table old_name to new_name;

其中,還可以使用Rename table 一次重命名多個資料表

Rename table t1 to tt1, t2 to tt2 ...

使用重命名在資料庫之間前移資料表(把sampdb資料庫表t遷移到test資料庫中)

Alter table sampdb.t  rename  to test.t; 或者

rename table sampdb.t To test.t

Tips 10 聯結查詢

内聯結:即笛卡爾積的形式,a表的每一項與b表的每一項結合,聯結後的資料集巨大,如a(10條),b(20條),c(30條)内聯結後的資料集是6000條

外聯結:分為左聯結和右聯結,左聯結是左邊表的資料全部保留,右邊表不存在的就set null,右聯結恰恰相反。可以通過外連接配接查找資料缺值。

上述都是表的橫向連接配接,豎向連接配接可以使用union進行,uninon預設會剔除重複的結果,若想保留重複的結果可以使用union all

select i1 from t1 uinon select i2 from t2;   // 結果中的列明來自第一個select中的列明