MySQL數據庫(包含於PHP的鏈接)

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-8GBK的區別

存儲數據的長度不一樣,存儲漢字在GB系統2個字節,UTF8是三個字節

在不同的操作系統(語言的不同)中看起不一樣

推薦使用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數據庫時,只會顯示兩個數據庫。

一個是text 測試數據庫

一個是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 新字段名 數據類型 [列的完整性約束] [位置參數]

Ø 位置參數:

AFTER 字段名 (表示在這個字段名之後添加)

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 存在於指定範圍內 (表示值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 表名 [刪除條件];

只要是關於刪除操作的都要在刪除前備份該表數據

Ø 刪除條件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字段等於條件是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 庫名[表名]  >導出的文件

C:\>MYSQLDUMP -h localhost -u root -p lianxi > sql.sql

導入

Ø MYSQL [-h localhost] -u root -p 要導入的庫名 < sql文件路徑

C:\>MYSQL -h localhost -u root -p lianxi < sql.sql

導入導出注意事項

Ø 在cmd下導出和導入時需要以管理員的身份進入cmd然後進行操作,否則會顯示拒絕訪問。以管理員進入cmdSystme 32 下找到cmd.exe 右鍵。

Ø 導入和導出的命令後面不要給命令執行符,否知會報錯,對於導入和導出箭頭(< >) 後面給的文件名。

 

創建用戶並且授權

Ø GRANT 權限 ON 數據庫.[數據表] TO 用戶名@登錄主機地址 IDENTIFIED BY ‘密碼’

n 創建一個wangyun用戶 讓他對jkxygz表有查詢權限

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章