學習總結了一些MySQL的使用技巧:
Tips1 : 關于結束符
MySQL中的結束符預設是分号(;),除了分号外終止語句的另外一種方法是使用\g(表示go),當然也可以使用\G,這樣可以豎直排列顯示結果,每行一個值,對于輸出行比較長,使用\G輸出更易于閱讀(比如下面是檢視資料庫定義的語句顯示);倘若不想執行已經輸入的指令可以在指令的結尾加上\c(clear)清除已經輸入的指令。
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的存儲引擎,及其說明
。。。。中間省略若幹行
其中字段engine是存儲引擎名稱,support字段為YES表示支援,為DEFAULT表示預設存儲引擎,為DISABLED表示支援但是已經關閉;comment是一些說明;transaction表示是否支援事物,XA表示是否支援分布式存儲,savepoint表示是否支援事務復原。上述顯示的内容,其實是MySQL自帶的資料庫表(information_schema資料庫中ENGINES表)中的資訊。
Tips 6 : 資料庫表的檔案存儲
MySQL指令行下使用指令檢視相關存儲路徑
mysql> show variables like '%dir%';
其中變量 datadir 的value就是資料庫表的存儲路徑
其中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中的列明