大綱
一、庫管理
二、表管理
三、索引管理
四、用戶管理
五、視圖管理
六、SELECT查詢
一、庫管理
(1)、創建數據庫
CREATE DATABASE db_name [CHARACTER SET [=] charset_name] [COLLATE [=] collation_name]; mysql> CREATE DATABASE IF NOT EXISTS testdb CHARACTER SET 'gbk' COLLATE 'gbk_chinese_ci';
(2)、刪除數據庫
DROP DATABASE [IF EXISTS] db_name; mysql> DROP DATABASE testdb;
(3)、查看所有數據庫
SHOW DATABASES; mysql> SHOW DATABASES;
二、表管理
(1)、創建表
CREATE TABLE [IF NOT EXISTS] db_name.tb_name( col_name column_definition); CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name select_statement CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name { LIKE old_tbl_name | (LIKE old_tbl_name) } mysql> CREATE TABLE user(Name CHAR(5) NOT NULL,Age TINYINT UNSIGNED,Gender ENUM('M','F') NOT NULL); mysql> CREATE TABLE testuser SELECT User,Host,Password FROM mysql.user; mysql> CREATE TABLE testusers LIKE mysql.user;
(2)、刪除表
DROP TABLE [IF EXISTS] tb_name; mysql> DROP TABLE students;
(3)、查看錶
SHOW TABLES FROM db_name; mysql> SHOW TABLES FROM testdb;
(4)、查看錶結構
DESC tb_name; mysql> DESC students;
(5)、修改表字段的數據類型或者類型修飾符
ALTER TABLE tb_name MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]; mysql> ALTER TABLE students MODIFY Course VARCHAR(10) NOT NULL AFTER Gender;
(5)、修改表字段的字段名稱
ALTER TABLE tb_name CHANGE old_col_name new_col_name column_definition [FIRST|AFTER col_name]; mysql> ALTER TABLE students CHANGE course Course VARCHAR(20) AFTER Name;
(6)、新增表字段
ALTER TABLE tb_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]; mysql> ALTER TABLE students ADD course varchar(20);
(7)、刪除表字段
ALTER TABLE tb_name DROP [COLUMN] col_name; mysql> ALTER TABLE students DROP Course;
(8)、修改表名稱
ALTER TABLE tb_name RENAME [TO|AS] new_tbl_name; RENAME TABLE tbl_name TO new_tbl_name mysql> ALTER TABLE Course RENAME student; mysql> RENAME TABLE testuser TO test;
(9)、修改表的存儲引擎
ALTER TABLE tb_name engine engine_name; mysql> ALTER TABLE student ENGINE Innodb;
(10)、添加唯一鍵
ALTER TABLE tb_name ADD UNIQUE [KEY] (index_col_name,...); mysql> ALTER TABLE Course ADD UNIQUE KEY (Name);
(11)、添加外鍵約束(存儲引擎必須支持事務才能添加)
ALTER TABLE tb_name ADD FOREIGN (index_col_name,...) REFERENCES tb_name (col_name); mysql> ALTER TABLE Course ADD FOREIGN KEY (CID) REFERENCES student (CID);
(12)、查看錶結構
DESC tb_name; mysql> DESC students;
(13)、往表中插入數據
INSERT INTO tb_name [(col1,col2,...)] VALUES|VALUE ('STRING', NUM,...),('STRING',NUM,...); mysql> INSERT INTO students VALUES ('QiaoFeng',24,'M','XiangLongshibaZhang'), -> ('DuanYu',22,'M','LiumaiShenjian'), -> ('XuZhu',23,'M','XiaoYaoGong'), -> ('Murongfu',26,'M','DouzhuanXingyi');
(14)、修改表中數據
UPDATE tb_name SET column=value WHERE CONDITION; mysql> UPDATE students SET Gender='F' WHERE Name='Murongfu';
(15)、刪除表中數據
DELETE FROM tb_name WHERE CONDITION; mysql> DELETE FROM students WHERE Name='QiaoFeng';
(16)、清空表數據
TRUNCATE TABLE tb_name; mysql> TRUNCATE TABLE students;
三、索引管理
(1)、創建索引
CREATE INDEX index_name ON tb_name (index_col_name) [index_option] ... mysql> CREATE INDEX foreign_id ON student (Name(4) DESC) USING BTREE;
(2)、刪除索引
DROP [ONLINE|OFFLINE] INDEX index_name ON tbl_name mysql> DROP INDEX foreign_id ON student;
(3)、查看索引
SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name mysql> SHOW INDEXES FROM student;
四、用戶管理
(1)、創建用戶
CREATE USER 'USERNAME'@'HOST' [IDENTIFIED BY 'PASSWORD']; mysql> CREATE USER 'admin'@'172.16.1.111' IDENTIFIED BY 'redhat';
(2)、刪除用戶
DROP USER 'USERNAME'@'HOST'; mysql> DROP USER 'admin'@'172.16.1.111';
(3)、給用戶授權
GRANT pri1,pri2,... ON DB_NAME.TB_NAME TO 'USERNAME'@'HOST' [IDENTIFIED BY 'PASSWORD']; mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'redhat';
(4)、回收用戶權限
REVOKE pri1,pri2,... ON DB_NAME.TB_NAME FROM 'USERNAME'@'HOST'; mysql> REVOKE SELECT ON testdb.* FROM 'admin'@'172.16.1.103';
(5)、查看用戶的授權
SHOW GRANTS FOR 'USERNAME'@'HOST'; mysql> SHOW GRANTS FOR 'admin'@'172.16.1.111';
(6)、列級別授權
GRANT pri1(col_name) ON DB_NAME.TB_NAME TO 'USERNAME'@'HOST' [IDENTIFIED BY 'PASSWORD']; mysql> GRANT UPDATE(Age) ON testdb.test TO 'admin'@'%';
(7)、用戶重命名
RENAME USER old_user TO new_user RENAME USER 'admin'@'%' TO 'admin'@'172.16.1.108';
(8)、給用戶加密碼
第一種:SET PASSWORD FOR 'USERNAME'@'HOST'=PASSWORD('NEW_PASSWORD'); mysql> SET PASSWORD FOR 'root'@'localhost'=PASSWORD('redhat'); Query OK, 0 rows affected (0.03 sec) 第二種:mysqladmin -uUSERNAME -hHOST password 'NEW_PASSWORD' -p [root@soysauce ~]# mysqladmin -uroot -h localhost -p password 'redhat' Enter password: 第三種:UPDATE mysql.user SET Password=PASSWORD('NEW_PASSWD') WHERE User='USERNAME' AND Host='HOST'; mysql> UPDATE mysql.user SET Password=PASSWORD('redhat') WHERE User='root'; Query OK, 4 rows affected (0.06 sec) Rows matched: 4 Changed: 4 Warnings: 0 mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye
(9)、忘記mysql管理員密碼
[root@soysauce ~]# service mysqld stop Shutting down MySQL. SUCCESS! [root@soysauce ~]# mysqld_safe --skip-grant-tables --skip-networking & [1] 50967 [root@soysauce ~]# 151224 21:31:23 mysqld_safe Logging to '/data/mysql/soysauce.err'. 151224 21:31:23 mysqld_safe Starting mysqld daemon with databases from /data/mysql [root@soysauce ~]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.28-log MySQL Community Server (GPL) Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> UPDATE mysql.user SET Password=PASSWORD('redhat') WHERE User='root' AND Host='localhost'; Query OK, 0 rows affected (0.07 sec) Rows matched: 1 Changed: 0 Warnings: 0 mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.14 sec) mysql> exit Bye [root@soysauce ~]# service mysqld stop Shutting down MySQL.151224 21:32:46 mysqld_safe mysqld from pid file /data/mysql/soysauce.pid ended SUCCESS! [1]+ Done mysqld_safe --skip-grant-tables --skip-networking [root@soysauce ~]# service mysqld start Starting MySQL.. SUCCESS! [root@soysauce ~]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.28-log MySQL Community Server (GPL) Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
五、視圖管理
(1)、創建視圖
CREATE VIEW view_name [(column_list)] AS select_statement mysql> CREATE VIEW stu AS SELECT * FROM students LIMIT 5;
(2)、刪除視圖
DROP VIEW [IF EXISTS] view_name [, view_name] ... mysql> DROP VIEW stu;
六、SELECT查詢
1、單表查詢(簡單查詢)
(1)、選擇
SELECT * FROM tb_name; mysql> SELECT * FROM students WHERE Age>=20;
(2)、投影
SELECT field1,field2 FROM tb_name; mysql> SELECT Name,Age FROM students;
(3)、選擇加投影
SELECT [DISTINCT] * FROM tb_name WHERE qualification; mysql> SELECT Name,Age FROM students WHERE Age >= 20;
(4)、相同的值只顯示一次
SELECT [DISTINCT] * FROM tb_name WHERE qualification; mysql> SELECT DISTINCT Gender FROM students;
(5)、比較運算符
<:小於 >:大於 <=:小於等於 >=:大於等於 =:等於 !=:不等於 mysql> SELECT * FROM students WHERE Age>=20;
(6)、組合條件查詢
AND:邏輯與 OR:邏輯或 NOT:邏輯非 mysql> SELECT * FROM students WHERE Age>20 AND Gender='M'; mysql> SELECT * FROM students WHERE Age>20 OR Gender='M'; mysql> SELECT * FROM students WHERE NOT Age>20; mysql> SELECT * FROM students WHERE NOT (Age>20 OR Gender='M');
(7)、兩數值之間
BETWEEN value1 AND value2 mysql> SELECT * FROM students WHERE Age BETWEEN 20 AND 25;
(8)、基於通配或正則做條件匹配
LIKE 'wildcard' %:任意長度的任意字符 _:任意單個字符 RLIKE 'REGEXP' mysql> SELECT * FROM students WHERE Name LIKE 'y%'; mysql> SELECT * FROM students WHERE Name LIKE 'y____'; mysql> SELECT * FROM students WHERE Name LIKE '%ing%'; mysql> SELECT * FROM students WHERE Name RLIKE '^[XY].*'; mysql> SELECT * FROM students WHERE Age RLIKE '(18|20|25)';
(9)、判斷是否爲空或不空
IS NOT NULL:不爲空 IS NULL:爲空 mysql> SELECT * FROM students WHERE CID2 IS NULL; mysql> SELECT * FROM students WHERE CID2 IS NOT NULL;
(10)、離散列表表示
IN (value1,value2...) mysql> SELECT * FROM students WHERE Age IN (18,20,25);
(11)、查詢結果排序
ORDER BY field_name {ASC|DESC} mysql> SELECT * FROM students WHERE CID2 IS NOT NULL ORDER BY Age DESC;
(12)、別名
col_name AS Alias mysql> SELECT Name AS Student_Name FROM students;
(13)、LIMIT
LIMIT [offset,]Count mysql> SELECT Name AS Student_Name FROM students LIMIT 2; # 顯示2個 mysql> SELECT Name AS Student_Name FROM students LIMIT 2,3; # 偏移量爲2,往後取3個
(14)、聚合
SUM():和 MIN():最小值 MAX():最大值 AVG():平均數 COUNT():總個數 mysql> SELECT SUM(Age) FROM students; mysql> SELECT MAX(Age) FROM students; mysql> SELECT MIN(Age) FROM students; mysql> SELECT AVG(Age) FROM students; mysql> SELECT COUNT(Age) FROM students;
(15)、分組
GROUP BY [HAVING where_condition] mysql> SELECT Gender,AVG(Age) FROM students GROUP BY Gender; mysql> SELECT CID1,COUNT(CID1) AS Persons FROM students GROUP BY CID1; mysql> SELECT CID1,COUNT(CID1) AS Persons FROM students GROUP BY CID1 HAVING Persons>=2;
2、多表查詢
(1)、笛卡爾積(交叉連接)
mysql> SELECT * FROM students,courses;
(2)、自然連接
mysql> SELECT students.Name,courses.Cname FROM students,courses WHERE students.CID1 = courses.CID; mysql> SELECT s.Name,c.Cname FROM students AS s,courses AS c WHERE s.CID1 = c.CID;
(3)、左外連接
mysql> SELECT s.Name,c.Cname FROM students AS s LEFT JOIN courses AS c ON s.CID1 = c.CID; +--------------+------------------+ | Name | Cname | +--------------+------------------+ | GuoJing | TaiJiquan | | YangGuo | TaiJiquan | | DingDian | Qishangquan | | HuFei | Wanliduxing | | HuangRong | Qianzhuwandushou | | YueLingshang | Wanliduxing | | ZhangWuji | Hamagong | | Xuzhu | TaiJiquan | | LingHuchong | NULL | | YiLin | NULL | +--------------+------------------+ 10 rows in set (0.00 sec)
(4)、右外連接
mysql> SELECT s.Name,c.Cname FROM students AS s RIGHT JOIN courses AS c ON s.CID1 = c.CID; +--------------+------------------+ | Name | Cname | +--------------+------------------+ | ZhangWuji | Hamagong | | GuoJing | TaiJiquan | | YangGuo | TaiJiquan | | Xuzhu | TaiJiquan | | NULL | Yiyangzhi | | NULL | Jinshejianfa | | HuangRong | Qianzhuwandushou | | DingDian | Qishangquan | | NULL | Qiankundanuoyi | | HuFei | Wanliduxing | | YueLingshang | Wanliduxing | | NULL | Pixiejianfa | | NULL | Jiuyinbaiguzhua | +--------------+------------------+ 13 rows in set (0.00 sec)
(5)、自連接
mysql> SELECT s.Name AS Stu,c.Name AS Teacher FROM students AS s,students AS c WHERE s.TID = c.SID; +-----------+-------------+ | Stu | Teacher | +-----------+-------------+ | GuoJing | DingDian | | YangGuo | GuoJing | | DingDian | ZhangWuji | | HuFei | HuangRong | | HuangRong | LingHuchong | +-----------+-------------+ 5 rows in set (0.00 sec)
3、子查詢
比較操作中使用子查詢:子查詢只能返回單個值 mysql> SELECT Name FROM students WHERE Age > (SELECT AVG(Age) FROM students); mysql> SELECT Name FROM students WHERE Age IN (SELECT Age FROM tutors); mysql> SELECT s.Name FROM students AS s WHERE s.CID2 IN (SELECT CID FROM courses); mysql> SELECT Name FROM (SELECT Name,Age FROM students) AS t WHERE t.Age >= 20; mysql> SELECT Name FROM students WHERE students.CID2 IN (SELECT CID FROM courses);
4、聯合查詢
mysql> (SELECT Name,Age FROM students) UNION (SELECT Tname,Age FROM tutors);
補充:
SELECT STATEMENT
MySQL Operator