MySQL數據庫管理系統
Web開發與數據庫的關係
Ø 動態網站就是對數據庫進行操作。
Ø 平時瀏覽網頁時,會發送網頁內容的變化,而頁面的主題結構並不會發生改變。
Ø Web系統的開發基本是離不開數據庫的。
Ø 只要是基於數據庫的Web開發,都是屬於動態網站的範疇。
MySQL數據庫的優點
Ø php+mysql可以說是黃金搭檔,兩者都是:開源、免費、配置簡單、穩定性好、性能優良。
Ø mysql數據庫在開源數據庫中佔據了很大的份額,也是開源數據庫的代表。
Ø SQL語句結構簡潔、功能強大、簡單易學。關係型數據庫都可以使用
MySQL數據庫管理系統的結構
Ø MySQL數據庫管理系統是C/S(客戶端/服務器)結構
Ø Web服務是B/S(瀏覽器/服務器)的開發
SQL語句四大類
Ø 數據庫定義語言(DDL)
Ø 數據庫操作語言(DML)
Ø 數據庫查詢語言(DQL)
Ø 數據庫控制語言(DCL)
MySQL操作籌備
配置環境變量
Ø 複製路徑(自己數據庫的路徑):C:\wamp64\bin\mysql\mysql5.7.11\bin\
Ø 右擊計算機->屬性->高級系統設置->環境變量->在用戶環境->新建->變量名:PATH->變量值:C:\wamp64\bin\mysql\mysql5.7.11\bin\. 注意:.(點)代表匹配該目錄下的所有內容
Ø 打開運行cmd
Ø 輸入mysqldump 看到如下效果代表環境配置成功
C:\Users\何大大>mysqldump
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help
數據庫字符集
Ø GB2312雙字節編碼 早期的標準 不推薦使用。
Ø GBK 雙字節編碼 中期的標準 支持的系統很多,並且在GB2312的基礎上增加了很多偏僻的生字。
Ø UTF-8 1~4字節的編碼 互聯網廣泛使用。亞洲通用字符集。國際標準化,支持任何語言,但是要注意:MySQL數據庫也使用utf-8字符集,只是在mysql數據庫中不能寫成utf-8,要寫成utf8。
Ø UTF-8和GBK的區別
n 存儲數據的長度不一樣,存儲漢字在GB系統2個字節,UTF8是三個字節
n 在不同的操作系統(語言的不同)中看起不一樣
n 推薦使用UFT-8標準
Ø UTF-16 2字節或者4字節編碼,Java內部使用的。
Ø 解決亂碼問題最好的方法就是字符集的統一,頁面字符集utf8、聲明字符集uft8、數據庫字符集utf8
鏈接MySQL數據庫(Cmd命令)
Ø (cmd)輸入 mysql -h localhost(數據庫服務器地址) -u root(用戶名) -p
Ø 回車輸入密碼(沒有密碼直接回車)
C:\Users\何大大>mysql -h localhost -u root -p
Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.14 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, 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.
Ø 清楚cmd中等待命令
-> 表示當前命令沒有命名執行符或者說等待命令執行符來確定
\c 用來清楚->效果
‘>表示前面SQL命令中缺少單引號
補上’然後用\c來清楚該效果
“>表示前面SQL命令中缺少雙引號
補上”然後用\c來清楚該效果
Ø 退出mysql客戶端的cmd命令:Exit;(大寫E) \q \quit
MySQL瞭解事項
Ø 在MySQL版本小於5.7之前允許遊客模式的出現,如果用戶名不對,會以遊客的身份進入到MySQL數據庫,這是查看MySQL數據庫時,只會顯示兩個數據庫。
n 一個是text 測試數據庫
n 一個是information_schema 數據字典
Ø 系統中自帶的庫(不能去刪除和修改)
mysql> SHOW DATABASES;
+---------------------------+
| Database |
+---------------------------+
| information_schema | 數據字典
| mysql | 默認的庫
| performance_schema | mysql5.5版本新增的一個庫 性能字典
| sys | 系統數據庫
+---------------------------+
5 rows in set (0.00 sec)
對庫(DATABASE)的操作
對數據庫進行增、刪、改、查操作屬於數據庫的定義語言DDL。
同時需要注意:所有的SQL命令推薦使用大寫
創建數據庫
Ø CREATE DATABASE 庫名;
Ø 如果庫不存在則創建:CREATE DATABASE IF NOT EXISTS 庫名;
刪除數據庫
Ø DROP DATABASE 庫名;
Ø DROP DATABASE IF EXISTS 庫名;
修改數據庫
沒有修改數據庫名的命令,但要注意:是可以通過進入mysql文件夾中/data/數據庫目錄,在裏面將其通過修改文件名的方式修改數據庫名。同時需要知道,凡是可以修改的數據庫名,只能修改myisam引擎的數據庫。
Ø Myisam引擎 可實現快速存儲
Ø Innodb 引擎 帶有事物回滾機制
查看數據庫
Ø SHOW DATABASES;
選擇數據庫
Ø USE 庫名;
對錶(TABLES)的操作
數據類型
Ø 整數型:
TINYINT 最小的數值整型
SMALLINT 較小的整型
MEDIUMINT 小整型
INT 標準的整型
BIGINT 大整型
Ø 浮點型:
FLOAT 單進度類型 (例如:3.14)
DOUBLE(m,d) 雙進度浮點型 (例如:3.1415) m表示:有多少個數(總長度) d表示:小數點後面保留多少位。
Decimal(m,d) 字符串類型的浮點數(例如:’3.1415’) 金融數據一般使用該類型。他不是一個數,而是屬於字符串。
Ø 字符串型:
CHAR(M) 定義字符串類型。 M所指長度,在CHAR類型中0~255之間的數。
VARCHAR(M) 變長字符串類型。 M的值是0~65536之間的數。
CHAR()和VARCHAR()區別:
存儲的長度不一樣。
CHAR()如果存儲的值不夠括號中定義的長度,會站位到該括號中定義的長度
VARCHAR()如果存入的值不夠括號中定義的長度,會以實際存儲值的長度爲準。
按照效率來分配:CHAR()佔用空間較大,但是查詢效率高。 VARCHAR()佔用空間較小,查詢效率低。
n TEXT類型 屬於文本類型。一把在網頁中用於存儲大文本、文章等信息
n BLOB 類型是以二進制方式存儲
創建數據表
在創建數據表的時候,需要注意的是在創建數據表的時候必須連同字段一起創建
Ø CAEATE TABLE [IF NOT EXISTS] 表名(
字段名 1 字段類型 [列的完整性約束],
字段名 2 字段類型 [列的完整性約束],
····)ENGINE=MYISAM DEFAULT CHARSET=UTF8;
n ENGINE 指定表引擎
n DEFAULT CHARSET 指定字符集
Ø 常用的列的完整性約束
n PRIMARY KEY 主鍵
n AUTO_INCREMENT 自增
n DEFAULT ‘值’ 默認值
n NOT NULL 不爲空
n NULL 爲空
n UNSIGNED 無符號
刪除數據表
Ø DROP TABLE 表名;
Ø DROP TABLE IF EXISTS 表名; (如果存在則刪除)
Ø DROP TABLE 表名1,表名2··; (同時刪除多張表)
修改數據表
Ø ALTER TABLE 原表名 RENAME 新表名;
備份數據表
Ø CREATE TABLE 新表名 SELECT * FROM原表名;
注意:該備份能備份所有的表結構以及數據,但是唯一不能備份過來的就是主鍵和自增以及字符集。
對字段的操作
添加字段
Ø ALTER TABLE 表名 ADD 新字段名 數據類型 [列的完整性約束] [位置參數]
Ø 位置參數:
n AFTER 字段名 (表示在這個字段名之後添加)
n FIRST 字段名 (表示在第一個字段之後加入)
刪除字段
Ø ALTER TABLE 表名 DROP 字段名;
Ø ALTER TABLE 表名 DROP 字段名1, DROP 字段名2···;
修改字段
Ø ALTER TABLE 表名 MODIFY 字段名 新字段類型 [新列的完整性約束];
Ø ALTER TABLE 表名 CHANGE 原字段名 新字段名 新字段類型 [新列的完整性約束];
Ø MODIFY 和CHANGE 區別在於:
n MODIFY 只能更改原字段的字段類型以及列的完整性約束。
n CHANGE 可以更改字段名以及字段類型和列的完整性約束。
查看字段
Ø DESC 表名; (查看錶中所有的字段和表結構)
Ø SHOW CREATE TABLE 表名\G;(查看建表語句)
數據庫中的運算符
算數運算符
+ - * /或者DIV %或者MOD
比較運算符
= < > != >= <=
操作符
Ø BETWEEN 值1 AND 值2 存在於指定範圍內 (表示值1到值2 之間,包含值1 和值2)
Ø IN() 存在指定集合
Ø NOT IN() 不存在指定集合中
Ø IS NULL 爲NULL
Ø IS NOT NULL 不爲NULL
Ø REGEXP 正則匹配(SELECT ‘abcdef’ REGEXP ‘ab’ 匹配結果返回1 不匹配返回0)
Ø LIKE 通配符匹配
按位運算符
& 按位與 | 按位或 ^ 按位異或 ~按位異或 <<左移 >> 右移
數據的操作
添加數據
Ø SQL語句中相同的用逗號分隔,不同的用空格分隔
Ø INSERT INTO 表名(`字段名1`,`字段名2`...)VALUES(‘值1’,’值2’....)
n 字段名中出現反引號,作用是爲了防止關鍵字報錯。
n 如果該值是字符串類型,那麼必須加引號。整數型可以省略引號
Ø INSERT INTO 表名 VALUES(‘值1’,’值2’....)
n 所有的字段必須依照順序一一對應賦值,不寫值的可以寫成null。
Ø INSERT INTO 表名(`字段名1`,`字段名2`...)VALUES(‘值1’,’值2’....),(‘值1’,’值2’....)
Ø INSERT INTO 表名VALUES(‘值1’,’值2’....),(‘值1’,’值2’....)
刪除數據
Ø DELETE FROM 表名 [刪除條件];
n 只要是關於刪除操作的都要在刪除前備份該表數據
Ø 刪除條件WHERE
n 刪除id=3 和id=10的數據
DELETE FROM user WHERE id=3 OR id=10;
n 刪除id>3 和id<7的數據
DELETE FROM user WHERE id>3 AND id<7;
n 刪除 id<7 和id>9的數據
DELETE FROM user WHERE id<7 OR id>9;
n 刪除指定的集合(in())
DELETE FROM user WHERE id IN(1,3,5,7,8,10,15);
n 刪除指定的範圍(between ... and)
DELETE FROM user WHERE id BETWEEN 4 and 9;
n 刪除表中id字段爲偶數的數據
DELETE FROM user1 WHERE id MOD 2=0;
修改數據
Ø UPDATE 表名 SET 字段名=值,字段名=值......[修改條件];
Ø Is null 字段爲null(修改sex=2條件age字段中爲null)
UPDATE user SET sex=2 WHERE age IS NULL;
Ø Is not null字段不爲null(修改user表中 sex字段等於3 條件是age字段不爲空的)
UPDATE user SET sex=3 WHERE age IS NOT NULL;
查看數據
Ø SELECT * FROM 表名 [查詢條件];
Ø SELECT 使用逗號分隔寫入所有字段名稱 FRMO 表名[查詢條件];
Ø LIKE 模糊匹配 格式:字段LIKE ‘%內容%’
查詢user字段中有a出現所有數據
SELECT * FROM user WHERE user LIKE ‘%a%’;
n 查詢user字段中以l開頭後面是任意內容
SELECT * FROM user WHERE user LIKE ‘l%’;
n 查詢user字段中以i結尾前面是任意內容
SELECT * FROM user WHERE user LIKE ‘%i’;
n 查詢user字段中第二個字母是i的所有內容
SELECT * FROM user WHERE user LIKE ‘_i%’;
n 查詢user字段中倒數第二個字母是n的所有內容
SELECT * FROM user WHERE user LIKE ‘%n_’;
n %表示通配符,如果在字母前,表示該字母前有任意內容,如果在字母后,表示該字母后有任意內容。
n _表示匹配一位字符,如果在字母前出現一個_,表示該字母前必須有一位。
Ø 查詢數據中有多少條數據
SELECT COUNT(*) FROM user;
SELECT COUNT(id) FROM user;
排序查詢
Ø 一個是正序排序(正序) ORDER BY 字段 ASC (按照字段正序排序)
Ø 一個是倒序排序(倒序) ORDER BY 字段 DESC (按照字段倒序排序)
n 按照age字段正序排序
SELECT * FROM user ORDER BY age ASC;
n 按照id 字段倒序培訓
SELECT * FROM user ORDER BY id DESC;
n 查詢sex=0的所有數據 按照id倒序排序
SELECT * FROM user WHERE sex=0 ORDER BY id DESC;
n 按照sex 正序排序,當sex相同時按照age倒序排序
SELECT * FROM user ORDER BY sex ASC,age DESC;
Ø 限制查詢的數量 LIMIT
SELECT 字段FROM 表名 LIMIT 查詢數量;
SELECT 字段 FROM 表名 LIMIT 跳過幾條,查詢幾條;
查詢sex=1 的數據取出3條
SELECT * FROM user WHERE sex=1 LIMIT 0,3;
SELECT * FROM user WHERE sex=1 LIMIT 3;
Ø 分組查詢:GROUP BY 字段名
查詢每個部門(bumen)的總工資(gz 工資表)?
SELECT bumen,sum(gz) FROM gz GROUP BY bumen;
查詢每個部門有多少人?
SELECT bumen,count(id) FROM gz GROUP BY bumen;
查詢部門編號大於等於2的所有部門的總工資
SELECT bumen,sum(gz) FROM gz WHERE bumen>=2 GROUP BY bumen;
查詢部門編號大於等於2的所有部門的總工資大於70000的
SELECT bumen,SUM(gz) FROM gz WHERE bumen>=2 GROUP BY bumen HAVING SUM(gz)>70000;
² HAVING :效率極低
² 一般使用在分組裏面做二次過濾,使用方法和where方法一樣。
Ø 查詢條件使用的順序
SELECT * FROM 表名 [WHERE條件][GROUP BY條件][HAVING 條件][ORDER BY 條件][LIMIT 條件];
多表聯合查詢
Ø 查詢工資表(gz)中所有的內容條件是將gz表中的bumen編號替換成bm表中的文字name字段
SELECT * FROM gz,bm WHERE gz.bumen=bm.id;
SELECT gz.id,gz.name,gz.gz,bm.name FROM gz,bm WHERE gz.bumen=bm.id;
Ø 多表聯合查詢一定要有字段是關聯的才能查詢
數據庫的導出和導入
導出
Ø MYSQLDUMP [-h localhost] -u root -p 庫名[表名] >導出的文件
n C:\>MYSQLDUMP -h localhost -u root -p lianxi > sql.sql
導入
Ø MYSQL [-h localhost] -u root -p 要導入的庫名 < sql文件路徑
n C:\>MYSQL -h localhost -u root -p lianxi < sql.sql
導入導出注意事項
Ø 在cmd下導出和導入時需要以管理員的身份進入cmd然後進行操作,否則會顯示拒絕訪問。以管理員進入cmd在Systme 32 下找到cmd.exe 右鍵。
Ø 導入和導出的命令後面不要給命令執行符,否知會報錯,對於導入和導出箭頭(< >) 後面給的文件名。
創建用戶並且授權
Ø GRANT 權限 ON 數據庫.[數據表] TO 用戶名@登錄主機地址 IDENTIFIED BY ‘密碼’
n 創建一個wangyun用戶 讓他對jkxy中gz表有查詢權限
u GRANT SELECT on jkxy.gz TO wangyun@localhost IDENTIFIED BY ‘123’;
n 創建用戶 要求對所有的庫以及所有的表有增、刪、改、查權限
u GRANT SELECT,INSERT,UPDATE,DELETE ON *.* TO 用戶名@登錄主機 IDENTIFIED BY ‘密碼’
² *.* 表示 所有庫中的所有表
PHP鏈接MySQL數據庫
鏈接數據庫
Ø Mysqli_connect();
@param1: 鏈接數據庫的地址
@param2: 數據庫的用戶名
@param3: 數據庫的密碼
@param4: 可選參數,要操作的數據庫
返回值: 成功返回對象,失敗返回false
選擇數據庫
Ø Mysqli_select_db();
@param1: 由mysqli_connect()鏈接數據庫成功返回的對象標識。
@param2: 要操作或者更改的數據庫
返回值: 選擇數據庫成功返回true,失敗返回false
設置字符集
Ø Mysqli_ser_charset();
@param1: 由mysqli_connect()鏈接數據庫成功返回的對象標識
@param2: 要設置的字符集,數據庫中UTF-8設置爲UTF8
返回值: 成功返回true 失敗返回false
準備SQL語句
Ø 準備增、刪、改、查的各項SQL語句
發送SQL語句
Ø Mysqli_query();
@param1: 有mysqli_connect()鏈接數據庫成功返回的對象標識
@param2: 要發送的SQL語句
返回值: 做添加、刪除、修改時,成功返回true,失敗返回false。 做查詢時,成功返回一個對象,失敗返回false
判斷並處理結果
Ø Mysqli_affected_rows() 返回上一步mysql操作的影響行
@param1: 由mysqli_connect()鏈接數據庫成功返回的對象標識
返回值: 如果有影響行則返回影響行,如果沒有返回0,操作返回-1
注意:在增、刪、改時會有影響行產生
Ø mysqli_num_rows() 返回查詢數據中的行數
@param1: 有mysqli_query() 執行查詢語句成功返回的對象。
返回值: 返回該對象中查詢到數據的行數
注意: 在查詢操作時返回的是查詢到數據的行數
Ø mysqli_fetch_assoc() 從查詢成功結果對象中獲取一行作爲關聯數組返回
@param1: 由mysqli_query() 執行查詢語句成功返回的對象
返回值: 從該對象中返回一行數據作爲關聯數組
Ø mysqli_insert_id() 返回上一步添加操作所產生的唯一ID
@param1: 由mysqli_connect()鏈接數據庫成功返回的對象標識。
返回值: 返回當前插入數據的id
關閉數據庫
Ø mysqli_close() 關閉數據庫
@Param1: 有mysqli_connect()鏈接數據庫成功返回的對象標識。
返回值: 成功返回true,失敗返回false