天天看點

常用的 Mysql 文法

一、進入MySQL與退出MySQL

1.進入MySQL步驟:先打開CMD指令行;指令:C:\Users\admin> mysql -h(域名,可填或不填) -u(賬号) -p(密碼);

連接配接成功時會跳出以下指令:

Connection id: 9 【這個表示:連接配接次數】

Current database: 【這個表示:目前操作的資料庫名稱】

Current user: root@localhost 【這個表示:目前登入的使用者 使用者名@位址】

SSL: Not in use 【這個表示:是否在使用加密連結 SSL加密】

Using delimiter: ; 【這個表示:指令分隔符,結束時以分号結束】

Server version: 5.5.48 MySQL Community Server (GPL) 【這個表示:目前mysql資料庫的版本型号】

Protocol version: 10 【這個表示:協定版本】

Connection: 127.0.0.1 via TCP/IP 【這個表示:連接配接資訊】

Server characterset: utf8 【這個表示:mysql資料庫管理系統的安裝編碼】

Db characterset: utf8 【這個表示:資料庫編碼】

Client characterset: utf8 【這個表示:目前用戶端的預設編碼】

Conn. characterset: utf8 【這個表示:目前資料庫連結使用的編碼】

TCP port: 3306 【這個表示:端口号】

Uptime: 7 min 11 sec 【這個表示:資料庫的啟動時間[距離上一次重新開機的時間]】

2、退出MySQL:quit或exit (回車) 或者 Ctrl+C

二、MySQL基礎的操作

1.建立資料庫指令:mysql> create database <資料庫名>

2.顯示所有的資料庫指令:mysql> show databases (注意:最後有個s)

3.删除資料庫指令:mysql> drop database <資料庫名>

4.進入資料庫指令:mysql> use <資料庫名>

5.轉換編碼指令:mysql> set names gbk

6.檢視目前使用的資料庫指令:mysql> select database();

7.目前資料庫所有的表資訊指令:mysql> show tables (注意:最後有個s);

8.導出資料庫指令:mysqldump  -h(域名)  -u(帳号)  -p(密碼) 資料庫名  >  本地路徑+檔案名; (注意:導出資料庫前必須先要退出MySQL控制台。還有導出的檔案字尾名一般都是使用 .sql)

9.導入資料庫指令:首先登入MySQL控制台C:\Users\admin> mysql -h(域名,可填或不填) -u(賬号) -p(密碼); 在進入資料庫mysql> use <資料庫>; 在導入資料庫mysql> source E:/school.sql  (注意:source 後面是你sql檔案所在的絕對路徑)

10.在MySQL的表中增加字段指令:mysql> alter table <表名> add column userid smallint not null primary key auto_increment; 這樣,就在這張表dbname中添加了一個字段userid,類型為smallint

11.删除表指令:mysql> drop table student

12.清空表指令:mysql> delete from student

13.更新表指令:mysql> update student set `name`=\'小A\' where `id`=1

三、表操作,操作前必須連接配接某個資料庫

1.建表指令:create table <表名> ( <字段名1> <類型1> [,..<字段名n> <類型n>]);

例如:

mysql> create table Student(

-> id smallint unsigned not null primary key auto_increment comment \'注釋id\',

-> name char(20) not null comment \'注釋name\',

-> sex tinyint null default "1" comment \'注釋sex[男為1,女為2]\',

->) engine = innoDB;

2.擷取表結構指令:desc <表名> 或者 show columns from <表名> 還有 show create table <表名>

例如:

mysql> desc Student

mysql> show columns from Student

mysql> show create table Student

3.删除表指令:drop table <表名>

例如:

mysql> drop table Student

4.添加新資料指令:insert into <表名> ( 字段名1 , ...字段名n ) values ( 值1 , ...值n )。或者 insert into <表名> values( 要輸入全部的資料結構 ),(注意:如需添加多條資料請用逗号隔開)

例如:

mysql> insert into Student values(1, \'小A\' , 2), (2, \'小B\', 1), (3, \'小C\', 2)

5.查詢表中資料指令:select <字段1,字段2,...字段n> from <表名> where <條件>。或者 select * from <表名>

例如:

mysql> select * from Student

6.删除表中資料指令:delete from <表名> where <條件>。或者 delete from <表名>

例如:

mysql> delete from Student

7.修改表中的資料指令:update <表名> set 字段=新值, … where <條件>

例如:

mysql> update Student set name=\'小D\' where id=3

8.更改表名指令:rename table <舊的表名> to <新的表名>

例如:

mysql> rename table Student to Class

9.用文本方式将資料裝入資料庫表中

例如:D:/mysql.txt

mysql> load data local infile "D:/mysql.txt" into table Student

四、資料類型

1.字元串類型

CHAR(M)型: 固定長度的字元串,最大長度為255個位元組

VARCHAR(M)型: 可變長度,最多不超過65 535位元組,如在建立時指定VARCHAR(n),則可存儲0~n個位元組

TINYTEXT型: 可變長度的字元串,支援最大長度255個位元組

TEXT型: 可變長度的字元串,支援最大長度65 535個位元組

MEDIUMTEXT型: 可變長度的字元串,支援最大長度16 777 215個位元組

LONGTEXT型: 可變長度的字元串,支援最大長度4 294 967 295個位元組

2.整型與浮點型    有符号[正負]                    無符号unsingn

TINYINT型:     -128 ~ 127                         0 ~ 255 (就是2的8次方-1)

SMALLINT型:    -32768 ~ 32767                     0 ~ 65535 (就是2的16次方-1)

MEDIUMINT型:   -8388608 ~ 8388607                  0 ~ 16777215 (就是2的24次方-1)

INT型:        -2147483648 ~ 2147483647              0 ~ 4294967296 (就是2的32次方-1)

BIGINT型:      -9223372036854775808 ~ 9223372036854775807   0 ~ 18446744073709551615 (就是2的64次方-1)

3.日期和時間類型

DATE型: YYYY-MM-DD 格式表示的日期值 / 取值範圍 1000-01-01 ~ 9999-12-31

TIME型: hh:mm:ss 格式表示的時間值 / 取值範圍 -838:59:59-838:59:59

DATETIME型: YYYY-MM-DD hh:mm:ss 格式表示日期與時間 / 取值範圍 1000-01-01 00:00:00 ~ 9999-12-31

TIMESTAMP型: YYYYMMDDhhmmss 格式表示的時間戳 / 取值範圍 19700101080001——20380119111407

YEAR型: YYYY 格式的年份 / 取值範圍 1901~2155

五、字段限制

我們僅僅是定義了字段的資料類型還不夠,我們還需要一些附加的屬性來限制或者規範字段

UNSIGNED 隻能用于設定資料類型,不允許出現負數,最大存儲長度會增加一倍,ZEROFILL 隻能用于設定數值類型,在數值之前自動用0補齊不足的位數,AUTO_INCREMENT 如果給某個資料表的一個整數資料列定義可選的AUTO_INCREMENT屬性,那麼當使用者向這個資料表插入一個新記錄時,MySQL就會自動地把這個整數資料列的目前最大取值加上1之後指派給新記錄中的這個整數字段; 使用AUTO_INCREMENT屬性需要注意幾個問題: 這個屬性必須與NOT NULL 、PRIMARY KEY 或者 UNIQUE 屬性同時使用; 每個資料表最多隻能有一個AUTO_INCREMENT資料列; MySQL的這種ID值自動生成機制隻在使用者使用INSERT指令插入新記錄、并且沒有為ID字段明确地給出一個值或NULL時才起作用。如果使用者給出了一個具體的值并且這個值在ID列裡出現過,MySQL就将使用這個ID值生成一條新記錄;

NULL和NOT NULL 預設為NULL,即插入值時沒有在此字段插入值,預設為NULL值,如果指定了NOT NULL,則必須在插入值時在此字段填入值 DEFAULT 可以通過此屬性來指定一個預設值,如果沒有在此列添加值,那麼預設添加此值 主鍵(PRIMARY KEY) 能夠唯一辨別表中某一行的屬性或屬性組。 一個表隻能有一個主鍵,但可以有多個候選索引。主鍵常常與外鍵構成參照完整性限制,防止出現資料不一緻。主鍵可以保證記錄的唯一和主鍵域非空,資料庫管理系統對于主鍵自動生成唯一索引,是以主鍵也是一個特殊的索引。 外鍵(foreign key)是用于建立和加強兩個表資料之間的連結的一列或多列。 外鍵限制主要用來維護兩個表之間資料的一緻性。簡言之,表的外鍵就是另一表的主鍵,外鍵将兩表聯系起來。一般情況下,要删除一張表中的主鍵必須首先要確定其它表中的沒有相同外鍵(即該表中的主鍵沒有一個外鍵和它相關聯)

六、MySQL 運算符

1.比較運算符

=   等于 

>   大于 

<   小于 

>=  大于等于 

<=  小于等于 

<>  不等于 

!>   不大于 

!<   不小于

%  比對任意多個字元

_   比對任意一個字元

2.邏輯運算符

AND  如果組合的條件都是 TRUE , 傳回 TRUE

OR    如果組合的條件其一是 TRUE , 傳回 TRUE

NOT  如果條件是 FALSE , 傳回 TRUE

七、聚集函數

SUM ( ) 求和

AVG ( ) 平均值

COUNT ( ) 表達式中記錄的數目

COUNT (* ) 計算記錄的數目

MAX 最大值

MIN 最小值

VAR 方差

STDEV 标準誤差

FIRST 第一個值

LAST 最後一個值

八、查詢字句

1.用ORDER BY子句排序結果(ASC表示升序,為預設值,DESC為降序)

ORDER子句按一個或多個(最多16個)字段排序查詢結果,可以是升序(ASC)也可以是降序(DESC),預設是升序

ORDER子句通常放在SQL語句的最後

ORDER子句中定義了多個字段,則按照字段的先後順序排序

例如:對學生的年齡進行排序

SELECT * FROM student ORDER BY age DESC;

2.LIMIT 子句對查詢出的結果做限制,往往我們不想一次取出所有的資料

LIMIT有兩個參數: 一個參數、表示取得行數! 兩個參數、第一個參數表示從第幾行去,第二個參數表示取多少行

3.LEFT JOIN  ON 連表查詢

連表查詢有三種方式,分别是:左連和右連還有内連

左連:  以左邊的主表為主,如果主表沒有資料,則不會傳回結果,即便是從表有資料

left join `表名` on 連表條件

右連: 以右邊的從表為主,如果從表沒有資料,則不會傳回結果,即便是主表有資料

right join `表名` on 連表條件

内連: 以兩張表為主,必須兩張表都有資料的情況,才會傳回結果。

inner join `表名` on 連表條件

九、MySQL的函數

mysqli_connect 連接配接資料庫,參數是 通路位址、賬号、密碼、資料庫名

mysqi_connect_errno 傳回資料庫連接配接的錯誤狀态碼

mysqli_connect_error 傳回資料庫連接配接的錯誤資訊

mysqli_close 關閉資料庫連接配接,參數是資料庫連接配接

mysqli_query 對資料庫執行一次sql語句的執行

mysqli_num_rows 取得結果集中行的數目

mysqli_fetch_array 從結果集中取得一行作為關聯數組,或數字數組,或二者兼有,第二個參數 索引數組MYSQLI_NUM 關聯數組 MYSQLI_ASSOC 兩者皆有MYSQLI_BOTH

mysqli_fetch_assoc 從結果集中取得一行作為關聯數組

mysqli_fetch_row 從結果集中取得一行作為枚舉數組

mysqli_fetch_object 從結果集中取得一行作為對象

mysqli_free_result 釋放結果記憶體

十、事務

事務是需要在同一個處理單元中執行的一系列更新處理的集合。通過使用事務,可以對資料庫中的資料庫中的資料庫更新處理的送出和取消進行管理。事務處理的終止指令包括COMMIT(送出處理) 和ROLLBACK(取消處理)兩種。 DBMS的事務具有原子性(Atomicity)、一緻性(Consistency)、隔離性(Isolation)和持久性(Durability)四種特性。通常将這四種特性的首字母結合起來,統稱為ACID特性。

例:給A君減10元,給B君加10元。 START TRANSACTION; UPDATE user SET money=money-10 WHERE name = \'A君\'; UPDATE user SET money=money+10 WHERE name = \'B君\'; COMMIT;

(注)、以下是在網絡看到使用MySQL的一些管理心得

在windows中MySql以服務形式存在,在使用前應確定此服務已經啟動,未啟動可用net start mysql指令啟動。而Linux中啟動時可用“/etc/rc.d/init.d/mysqld start"指令,注意啟動者應具有管理者權限。

剛安裝好的MySql包含一個含空密碼的root帳戶和一個匿名帳戶,這是很大的安全隐患,對于一些重要的應用我們應将安全性盡可能提高,在這裡應把匿名帳戶删除、 root帳戶設定密碼,可用如下指令進行:

use mysql;

delete from User where User="";

update User set Password=PASSWORD(\'newpassword\') where User=\'root\';

如果要對使用者所用的登入終端進行限制,可以更新User表中相應使用者的Host字段,在進行了以上更改後應重新啟動資料庫服務,此時登入時可用如下類似指令:

mysql -uroot -p;

mysql -uroot -pnewpassword;

mysql mydb -uroot -p;

mysql mydb -uroot -pnewpassword;

上面指令參數是常用參數的一部分,詳細情況可參考文檔。此處的mydb是要登入的資料庫的名稱。

在進行開發和實際應用中,使用者不應該隻用root使用者進行連接配接資料庫,雖然使用root使用者進行測試時很友善,但會給系統帶來重大安全隐患,也不利于管理技術的提高。我們給一個應用中使用的使用者賦予最恰當的資料庫權限。如一個隻進行資料插入的使用者不應賦予其删除資料的權限。MySql的使用者管理是通過 User表來實作的,添加新使用者常用的方法有兩個,一是在User表插入相應的資料行,同時設定相應的權限;二是通過GRANT指令建立具有某種權限的使用者。其中GRANT的常用用法如下:

grant all on mydb.* to NewUserName@HostName identified by "password" ;

grant usage on *.* to NewUserName@HostName identified by "password";

grant select,insert,update on mydb.* to NewUserName@HostName identified by "password";

grant update,delete on mydb.TestTable to NewUserName@HostName identified by "password";

若要給此使用者賦予他在相應對象上的權限的管理能力,可在GRANT後面添加WITH GRANT OPTION選項。而對于用插入User表添加的使用者,Password字段應用PASSWORD 函數進行更新加密,以防不軌之人竊看密碼。對于那些已經不用的使用者應給予清除,權限過界的使用者應及時回收權限,回收權限可以通過更新User表相應字段,也可以使用REVOKE操作。

下面給出本人從其它資料(www.cn-java.com)獲得的對常用權限的解釋:

全局管理權限:

FILE: 在MySQL伺服器上讀寫檔案。

PROCESS: 顯示或殺死屬于其它使用者的服務線程。

RELOAD: 重載通路控制表,重新整理日志等。

SHUTDOWN: 關閉MySQL服務。

資料庫/資料表/資料列權限:

Alter: 修改已存在的資料表(例如增加/删除列)和索引。

Create: 建立新的資料庫或資料表。

Delete: 删除表的記錄。

Drop: 删除資料表或資料庫。

INDEX: 建立或删除索引。

Insert: 增加表的記錄。

Select: 顯示/搜尋表的記錄。

Update: 修改表中已存在的記錄。

特别的權限:

ALL: 允許做任何事(和root一樣)。

USAGE: 隻允許登入--其它什麼也不允許做。

一個小小操作技巧:

  如果你在打指令時,回車後發現忘記加上結束分号了,你無須重新打一遍指令,隻要打個分号回車就可以了。也就是說你可以把一個完整的指令分成幾行來打,完後用分号作結束标志就OK了