MySQL常用語句操作: 1. 創建資料庫相關命令; 2. 新建資料庫之後的相關操作 - ALTER,DROP,UPDATE; 3. 資料庫表間數據複製; 4. 資料庫重命名; 5. 資料庫用戶許可權相關; 6. 多表查詢語句 ...
1. 創建資料庫相關命令:
首先,下載MySQL相關軟體包:aptitude install mysql-server/mysql-client
MySQL中的root用戶類似於Linux下的root用戶,擁有最多高的許可權,若操作不當會對數據造成嚴重的危害。因此,針對每一個應用程式創建
對應的資料庫及操作用戶是一個好習慣。
mysql -u root -p + 回車 -u後跟用戶名,-p表示需要密碼登錄,首次進入mysql用root用戶(輸入root用戶賬戶的密碼,這個密碼要麼是在安裝過程中,
要麼是使用mysqladmin工具獲得的。)。若進入失敗,原因可能是原始密碼未正確配置,可嘗試用密碼'root'登錄。若仍報錯,可參考如下解決方法:
http://www.cnblogs.com/kerrycode/p/4368312.html
http://blog.csdn.net/yangxt/article/details/17200611
mysql的相關安裝目錄可參考:
http://www.linuxidc.com/Linux/2014-10/108644.htm
下麵命令嘗試可用:
mysqladmin -u root -p password + 回車(若之前有密碼,則會顯示在password之後)
Enter password: 輸入新密碼(不可見)
mysql> STATUS(\s) - 列出當前mysql的相關狀態信息
mysql> SHOW DATABASES; - 顯示資料庫列表
mysql> USE DB_name; - 選中資料庫DB_name
mysql> SHOW TABLES; - 顯示DB_name下的TABLES列表
mysql> CREATE DATABASE DB_name; - 創建一個新的資料庫,當然,首先你應該以root用戶登錄,普通用戶並沒有創建資料庫的權利
mysql> GRANT SELECT,INSERT,DELETE,UPDATE ON DB_name TO user_name IDENTIFIED
> by 'user_psd'; - 授予新用戶user_name對於資料庫DB_name的指定許可權,登錄密碼user_psd。該用戶擁有的許可權:SELECT,INSERT,DELETE,UPDATE
mysql DB_name -u user_name -p - 用新創建的用戶user_name登錄資料庫DB_name
mysql mytest -u root -p - 用root用戶登錄資料庫DB_name,當我們需要為資料庫DB_name創建新表時,需要root用戶的許可權,如下,創建新表的過程:
mysql> CREATE TABLE employees (
- > empid int not null, - 該欄位列值非空
-> lastname varchar(30),
-> firstname varchar(30),
-> salary float,
-> primary key (empid)); - 該欄位列值唯一,"primary key" 表示該列是表的主鍵, MySQL將自動索引該列
mysql> SHOW COLUMNS FROM employees; - 顯示employees各欄位信息(有時我們需要知道表的結構才能確定插入內容的格式)
mysql> SHOW CREATE TABLE employees; - 顯示表employees的創建過程,同樣可以查看其內部結構
mysql> INSERT INTO table VALUES (...); - 項表table插入一條信息,如:mysql> INSERT INTO employees VALUES (1, 'Blum', 'Rich', 25000.00);
若:mysql> INSERT INTO employees VALUES (1, 'Blum', 'Barbara', 45000.00);
則:ERROR 1062 (23000): Duplicate entry '1' for key 1
mysql> DELETE FROM employees WHERE empid = 1; - 刪除empid = 1的那條信息
mysql> DELETE FROM employees; - 刪除指定資料庫employees的所有表
mysql> SELECT * FROM employees; - 查詢表employees的所有欄位內容,SELECT為查詢命令
mysql> SELECT datafields FROM table; - 查詢欄位列表datafields指定的內容(個欄位間用“,”分割)。常用的三個過濾器修飾符如下:
WHERE:顯示符合特定條件的數據行子集。如:mysql> SELECT * FROM employees WHERE salary > 40000;
ORDER BY:以指定順序顯示數據行。
LIMIT:只顯示數據行的一個子集。
E.G. :
mysql> SELECT * FROM employees;
+-------+----------+-----------+--------+
| empid | lastname | firstname | salary |
+-------+----------+-----------+--------+
| 0 | ER | ZHANG | 4500 |
| 1 | SAN | ZHANG | 5500 |
| 2 | SI | ZHANG | 6500 |
| 3 | WU | ZHANG | 7500 |
| 4 | LIU | ZHANG | 8500 |
| 5 | QI | ZHANG | 9500 |
+-------+----------+-----------+--------+
mysql> SELECT lastname, salary FROM employees WHERE salary > 5000 && salary < 8000;
+----------+--------+
| lastname | salary |
+----------+--------+
| SAN | 5500 |
| SI | 6500 |
| WU | 7500 |
+----------+--------+
mysql> SELECT * FROM employees1 ORDER BY lastname (ASC/DECS); - 按欄位lastname排序查詢表employees1
mysql> SELECT * FROM employees1 WHERE salary LIKE '6%'; - 限制salary為數字6開頭的項,LIKE字句可以代替“=”使用
mysql> exit/quit - 退出資料庫軟體
2. 新建資料庫之後的相關操作:
ALTER:
mysql> ALTER TABLE table_name ...; - 創建表之後,有時我們需要對標的結構進行修改,就用這個作為命令頭部
mysql> ALTER TABLE table_name RENAME (AS) table_new_name; - 表重命名
mysql> ALTER TABLE table_name ADD 列名 列數據類型 [AFTER 插入位置]; - 在表中新增一個欄位信息
mysql> ALTER TABLE table_name CHANGE 列名稱 列新名稱 新數據類型; - 指定列重命名
mysql> ALTER TABLE table_name DROP 列名稱; - 刪除指定列
DROP:
mysql> DROP TABLE table_name; - 刪除指定表
mysql> DROP DATABASE database_name; - 刪除指定資料庫
mysqladmin -u root -p drop database_name; - 同樣可以使用mysqladmin命令在mysql軟體之外刪除指定資料庫
UPDATE:
+-------+----------+-----------+--------+
| empid | lastname | firstname | salary |
+-------+----------+-----------+--------+ +-------+----------+-----------+--------+
| 5 | QI | ZHANG | 9500 | | 5 | QI | ZHANG | 9500 |
| 7 | BA | ZAHNG | 9500 | --> | 6 | BA | ZAHNG | 9500 |
+-------+----------+-----------+--------+ +-------+----------+-----------+--------+
mysql> UPDATE employees1
-> SET empid = 6
-> WHERE lastname = BA; - 限定條件
3. 資料庫表間數據複製:http://www.jb51.net/article/47562.htm
同一資料庫表間複製:
INSERT (INTO) table1 select * from table2; - 完全複製(mysql測試可用)
INSERT (INTO) table1 select distinct * from table2; - 不複製重覆紀錄(mysql測試不可用)
INSERT (INTO) table1 select top 5 * from table2; - 前五條紀錄(mysql測試不可用)
跨資料庫表間複製:
INSERT (INTO) (current.)table1 select * from src_database.table2; - 完全複製
INSERT (INTO) (current.)table1 select distinct * from src_database.table2; - 不複製重覆紀錄
INSERT (INTO) (current.)table1 select top 5 * from src_database.table2; - 前五條紀錄
若table1不存在,則首先應該創建表,並使其結構與src_database結構相同方可copy:
CREATE TABLE table1 LIKE (src_database.)table2; - +(src_database.)取決於是否在同一個資料庫
INSERT table1 SELECT * FROM (src_database.)table2;
4. 資料庫重命名的幾種方法:http://www.cnblogs.com/allenhua/p/5393189.html
以方法四為例(mysqldump導出數據再導入):mytest -> mytest1
mysqldump -u root -p mytest > mytest_dump.SQL
mysql -u root -p -e "CREATE DATABASE mytest1"
mysql -u root -p mytest1 < mytest_dump.SQL
mysql -u root -p -e "DROP DATABASE mytesst"
5. 資料庫用戶許可權相關:
mysql> GRANT ALL PRIVILEGES ON mytest1.* TO test@localhost IDENTIFIED BY 'test'; - 授予用戶test對於資料庫mytest1的所有許可權
mysql> GRANT SELECT, INSERT, DELETE,... ON mytest1.* TO test@localhost IDENTIFIED BY 'test'; - 授予用戶test指定許可權
mysql> DELETE FROM user WHERE user = 'test'; - 刪除用戶test
mysql> FLUSH PRIVILEGES; - 刷新各用戶許可權
mysql> select * from user; - 查詢所有用戶的權利
6. 多表查詢:
mysql> SELECT salary FROM employees1
-> UNION (ALL)
-> SELECT salary FROM employees2; - 合併employees1與employees2兩表salary結果,無重覆。+(ALL)全列出可重覆
+--------+
| salary |
+--------+
| 4500 |
| 5500 |
| 6500 |
| 7500 |
| 8500 |
| 9500 |
| 10500 |
| 11500 |
+--------+
三種JOIN查詢方式:http://www.runoob.com/mysql/mysql-join.html
兩個實例資料庫結構如下:
mysql> SELECT * FROM tcount_tbl;
+---------------+--------------+
| runoob_author | runoob_count |
+---------------+--------------+
| 菜鳥教程 | 10 |
| RUNOOB.COM | 20 |
| Google | 22 |
+---------------+--------------+
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 |
+-----------+---------------+---------------+-----------------+
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;
等價於:
mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b
-> WHERE 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 |
+-------------+-----------------+----------------+
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 |
+-------------+-----------------+----------------+
RIGHT JOIN(右連接):與 LEFT 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 |
+-------------+-----------------+----------------+