mysql常用語句大全


原文鏈接:https://blog.csdn.net/hzw6991/article/details/87757426
系統環境變量設置:

1 新建MYSQL_HOME->C:\Program Files\MySQL\MySQL Server 5.7
2 Path編輯->后面增加%MYSQL_HOME%\bin

登陸時輸入mysql -u root -p(不輸入密碼),回車輸入密碼即可進入數據庫。

一 、常用操作數據庫的命令

show databases; 查看所有的數據庫
create database test; 創建一個叫test的數據庫
drop database test;刪除一個叫test的數據庫
use test;選中庫 ,在建表之前必須要選擇數據庫
show tables; 在選中的數據庫之中查看所有的表

create table 表名 (字段1 類型, 字段2 類型);
例如:CREATE TABLE tbl(
        id INT NOT NULL AUTO_INCREMENT, 
        title VARCHAR(100) NOT NULL, 
        author VARCHAR(40) NOT NULL, 
        date DATE, 
        PRIMARY KEY ( id ))ENGINE=InnoDB DEFAULT CHARSET=utf8; 
        
desc 表名;查看所在的表的字段
drop table 表名; 刪除表
show create databases 庫名;查看創建庫的詳細信息
show create table 表名; 查看創建表的詳細信息

二、修改表的命令

修改字段類型 alter table 表名 modify 字段 字段類型;
添加新的字段 alter table 表名 add 字段 字段類型
添加字段並指定位置  alter table 表名 add 字段 字段類型   after 字段;
刪除表字段  alter table 表名 drop 字段名;
修改指定的字段  alter table 表名 change 原字段名字  新的字段名字 字段類型

三、對數據的操作

1.增加數據(insert)3種方式

insert into 表名 values(值1,值2,...)(很少用)

insert into 表名(字段1,字段2...) values(值1,值2,....);(較常用)
例如:INSERT INTO tbl 
    (title, author, date)
    VALUES
    ("學習 PHP", "菜鳥", NOW());
    
insert into 表名(字段1,字段2...) values(值1,值2,....),(值1,值2,....),(值1,值2,....);

2.刪除數據

(delete) delete from 表名 where 條件 注意:where 條件必須加,否則數據會被全部刪除

3.更新數據(update)

update 表名 set字段1 = 值1, 字段2 = 值2 where 條件

4.查詢數據(select)

 查詢表中的所有數據   select * from 表名
 指定數據查詢    select 字段 from 表名 
 根據條件查詢出來的數據  select 字段 from 表名 where 條件 (最常用的)

​ where 條件后面跟的條件
​ 關系:>,<,>=,<=,!=
​ 邏輯:or, and
​ 區間:id between 4 and 6 ;閉區間,包含邊界
5.排序

select 字段 from 表 order by 字段  排序關鍵詞(desc | asc)

排序關鍵詞 desc 降序 asc 升序(默認)
5.1 通過字段來排序

select * from star order by money desc, age asc

​ 5.2 多字段排序

select 字段 from 表 order by 字段1  desc |asc,...字段n desc| asc;

​ 6.常用的統計函數 sum,avg,count,max,min

只分組:select * from 表 group by 字段
例子: select count(sex) as re,sex from star group by sex having re > 3;
分組統計: select count(sex) from star group by sex;

7.分組

7.1 使用 GROUP BY

SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

例如

mysql> SELECT * FROM employee_tbl;
+----+--------+---------------------+--------+
| id | name   | date                | singin |
+----+--------+---------------------+--------+
|  1 | 小明 | 2016-04-22 15:25:33 |      1 |
|  2 | 小王 | 2016-04-20 15:25:47 |      3 |
|  3 | 小麗 | 2016-04-19 15:26:02 |      2 |
|  4 | 小王 | 2016-04-07 15:26:14 |      4 |
|  5 | 小明 | 2016-04-11 15:26:40 |      4 |
|  6 | 小明 | 2016-04-04 15:26:54 |      2 |
+----+--------+---------------------+--------+
6 rows in set (0.00 sec)

mysql> SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;
+--------+----------+
| name   | COUNT(*) |
+--------+----------+
| 小麗 |        1 |
| 小明 |        3 |
| 小王 |        2 |
+--------+----------+
3 rows in set (0.01 sec)

7.2 使用 WITH ROLLUP

WITH ROLLUP 可以實現在分組統計數據基礎上再進行相同的統計(SUM,AVG,COUNT…)。

mysql> SELECT coalesce(name, '總數'), SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;
+--------------------------+--------------+
| coalesce(name, '總數') | singin_count |
+--------------------------+--------------+
| 小麗                   |            2 |
| 小明                   |            7 |
| 小王                   |            7 |
| 總數                   |           16 |
+--------------------------+--------------+
4 rows in set (0.01 sec)

8 限制查詢結果的記錄數

select * from 表名  limit 偏移量,數量

​ 說明:
​ 8.1.不寫偏移量的話就是默認的為0
​ 8.2.實現分頁的時候必須寫偏移量
​ 偏移量怎么計算?:
​ limit (n-1)*數量 ,數量

9 組合

MySQL UNION 操作符用於連接兩個以上的 SELECT 語句的結果組合到一個結果集合中。多個 SELECT 語句會刪除重復的數據。

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];

例如:

下面是選自 "Websites" 表的數據:

mysql> SELECT * FROM Websites;
+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘寶          | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鳥教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     |
+----+---------------+---------------------------+-------+---------+

下面是 "apps" APP 的數據:

mysql> SELECT * FROM apps;
+----+------------+-------------------------+---------+
| id | app_name   | url                     | country |
+----+------------+-------------------------+---------+
|  1 | QQ APP     | http://im.qq.com/       | CN      |
|  2 | 微博 APP | http://weibo.com/       | CN      |
|  3 | 淘寶 APP | https://www.taobao.com/ | CN      |
+----+------------+-------------------------+---------+
3 rows in set (0.00 sec)

下面的 SQL 語句從 "Websites" 和 "apps" 表中選取所有不同的country:

SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;
+----+
| country | 
+----+-
|  CN  | 
|  IND | 
|  USA | 
+----+

下面的 SQL 語句使用 UNION ALL 從 "Websites" 和 "apps" 表中選取所有的country

SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;
+----+
| country | 
+----+-
|  CN  | 
|  CN  | 
|  CN  | 
|  CN  | 
|  CN  | 
|  IND | 
|  USA | 
|  USA | 
|  USA | 
+----+

原文出處:https://www.runoob.com/mysql/mysql-join.html

四、多表聯合查詢

在RUNOOB數據庫中有兩張表 tcount_tbl 和 runoob_tbl。兩張數據表數據如下:

mysql> use RUNOOB;
Database changed
mysql> SELECT * FROM tcount_tbl;
+---------------+--------------+
| runoob_author | runoob_count |
+---------------+--------------+
| 菜鳥教程  | 10           |
| RUNOOB.COM    | 20           |
| Google        | 22           |
+---------------+--------------+
3 rows in set (0.01 sec)
 
mysql> SELECT * from runoob_tbl;
+-----------+---------------+---------------+-----------------+
| runoob_id | runoob_title  | runoob_author | submission_date |
+-----------+---------------+---------------+-----------------+
| 1         | 學習 PHP    | 菜鳥教程  | 2017-04-12      |
| 2         | 學習 MySQL  | 菜鳥教程  | 2017-04-12      |
| 3         | 學習 Java   | RUNOOB.COM    | 2015-05-01      |
| 4         | 學習 Python | RUNOOB.COM    | 2016-03-06      |
| 5         | 學習 C      | FK            | 2017-04-05      |
+-----------+---------------+---------------+-----------------+
5 rows in set (0.01 sec)

4.1 INNER JOIN(內連接,或等值連接)

mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1           | 菜鳥教程    | 10             |
| 2           | 菜鳥教程    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
+-------------+-----------------+----------------+
4 rows in set (0.00 sec)

4.2 LEFT JOIN(左連接)

mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1           | 菜鳥教程    | 10             |
| 2           | 菜鳥教程    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
| 5           | FK              | NULL           |
+-------------+-----------------+----------------+
5 rows in set (0.01 sec)

4.3 RIGHT JOIN(右連接)

mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1           | 菜鳥教程    | 10             |
| 2           | 菜鳥教程    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
| NULL        | NULL            | 22             |
+-------------+-----------------+----------------+
5 rows in set (0.01 sec)

五、 事務

MYSQL 事務處理主要有兩種方法:

1、用 BEGIN, ROLLBACK, COMMIT來實現

  • BEGIN 開始一個事務
  • ROLLBACK 事務回滾
  • COMMIT 事務確認

2、直接用 SET 來改變 MySQL 的自動提交模式:

  • SET AUTOCOMMIT=0 禁止自動提交
  • SET AUTOCOMMIT=1 開啟自動提交
mysql> use RUNOOB;
Database changed
mysql> CREATE TABLE runoob_transaction_test( id int(5)) engine=innodb;  # 創建數據表
Query OK, 0 rows affected (0.04 sec)
 
mysql> select * from runoob_transaction_test;
Empty set (0.01 sec)
 
mysql> begin;  # 開始事務
Query OK, 0 rows affected (0.00 sec)
 
mysql> insert into runoob_transaction_test value(5);
Query OK, 1 rows affected (0.01 sec)
 
mysql> insert into runoob_transaction_test value(6);
Query OK, 1 rows affected (0.00 sec)
 
mysql> commit; # 提交事務
Query OK, 0 rows affected (0.01 sec)
 
mysql>  select * from runoob_transaction_test;
+------+
| id   |
+------+
| 5    |
| 6    |
+------+
2 rows in set (0.01 sec)
 
mysql> begin;    # 開始事務
Query OK, 0 rows affected (0.00 sec)
 
mysql>  insert into runoob_transaction_test values(7);
Query OK, 1 rows affected (0.00 sec)
 
mysql> rollback;   # 回滾
Query OK, 0 rows affected (0.00 sec)
 
mysql>   select * from runoob_transaction_test;   # 因為回滾所以數據沒有插入
+------+
| id   |
+------+
| 5    |
| 6    |
+------+
2 rows in set (0.01 sec)

六、索引

6.1 普通索引

創建索引

這是最基本的索引,它沒有任何限制。它有以下幾種創建方式:

CREATE INDEX indexName ON mytable(username(length)); 

如果是CHAR,VARCHAR類型,length可以小於字段實際長度;如果是BLOB和TEXT類型,必須指定 length。

修改表結構(添加索引)

ALTER table tableName ADD INDEX indexName(columnName)

創建表的時候直接指定

CREATE TABLE mytable(  
 
ID INT NOT NULL,   
 
username VARCHAR(16) NOT NULL,  
 
INDEX [indexName] (username(length))  
 
);  

刪除索引的語法

DROP INDEX [indexName] ON mytable; 

6.2 唯一索引

它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種創建方式:

創建索引

CREATE UNIQUE INDEX indexName ON mytable(username(length)) 

修改表結構

ALTER table mytable ADD UNIQUE [indexName] (username(length))

創建表的時候直接指定

CREATE TABLE mytable(  
 
ID INT NOT NULL,   
 
username VARCHAR(16) NOT NULL,  
 
UNIQUE [indexName] (username(length))  
 
);  

6.3 使用ALTER 命令添加和刪除索引

有四種方式來添加數據表的索引:

  • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list):該語句添加一個主鍵,這意味着索引值必須是唯一的,且不能為NULL。

  • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 這條語句創建索引的值必須是唯一的(除了NULL外,NULL可能會出現多次)。

  • ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出現多次。

  • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):該語句指定了索引為 FULLTEXT ,用於全文索引。

以下實例為在表中添加索引。

mysql> ALTER TABLE testalter_tbl ADD INDEX (c);

你還可以在 ALTER 命令中使用 DROP 子句來刪除索引。嘗試以下實例刪除索引:

mysql> ALTER TABLE testalter_tbl DROP INDEX c;

七、臨時表、復制表、導出導入數據

7.1 臨時表TEMPORARY

以下展示了使用MySQL 臨時表的簡單實例

mysql> CREATE TEMPORARY TABLE SalesSummary (
    -> product_name VARCHAR(50) NOT NULL
    -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
    -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
    -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SalesSummary
    -> (product_name, total_sales, avg_unit_price, total_units_sold)
    -> VALUES
    -> ('cucumber', 100.25, 90, 2);

mysql> SELECT * FROM SalesSummary;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber     |      100.25 |          90.00 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)

當你使用 SHOW TABLES命令顯示數據表列表時,你將無法看到 SalesSummary表。

如果你退出當前MySQL會話,再使用 SELECT命令來讀取原先創建的臨時表數據,那你會發現數據庫中沒有該表的存在,因為在你退出時該臨時表已經被銷毀了。

7.2 復制表

可以使用 INSERT INTO ... SELECT 語句來實現。

mysql> INSERT INTO clone_tbl (runoob_id,
    ->                        runoob_title,
    ->                        runoob_author,
    ->                        submission_date)
    -> SELECT runoob_id,runoob_title,
    ->        runoob_author,submission_date
    -> FROM runoob_tbl;
Query OK, 3 rows affected (0.07 sec)
Records: 3  Duplicates: 0  Warnings: 0

7.3 導出導入數據

導出---------

1 使用 SELECT ... INTO OUTFILE 語句導出數據

以下實例中我們將數據表 runoob_tbl 數據導出到 /tmp/runoob.txt 文件中:

mysql> SELECT * FROM runoob_tbl 
    -> INTO OUTFILE '/tmp/runoob.txt';

你可以通過命令選項來設置數據輸出的指定格式,以下實例為導出 CSV 格式:

mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/runoob.txt'
    -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
    -> LINES TERMINATED BY '\r\n';

在下面的例子中,生成一個文件,各值用逗號隔開。這種格式可以被許多程序使用。

SELECT a,b,a+b INTO OUTFILE '/tmp/result.text'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;

2 將數據表及數據庫拷貝至其他主機

如果你需要將數據拷貝至其他的 MySQL 服務器上, 你可以在 mysqldump 命令中指定數據庫名及數據表。

在源主機上執行以下命令,將數據備份至 dump.txt 文件中:

$ mysqldump -u root -p database_name table_name > dump.txt
password *****

導入---------

1 mysql 命令導入

使用 mysql 命令導入語法格式為:

mysql -u用戶名    -p密碼    <  要導入的數據庫數據(runoob.sql)

實例:

# mysql -uroot -p123456 < runoob.sql

2 source 命令導入

source 命令導入數據庫需要先登錄到數庫終端:

mysql> create database abc;      # 創建數據庫
mysql> use abc;                  # 使用已創建的數據庫 
mysql> set names utf8;           # 設置編碼
mysql> source /home/abc/abc.sql  # 導入備份數據庫

3 使用 LOAD DATA 導入數據

MySQL 中提供了LOAD DATA INFILE語句來插入數據。 以下實例中將從當前目錄中讀取文件 dump.txt ,將該文件中的數據插入到當前數據庫的 mytbl 表中。

mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;

4 使用 mysqlimport 導入數據

mysqlimport 客戶端提供了 LOAD DATA INFILEQL 語句的一個命令行接口。mysqlimport 的大多數選項直接對應 LOAD DATA INFILE 子句。

從文件 dump.txt 中將數據導入到 mytbl 數據表中, 可以使用以下命令:

$ mysqlimport -u root -p --local mytbl dump.txt
password *****

八、DCL 數據控制語言

1.創建用戶:

create user'xiaoming'@'localhost' identified by '666666';

2.授權用戶:

grant all on test.to'xiaoming'@'localhost';

3.刷新權限:

flush privileges;

4.取消授權:

revoke all on test.* from 'xiaoming'@'localhost';

5.刪除用戶:

drop user'xiaoming'@'localhost';


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM