MySQL 是什麼?
MySQL是最流行的關係型數據庫管理系統(RDNMS指建立在關係模型上的數據庫)
常用的RDBMS術語
數據庫: 數據庫是一些關聯表的集合。
數據表: 表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
冗餘:存儲兩倍數據,冗餘降低了性能,但提高了數據的安全性。
主鍵:主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢數據。
外鍵:外鍵用於關聯兩個表。
複合鍵:複合鍵(組合鍵)將多個列作爲一個索引鍵,一般用於複合索引。
索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。類似於書籍的目錄。
參照完整性: 參照的完整性要求關係中不允許引用不存在的實體。與實體完整性是關係模型必須滿足的完整性約束條件,目的是保證數據的一致性。
MySQL的入門基礎命令
啓動關閉MySQL服務器
首先,我們需要通過以下命令來檢查MySQL服務器是否啓動:
ps -ef | grep mysqld
如果MySql已經啓動,以上命令將輸出mysql進程列表, 如果mysql未啓動,你可以使用以下命令來啓動mysql服務器:
root@host# cd /usr/bin ./mysqld_safe &
如果你想關閉目前運行的 MySQL 服務器, 你可以執行以下命令:
root@host# cd /usr/bin ./mysqladmin -u root -p shutdown Enter password: ******
如果你想重啓目前運行的 MySQL 服務器, 你可以執行以下命令:
root@host# service mysqld restart //重啓 mysql
MySQL 用戶設置
如果你需要添加 MySQL 用戶,你只需要在 mysql 數據庫中的 user 表添加新用戶即可。
1、新建用戶
創建test用戶,密碼是123456
MySQL -u root -p CREATE USER 'test'@'localhost' IDENTIFIED BY '1234'; #本地登錄 CREATE USER 'test'@'%' IDENTIFIED BY '1234'; #遠程登錄 quit mysql -u test -p #測試是否創建成功
2.爲用戶授權
a.授權格式:grant 權限 on 數據庫.* to 用戶名@登錄主機 identified by '密碼';
b.登錄MYSQL,這裏以ROOT身份登錄:
mysql -u root -p
c.爲用戶創建一個數據庫(testDB):
create database testDB;
create database testDB default charset utf8 collate utf8_general_ci; #設置字符集的語句,一般不寫。utf8_general_ci忽略大小寫
d.授權test用戶擁有testDB數據庫的所有權限:
grant all privileges on testDB.*to "test" @" localhost" identified by "123456";
flush privileges;#刷新系統權限表
e.指定部分權限給用戶:
grant select,update on testDB.*to "test" @" localhost" identified by"123456";
flush privileges;#刷新系統權限表
f.授權test用戶擁有所有數據庫的某些權限:
grant select,delete,update,create,drop on . to test@”%” identified by “1234”; #”%” 表示對所有非本地主機授權,不包括localhost
g.數據庫/數據表/數據列權限:
數據庫/數據表/數據列權限:
Alter: 修改已存在的數據表(例如增加/刪除列)和索引。
Create: 建立新的數據庫或數據表。
Delete: 刪除表的記錄。
Drop: 刪除數據表或數據庫。
INDEX: 建立或刪除索引。
Insert: 增加表的記錄。
Select: 顯示/搜索表的記錄。
Update: 修改表中已存在的記錄。全局管理MySQL用戶權限:
file: 在MySQL服務器上讀寫文件。
PROCESS: 顯示或殺死屬於其它用戶的服務線程。
RELOAD: 重載訪問控制表,刷新日誌等。
SHUTDOWN: 關閉MySQL服務。特別的權限:
ALL: 允許做任何事(和root一樣)。
USAGE: 只允許登錄--其它什麼也不允許做。
3、刪除用戶
mysql -u root -p
Delete FROM mysql.user Where User=”test” and Host=”localhost”;
flush privileges;
drop database testDB;
刪除賬戶及權限:
drop user 用戶名@’%’;
drop user 用戶名@ localhost;
4、修改指定用戶密碼
mysql -u root -p
update mysql.user set authentication_string=password(“新密碼”) where User=”test” and Host=”localhost”;
flush privileges;
5、查看用戶
查詢用戶表
SELECT User,Host,Password FROM mysql.user;
顯示所有用戶(不重複)
SELECT DISTINCT User FROM mysql.user;
查看用戶權限
show grants for 用戶名;
查看user表結構
desc mysql.user;
6.管理MySQL的命令
USE 數據庫名 :
選擇要操作的Mysql數據庫,使用該命令後所有Mysql命令都只針對該數據庫。
mysql> use RUNOOB; Database changed
SHOW DATABASES:
列出 MySQL 數據庫管理系統的數據庫列表。
mysql> SHOW DATABASES;
SHOW TABLES:
顯示指定數據庫的所有表,使用該命令前需要使用 use 命令來選擇要操作的數據庫。
mysql> use RUNOOB;Database changed mysql> SHOW TABLES;
SHOW COLUMNS FROM 數據表:
顯示數據表的屬性,屬性類型,主鍵信息 ,是否爲 NULL,默認值等其他信息。
mysql> SHOW COLUMNS FROM runoob_tbl;
SHOW INDEX FROM 數據表:
顯示數據表的詳細索引信息,包括PRIMARY KEY(主鍵)。
mysql> SHOW INDEX FROM runoob_tbl;
SHOW TABLE STATUS LIKE [FROM db_name] [LIKE 'pattern'] \G:
該命令將輸出Mysql數據庫管理系統的性能及統計信息。
mysql> SHOW TABLE STATUS FROM RUNOOB; # 顯示數據庫 RUNOOB 中所有表的信息mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'; # 表名以runoob開頭的表的信息mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'\G; # 加上 \G,查詢結果按列打印
7.刪除數據庫
你也可以使用 mysql mysqladmin 命令在終端來執行刪除命令。
[root@host]# mysqladmin -u root -p drop RUNOOB Enter password:******
8.創建數據表
創建MySQL數據表需要以下信息:
表名
表字段名
定義每個表字段
語法
以下爲創建MySQL數據表的SQL通用語法:
CREATE TABLE table_name (column_name column_type);
以下例子中我們將在 RUNOOB 數據庫中創建數據表runoob_tbl:
CREATE TABLE IF NOT EXISTS `runoob_tbl`( `runoob_id` INT UNSIGNED AUTO_INCREMENT, `runoob_title` VARCHAR(100) NOT NULL, `runoob_author` VARCHAR(40) NOT NULL, `submission_date` DATE, PRIMARY KEY ( `runoob_id` ))ENGINE=InnoDB DEFAULT CHARSET=utf8;
實例解析:
如果你不想字段爲 NULL 可以設置字段的屬性爲 NOT NULL, 在操作數據庫時如果輸入該字段的數據爲NULL ,就會報錯。
AUTO_INCREMENT定義列爲自增的屬性,一般用於主鍵,數值會自動加1。
PRIMARY KEY關鍵字用於定義列爲主鍵。 您可以使用多列來定義主鍵,列間以逗號分隔。
ENGINE 設置存儲引擎,CHARSET 設置編碼。
通過命令提示符創建表
通過 mysql> 命令窗口可以很簡單的創建MySQL數據表。你可以使用 SQL 語句 CREATE TABLE 來創建數據表。
實例
以下爲創建數據表 runoob_tbl 實例:
root@host# mysql -u root -pEnter password:*******mysql> use RUNOOB;Database changed mysql> CREATE TABLE runoob_tbl( -> runoob_id INT NOT NULL AUTO_INCREMENT, -> runoob_title VARCHAR(100) NOT NULL, -> runoob_author VARCHAR(40) NOT NULL, -> submission_date DATE, -> PRIMARY KEY ( runoob_id ) -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;Query OK, 0 rows affected (0.16 sec)mysql>
注意:MySQL命令終止符爲分號 (;) 。
MySQL中刪除數據表是非常容易操作的, 但是你再進行刪除表操作時要非常小心,因爲執行刪除命令後所有數據都會消失。
語法
以下爲刪除MySQL數據表的通用語法:
DROP TABLE table_name ;
在命令提示窗口中刪除數據表
在mysql>命令提示窗口中刪除數據表SQL語句爲 DROP TABLE :
實例
以下實例刪除了數據表runoob_tbl:
root@host# mysql -u root -p Enter password:******* mysql> use RUNOOB; Database changed mysql> DROP TABLE runoob_tbl Query OK, 0 rows affected (0.8 sec) mysql>
9.插入數據
MySQL 表中使用 INSERT INTO SQL語句來插入數據。
你可以通過 mysql> 命令提示窗口中向數據表中插入數據,或者通過PHP腳本來插入數據。
語法
以下爲向MySQL數據表插入數據通用的 INSERT INTO SQL語法:
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
如果數據是字符型,必須使用單引號或者雙引號,如:"value"。
通過命令提示窗口插入數據
以下我們將使用 SQL INSERT INTO 語句向 MySQL 數據表 runoob_tbl 插入數據
實例
以下實例中我們將向 runoob_tbl 表插入三條數據:
root@host# mysql -u root -p password;Enter password:*******mysql> use RUNOOB;Database changed mysql> INSERT INTO runoob_tbl -> (runoob_title, runoob_author, submission_date) -> VALUES -> ("學習 PHP", "菜鳥教程", NOW());Query OK, 1 rows affected, 1 warnings (0.01 sec)mysql> INSERT INTO runoob_tbl -> (runoob_title, runoob_author, submission_date) -> VALUES -> ("學習 MySQL", "菜鳥教程", NOW());Query OK, 1 rows affected, 1 warnings (0.01 sec)mysql> INSERT INTO runoob_tbl -> (runoob_title, runoob_author, submission_date) -> VALUES -> ("JAVA 教程", "RUNOOB.COM", '2016-05-06');Query OK, 1 rows affected (0.00 sec)mysql>
注意: 使用箭頭標記 -> 不是 SQL 語句的一部分,它僅僅表示一個新行,如果一條SQL語句太長,我們可以通過回車鍵來創建一個新行來編寫 SQL 語句,SQL 語句的命令結束符爲分號 ;。
在以上實例中,我們並沒有提供 runoob_id 的數據,因爲該字段我們在創建表的時候已經設置它爲 AUTO_INCREMENT(自動增加) 屬性。 所以,該字段會自動遞增而不需要我們去設置。實例中 NOW() 是一個 MySQL 函數,該函數返回日期和時間。
接下來我們可以通過以下語句查看數據表數據:
讀取數據表:
select * from runoob_tbl;
輸出結果:
10查詢數據
MySQL 數據庫使用SQL SELECT語句來查詢數據。
你可以通過 mysql> 命令提示窗口中在數據庫中查詢數據,或者通過PHP腳本來查詢數據。
語法
以下爲在MySQL數據庫中查詢數據通用的 SELECT 語法:
SELECT column_name,column_name FROM table_name[WHERE Clause][LIMIT N][ OFFSET M]
查詢語句中你可以使用一個或者多個表,表之間使用逗號(,)分割,並使用WHERE語句來設定查詢條件。
SELECT 命令可以讀取一條或者多條記錄。
你可以使用星號(*)來代替其他字段,SELECT語句會返回表的所有字段數據
你可以使用 WHERE 語句來包含任何條件。
你可以使用 LIMIT 屬性來設定返回的記錄數。
你可以通過OFFSET指定SELECT語句開始查詢的數據偏移量。默認情況下偏移量爲0。
通過命令提示符獲取數據
以下實例我們將通過 SQL SELECT 命令來獲取 MySQL 數據表 runoob_tbl 的數據:
實例
以下實例將返回數據表 runoob_tbl 的所有記錄:
讀取數據表:
select * from runoob_tbl;
輸出結果:
WHERE 語句的應用
SELECT * from runoob_tbl WHERE runoob_author='菜鳥教程';
11.update查詢
如果我們需要修改或更新 MySQL 中的數據,我們可以使用 SQL UPDATE 命令來操作。.
語法
以下是 UPDATE 命令修改 MySQL 數據表數據的通用 SQL 語法:
UPDATE table_name SET field1=new-value1, field2=new-value2[WHERE Clause]
你可以同時更新一個或多個字段。
你可以在 WHERE 子句中指定任何條件。
你可以在一個單獨表中同時更新數據。
當你需要更新數據表中指定行的數據時 WHERE 子句是非常有用的。
通過命令提示符更新數據
以下我們將在 SQL UPDATE 命令使用 WHERE 子句來更新 runoob_tbl 表中指定的數據:
實例
以下實例將更新數據表中 runoob_id 爲 3 的 runoob_title 字段值:
SQL UPDATE 語句:
mysql> UPDATE runoob_tbl SET runoob_title='學習 C' WHERE runoob_id=3;
Query OK, 1 rows affected (0.01 sec)
mysql> SELECT * from runoob_tbl WHERE runoob_id=3;
+-----------+--------------+---------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-----------+--------------+---------------+-----------------+
| 3 | 學習 C | RUNOOB.COM | 2016-05-06 |
+-----------+--------------+---------------+-----------------+
1 rows in set (0.01 sec)
從結果上看,runoob_id 爲 3 的 runoob_title 已被修改爲學習C。
12.DELETE語句
你可以使用 SQL 的 DELETE FROM 命令來刪除 MySQL 數據表中的記錄。
你可以在 mysql> 命令提示符或 PHP 腳本中執行該命令。
語法
以下是 SQL DELETE 語句從 MySQL 數據表中刪除數據的通用語法:
DELETE FROM table_name [WHERE Clause]
如果沒有指定 WHERE 子句,MySQL 表中的所有記錄將被刪除。
你可以在 WHERE 子句中指定任何條件
您可以在單個表中一次性刪除記錄。
當你想刪除數據表中指定的記錄時 WHERE 子句是非常有用的。
從命令行中刪除數據
這裏我們將在 SQL DELETE 命令中使用 WHERE 子句來刪除 MySQL 數據表 runoob_tbl 所選的數據。
實例
以下實例將刪除 runoob_tbl 表中 runoob_id 爲3 的記錄:
DELETE 語句:
mysql> use RUNOOB;
Database changed
mysql> DELETE FROM runoob_tbl WHERE runoob_id=3;
Query OK, 1 row affected (0.23 sec)
MySQL LIKE 子句
WHERE 子句中可以使用等號 = 來設定獲取數據的條件,如 "runoob_author = 'RUNOOB.COM'"
SQL LIKE 子句中使用百分號 %字符來表示任意字符,類似於UNIX或正則表達式中的星號 *。
如果沒有使用百分號 %, LIKE 子句與等號 = 的效果是一樣的。
語法
以下是 SQL SELECT 語句使用 LIKE 子句從數據表中讀取數據的通用語法:
SELECT field1, field2,...fieldN FROM table_name WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
實例
以下是我們將 runoob_tbl 表中獲取 runoob_author 字段中以 COM 爲結尾的的所有記錄:
SQL LIKE 語句:
mysql> use RUNOOB;
Database changed
mysql> SELECT * from runoob_tbl WHERE runoob_author LIKE '%COM';
+-----------+---------------+---------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-----------+---------------+---------------+-----------------+
| 3 | 學習 Java | RUNOOB.COM | 2015-05-01 | | 4
| 學習 Python | RUNOOB.COM | 2016-03-06 |
+-----------+---------------+---------------+-----------------+
2 rows in set (0.01 sec)
MySQL UNION 操作符
MySQL UNION 操作符用於連接兩個以上的 SELECT 語句的結果組合到一個結果集合中。相當於and.
舉例:
MySQL 排序
用ORDER BY 子句將查詢數據排序後再返回數據
MySQL GROUP BY 語句
GROUP BY 語句根據一個或多個列對結果集進行分組。
在分組的列上我們可以使用 COUNT, SUM, AVG,等函數。
Mysql 連接的使用
如何使用 MySQL 的 JOIN 在兩個或多個表中查詢數據
JOIN 按照功能大致分爲如下三類:
INNER JOIN(內連接,或等值連接):獲取兩個表中字段匹配關係的記錄。
LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒有對應匹配的記錄。
RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。