原文鏈接: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';