簡介:MySQL數(shù)據(jù)庫簡稱MySQL,是一款由瑞典MySQL AB公司開發(fā)并且應(yīng)用廣泛的數(shù)據(jù)管理系統(tǒng),MySQL數(shù)據(jù)庫因其體積小、速度快、總體擁有成本低受到很多的熱捧?,F(xiàn)在,MySQL的所有者世界上最著名的數(shù)據(jù)庫企業(yè)——Oracle所有。
MySQL的應(yīng)用,在國內(nèi)的企業(yè)包括:百度、阿里、騰訊、新浪、搜狐、網(wǎng)易等等企業(yè),全部都在使用MySQL數(shù)據(jù)庫。
??? MySQL是一種開放源代碼的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),MySQL數(shù)據(jù)庫系統(tǒng)使用最常用的數(shù)據(jù)庫管理語言--結(jié)構(gòu)化查詢語言(SQL)進行數(shù)據(jù)庫管理。
??? 由于MySQL是開放源代碼的,因此任何人都可以在GPL的許可下下載并根據(jù)個性化的需要對其進行修改。MySQL因為其速度、可靠性和適應(yīng)性而備受關(guān)注。大多數(shù)人都認為在不需要事務(wù)化處理的情況下,MySQL是管理內(nèi)容最好的選擇。
? PHP與很多數(shù)據(jù)庫結(jié)合都很緊密。由于,PHP和MySQL都是開源免費的。所以PHP一直對于MySQL等數(shù)據(jù)庫都有很好的支持。
Oracle數(shù)據(jù)庫的默認端口:1521
MySQL數(shù)據(jù)庫的默認端口:3306
sqlserver數(shù)據(jù)庫的默認端口號為:1433
1,數(shù)據(jù)庫的五個基本單位
數(shù)據(jù)庫服務(wù)器,數(shù)據(jù)庫,數(shù)據(jù)表,數(shù)據(jù)字段,數(shù)據(jù)行
我們現(xiàn)在來對上面的五個基本單位進行說明:
數(shù)據(jù)庫服務(wù)器:是指用來運行數(shù)據(jù)庫服務(wù)的一臺電腦。在中小型企業(yè)通常為一臺。在數(shù)據(jù)存儲量計算量很大的時候可以存在多臺。多臺數(shù)據(jù)庫服務(wù)器共同來存儲或計算。由于數(shù)據(jù)安全非常重要,我們經(jīng)常會對數(shù)據(jù)庫服務(wù)器里面的數(shù)據(jù)進經(jīng)備份。
數(shù)據(jù)庫:一個數(shù)據(jù)庫服務(wù)器里面有可以有多個數(shù)據(jù)庫。主要用來分類使用。我們可以建立交通信息數(shù)據(jù)庫、游戲數(shù)據(jù)庫、酒店開房數(shù)據(jù)庫... ... 主要用來將各個不同用途的數(shù)據(jù),按照業(yè)務(wù)進行大塊的劃分。
數(shù)據(jù)表:例如在游戲數(shù)據(jù)庫中。根據(jù)這一款游戲又分為了不同的數(shù)據(jù)表。專門用來區(qū)分游戲不同的數(shù)據(jù)。例如:用戶數(shù)據(jù)(用戶、密碼);人物數(shù)據(jù);所有裝備和裝備信息;用戶的充值信息;藥品、魔力藥水信息... ...等
數(shù)據(jù)字段:也叫數(shù)據(jù)列。就是我們?nèi)粘K姳砀窭锩娴牧?。在表格中,我們會將一張用戶表分成多個列。如下(表一)所示:用戶編號、用戶名、性別、年齡是字段。在真正的數(shù)據(jù)庫中數(shù)據(jù)字段需要換成英文需要寫成:id、username、sex、年齡。
數(shù)據(jù)行:真正的數(shù)據(jù)存在每一個表的行里面。字段(列)劃分出來了一個表應(yīng)該按照什么樣的格式存數(shù)據(jù)。而行,是真正的數(shù)據(jù)。每一行需要遵循數(shù)據(jù)字段(列)的規(guī)范和要求進行存入數(shù)據(jù)。
2,Mysql連接數(shù)據(jù)庫
方法一
安裝后,可以在開始菜單的列表中找到MySQL Command Line 點擊操作的命令行終端操作。效果如圖:

方法二
如果加入到了windows的環(huán)境變量中,可以在命令行下直接操作。
在命令行下,通過以下命可以連接到數(shù)據(jù)庫服務(wù)器:
mysql -h localhost -u root -p
上面的命令中: mysql 表示 mysql數(shù)據(jù)庫啟動工具。
參數(shù)說明
-h? ?表示數(shù)據(jù)庫連接地址,連接本機可不填
-u? ? 表示要登錄的用戶
-p? ? ?表示使用密碼登錄
一、創(chuàng)建數(shù)據(jù)庫
基本語法create database +數(shù)據(jù)庫名;
示例???create database php;
????????創(chuàng)建?數(shù)據(jù)庫
二、查看數(shù)據(jù)庫
show databases;
顯示??數(shù)據(jù)庫
三、選中數(shù)據(jù)庫
use php;
使用 庫名
四、查看數(shù)據(jù)庫中的表
show tables;
?顯示表
五、刪除數(shù)據(jù)庫
drop database +庫名;
示例?drop database php
1.2 Mysql數(shù)據(jù)表操作
一、創(chuàng)建表
create table 表名(字段名1字段類型,......字段名n 字段類型n);
示例create table user(usernamevarchar(20),password varchar(32));
示例說明 創(chuàng)建一個表名叫user的表,第一個字段為username、表的
字段類型位varchar長度為32個長度。第二個字段為password,類型
也為varchar,長度也為32個長度。
注釋:
int,代表整型。float,代表浮點。char和varchar代表字符串即可。
其他示例:
mysql> create table emp(
ename varchar(10),
hiredate date,
sal float(10,2),
deptno int(2)
二、查看表的創(chuàng)建語句
show create table 表名\G;
示例show create table emp\G;
三、刪除表
drop table 表名;
示例drop table emp;
1.3 Mysql數(shù)據(jù)字段操作
一、查看表結(jié)構(gòu)
desc +表名;
示例desc emp;
二、修改表字段類型
?alter table表名modify 字段名varchar(20);
示例?alter table user modify username varchar(20);
示例說明?????? 將user表的username的類型改為varchar(20)
三、增加表字段
alter table 表名add
column 字段名 類型;
示例?alter table user add column age int(3);
示例說明?添加一個字段為age ,類型為整型長度為3
四、增加字段時控制字段順序
alter table 表名add 字段名字段類型after 字段名;
示例alter table user add email varchar(60) aftercreateip;
示例說明?user表中,在createip 后增加一個字段為email,
類型為varchar, 長度為60
五、刪除表字段
??alter table表名drop
column 字段名;
?示例?alter table user dropcolumn age;
示例說明?在user 表中刪除字段age
六、表字段改名
??alter table表名change 字段原名字段新名 字段類型;
示例?alter table user change email em varchar(60);
示例說明?在user 表中將字段中的email 字段名字改為em
七、修改表字段排列順序
在前的字段增加和修改語句(add/change/modify)中,最后都可以加一個可選項 first|after。
?????? 增加表字段時我們已經(jīng)學過了如何調(diào)整順序。我們現(xiàn)在來看看另外的change或modify如何來調(diào)整順序
示例?alter table user modify em varchar(60) first;
八、修改表名
alter table 舊表名rename 新的表名;
示例?????? altertable user rename new_user;
示例說明?????? 將user表名改為new_user
1.4 Mysql數(shù)據(jù)類型
整型
MySQL數(shù)據(jù)類型所占字節(jié)值范圍
tinyint1字節(jié)-128~127
smallint2字節(jié)-32768~32767
mediumint3字節(jié)-8388608~8388607
int4字節(jié)范圍-2147483648~2147483647
bigint8字節(jié)+-9.22*10的18次方
整型的長度不同,在實際使用過程也就不同。
?
浮點類型
MySQL數(shù)據(jù)類型所占字節(jié)值范圍
float(m, d)4字節(jié)單精度浮點型,m總個數(shù),d小數(shù)位
double(m, d)8字節(jié)雙精度浮點型,m總個數(shù),d小數(shù)位
decimal(m, d)decimal是存儲為字符串的浮點數(shù)
字符類型
MySQL數(shù)據(jù)類型所占字節(jié)值范圍
CHAR0-255字節(jié)定長字符串
VARCHAR0-255字節(jié)變長字符串
TINYBLOB0-255字節(jié)不超過255個字符的二進制字符串
TINYTEXT0-255字節(jié)短文本字符串
BLOB0-65535字節(jié)二進制形式的長文本數(shù)據(jù)
TEXT0-65535字節(jié)長文本數(shù)據(jù)
MEDIUMBLOB0-16 777 215字節(jié)二進制形式的中等長度文本數(shù)據(jù)
MEDIUMTEXT0-16 777 215字節(jié)中等長度文本數(shù)據(jù)
LOGNGBLOB0-4 294 967 295字節(jié)二進制形式的極大文本數(shù)據(jù)
LONGTEXT0-4 294 967 295字節(jié)極大文本數(shù)據(jù)
VARBINARY(M)允許長度0-M個字節(jié)的定長字節(jié)符串值的長度+1個字節(jié)
BINARY(M)M允許長度0-M個字節(jié)的定長字節(jié)符串
時間類型
MySQL數(shù)據(jù)類型所占字節(jié)值范圍
date3字節(jié)日期,格式:2014-09-18
time3字節(jié)時間,格式:08:42:30
datetime8字節(jié)日期時間,格式:2014-09-18 08:42:30
timestamp4字節(jié)自動存儲記錄修改的時間
year1字節(jié)年份
復合類型
MySQL數(shù)據(jù)類型說明舉例
set集合類型set(“member”, “member2″, …
? “member64″)
enum枚舉類型enum(“member1″, “member2″,
? … “member65535″)
一個 ENUM 類型只允許從一個集合中取得一個值;而 SET 類型允許從一個集合中取得任意多個值。
1.5 Mysql字符集
英文字符集:
字符集說明字節(jié)長度
ASCII美國標準信息交換代碼單字節(jié)
GBK漢字內(nèi)碼擴展規(guī)范雙字節(jié)
unicode萬國碼4字節(jié)
UTF-8Unicode的可變長度字符編碼1到6個字節(jié)
注意:
?mysql在寫utf-8的時候?qū)懙氖莡tf8。不加中間的中橫線。
1.6 Mysql索引
一、MySQL的索引類型
普通索引:最基本的索引,它沒有任何限制
唯一索引:某一行啟用了唯一索引則不準許這一列的行數(shù)據(jù)中有重復的值。針對這一列的每一行數(shù)據(jù)都要求是唯一的
主鍵索引:它是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時創(chuàng)建主鍵索引,常用于用戶ID。類似于書中的頁碼
全文索引:對于需要全局搜索的數(shù)據(jù),進行全文索引
?
普通索引
基本語法?????? altertable表? add index(字段)
示例?????? ALTERTABLE money ADD INDEX(username);
示例解釋?????? 為money表的username字段增加索引
唯一索引
類型?????? 詳細說明
基本語法?????? altertable表? addUNIQUE(字段)
示例?????? ALTERTABLE money ADD UNIQUE(email);
示例解釋?????? 為money表的email字段增加唯一索引
全文索引
類型?????? 詳細說明
基本語法?????? altertable表? addFULLTEXT(字段)
示例?????? ALTERTABLE money ADD FULLTEXT(content);
示例解釋?????? 為money表的content字段增加唯一索引
主鍵索引
類型?????? 詳細說明
基本語法?????? altertable表? addPRIMARY KEY(字段)
示例?????? ALTERTABLE money ADD PRIMARY KEY(id);
示例解釋?????? 為money表的id字段增加主鍵索引
創(chuàng)建表時也可以聲明索引
創(chuàng)建表時可在創(chuàng)建表語句后加上對應(yīng)的類型即可聲明索引:
PRIMARY KEY(字段)
?INDEX [索引名] (字段)
?FULLTEXT [索引名] (字段)
?UNIQUE[索引名] (字段)
注:中括號中的索引名,代表可選。
整體示例如下:
CREATE TABLE?test?(
id?INT NOT NULL ,?
username?VARCHAR(20) NOT NULL ,?
password?INT NOT NULL ,?
content?VARCHAR(20) ,?
? ? ?PRIMARY KEY (
id),?
? ? ?INDEX pw (
password),?
? ? ?UNIQUE (
username),
? ? ?FULLTEXT (
content)
) ENGINE = InnoDB;
1.7增刪改查之插入記錄
一、插入記錄有兩種個基本語法
插入基本語法一
基本語法?????? insertinto表 values(值1,值2,值n);
示例?????? INSERTINTO user values(2,'php中文網(wǎng)','男')
示例說明?????? 向user表中插入值id為2,姓名為李文凱,性別為男
插入基本語法二
基本語法?????? insertinto表(字段1,字段2,字段n) values(值1,值2,值n);
示例?????? INSERTINTO user(id,username,sex) values(213,'小沈陽',1);
示例說明?????? 向user表中插入id為213,username為小沈陽,性別為1
說明:
基本語法1和基本語法2的區(qū)別是:
?????? 基本語法1的插入語句,表中有多少個字段就必須要插入多少個值。
一個不能多,一個也不能少。若有默認值,不想傳,可以寫上null。
?????? 基本語法2中,除非有必填字段必須要寫入值外。如果有默認值的
不想寫可以忽略不寫。mysql會自動補主默認值。
基本語法2中,以user(id,username,sex)字段順序為值的順序。
二、基礎(chǔ)查詢
基本語法?????? select* from表;
示例?????? select* from money;
示例說明?????? 查詢money表中所有字段中的所有結(jié)果
注:”*” 是一種正則表達式的寫法,表示匹配所有,上面的查詢語句和下面的是等價:
三、指定字段查詢
基本語法?????? select字段 from 表;
示例?????? selectid,username, balance from money;
示例說明?????? 查詢money表中id,username, balance字段中的所有結(jié)果
四、查詢單個字段不重復記錄distinct
基本語法?????? selectdistinct字段 from 表;
示例?????? selectdistinct age deptno from money;
示例說明?????? 查詢money表中年齡唯一的所有結(jié)果
五、條件查詢where
基本語法?????? select? 字段 from 表 where where條件;
示例?????? select* from money where age = 29;
示例說明?????? 查詢money表中年齡為29的所有結(jié)果
除此之外,還可以使用>、<、>=、<=、!=等比較運算符;
六、邏輯運算符
where多個條件還可以使用 or(或者) 、 and(并且) 等邏輯運算符進行多條件聯(lián)合查詢
七、結(jié)果集排序
基本語法?????? select字段 from 表order? by字段 排序關(guān)鍵詞
示例?????? selectid,username, balance from money order by balance desc;
示例說明?????? 查詢money表中的id,username,balance字段,按照余額進行降序排序
排序用到的關(guān)鍵詞:
asc? 升序排列,從小到大(默認)
desc 降序排列,從大到小
八、結(jié)果集限制
?????? 對于查詢或者排序后的結(jié)果集,如果希望只顯示一部分而不是全部,
使用 limit 關(guān)鍵字結(jié)果集數(shù)量限制。
基本語法?????? select字段 from 表? limit數(shù)量;
示例?????? selectid,username, balance from money limit 5;
示例說明?????? 顯示前五個用戶
九、限制結(jié)果集并排序
基本語法?????? select字段 from 表order by 字段 關(guān)鍵詞 limit 數(shù)量
示例?????? selectid,username, balance from money order by balance desc limit 5;
示例說明?????? 按照錢來排序,顯示前五個最有錢的用戶
十、統(tǒng)計類函數(shù)使用
函數(shù)?????? 說明
sum??????? 求和
count???? 統(tǒng)計總數(shù)
max 最大值
min 最小值
avg? 平均值
基本語法?????? select函數(shù)(字段) from 表
示例?????? selectcount(id) from money
示例說明?????? 查詢money表的id總數(shù)
你還可以給字段取別名喲!使用as關(guān)鍵字。
例如mysql> select count(id) as zongshu
from money;
十一、分組group by
基本語法?????? select* from表 group by 字段
示例?????? select* from money group by province;
示例說明?????? 按照地區(qū)進行分組
統(tǒng)計分組(分類)各總數(shù):
mysql> select deptno,count(1) from emp group by deptno;
統(tǒng)計省份數(shù)量后再進行分組顯示
mysql> selectcount(province),province? from moneygroup by province;
在分組基礎(chǔ)上進行統(tǒng)計
with rollup用的很少。這個知識點設(shè)置為了解級別。
它的主要功能是對于分組的數(shù)據(jù)進行統(tǒng)計后,再進行一次總數(shù)統(tǒng)計。
類別?????? 詳細解示
基本語法?????? select* from表 group by 字段withrollup
示例?????? selectcount(province),province? from moneygroup by province with rollup;
示例說明?????? 對分組的數(shù)再次進行統(tǒng)計
在上面的基礎(chǔ)上統(tǒng)計總數(shù),下例結(jié)果中,最后多了一個12 NULL。
mysql> selectcount(province),province? from moneygroup by province with rollup;
結(jié)果再過濾having
having子句與where有相似之處但也有區(qū)別,都是設(shè)定條件的語句。
having 是篩選組 而where是篩選記錄。
類別?????? 詳細解示
基本語法?????? select* from表 group by 字段 having 條件
示例?????? selectcount(province) as result ,province? frommoney group by province having result >2;
示例說明?????? 對地區(qū)分組并統(tǒng)計總數(shù),將分組結(jié)果中大于2的分組地區(qū)顯示出來
mysql> select count(province) as result,province? from money group by provincehaving result >2;
整體使用SQL
?????? 我們現(xiàn)在將語句進行整合后,配合使用一次。整體的SQL語句配合使用的語法結(jié)構(gòu)如下:
SELECT
????[字段1 [as 別名1],[函數(shù)(字段2) ,]......字段n]
?FROM表名
?[WHERE where條件]
?[GROUP BY字段]
?[HAVING where_contition]
?[order條件]
?[limit條件]
注:上面的語句中可以[] 代表可選。最終的語法總結(jié)如下:
關(guān)鍵詞?? 說明
select???? 選擇的列
from?????? 表
where???? 查詢的條件
group by 分組屬性? having分組過濾的條件
order by 排序?qū)傩?/p>
limit 起始記錄位置,取記錄的條數(shù)
我們進行一次整體的給合使用,查詢money表字段:id,username,balance,province 要求id>1 余額大于50,使用地區(qū)進行分組。我們使用用戶id進行降序,要求只準顯示3條。最后將SQL語句寫成,查詢出來的結(jié)果如下:
mysql> selectid,username,balance,province from money where id > 1 and balance > 50group by province order by id desc limit 3;
1.8 Mysql多表聯(lián)合查詢
user表創(chuàng)建語句:
CREATE TABLE IF NOT EXISTS user (
??uid int(11) NOT NULL,
??username varchar(30) NOT NULL,
??password char(32) NOT NULL
?)ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS order_goods (
??oid int(11) NOT NULL,
??uid int(11) NOT NULL,
??name varchar(50) NOT NULL,
??buytime int(11) NOT NULL
?)ENGINE=InnoDB DEFAULT CHARSET=utf8;
user表數(shù)據(jù):
INSERT INTO user(uid,username,password)values('1','jintian','123456');
INSERT INTO user(uid,username,password)values('2','zhangsha','1234f56');
INSERT INTO user(uid,username,password)values('3','wangwu','1234fs56');
INSERT INTO user(uid,username,password)values('4','lisi','123s456');
INSERT INTO user(uid,username,password)values('5','xiaotian','123d456');
INSERT INTO user(uid,username,password) values('6','wangfei','123f456');
INSERT INTO user(uid,username,password)values('7','oldboy','123w456');
order_goods數(shù)據(jù)如下:
INSERT INTOorder_goods(oid,uid,name,buytime) values('1','7','opper','12345622');
INSERT INTOorder_goods(oid,uid,name,buytime) values('2','2','iphone','1234356');
INSERT INTOorder_goods(oid,uid,name,buytime) values('3','4','xieli','12342s56');
INSERT INTOorder_goods(oid,uid,name,buytime) values('4','3','lisi','12322456');
INSERT INTOorder_goods(oid,uid,name,buytime) values('5','5','juzi','12344456');
INSERT INTOorder_goods(oid,uid,name,buytime) values('6','6','tianmiju','12322456');
INSERT INTOorder_goods(oid,uid,name,buytime) values('7','1','xiangjiao','12311456');
注意:在上表order_goods表中uid是指user表中的uid字段。上表中oid為1的數(shù)據(jù)行,uid為7的用戶。為user表中uid為7的用戶:oldboy。該用戶購買了商品為xiangjiao。購買時間buytime為一個unix時間戳。
mysql> select u.uid ,u.username as
username,o.oid,o.uid,o.name as shopname from user u,order_goods o ?where
u.uid = o.uid;
外連接
基本語法?????? select表1.字段 [as 別名],表n.字段? from表1 LEFT JOIN 表n on? 條件;
示例?????? select*? from user left join order_goods? on?user.uid = order_goods.uid;
示例說明?????? 以左邊為主,查詢哪些用戶未購買過商品,并將用戶信息顯示出來外連接又分為左連接和右鏈接,具體定義如下。
左連接:包含所有的左邊表中的記錄甚至是右邊表中沒有和它匹配的記錄
mysql> select *? from user left join order_goods? on?user.uid = order_goods.uid;
右連接:包含所有的右邊表中的記錄甚至是右邊表中沒有和它匹配的記錄
基本語法?????? select表1.字段 [as 別名],表n.字段? from表1 right JOIN 表n on? 條件;
示例?????? select*? from user right join order_goods? on?user.uid = order_goods.uid;
示例說明?????? 查詢商品表中哪些用戶購買過商品,并將用戶信息顯示出來
mysql> select *? from user right join order_goods? on? user.uid= order_goods.uid;
?
?
子查詢
?????? 有時候,當我們查詢的時候,需要的條件是另外一個select語句的結(jié)果,這時就需要使用子查詢。用于子查詢的關(guān)鍵字包括in、not in、=、!=、exists、not exists等。
基本語法?????? select字段? from表 where 字段 in(條件)
示例1??? select*? from user where uid in (1,3,4);
示例1說明?? 按照id 查詢指定用戶
示例2??? select*? from user where uid in (select uidfrom order_goods);
示例2說明?? 將購買過商品的用戶信息顯示出來
示例1:
mysql> select *? from user where uid in (1,3,4);
示例2:
mysql> select *? from user where uid in (select uid fromorder_goods);
記錄聯(lián)合
?????? 使用 union 和 union all 關(guān)鍵字,將兩個表的數(shù)據(jù)按照一定的查詢條件查詢出來后,將結(jié)果合并到一起顯示。兩者主要的區(qū)別是把結(jié)果直接合并在一起,而 union 是將 union all 后的結(jié)果進行一次distinct,去除重復記錄后的結(jié)果。
基本語法?????? select語句1 union[all] select語句2
示例?????? select*? from user where uid in (1,3,4);
示例說明?????? 將商品表中的用戶信息和用戶表中的用戶信息的結(jié)果組合在一起
mysql> select uid from user union selectuid from order_goods;
1.9 Mysql增刪改查之更新記錄
更新記錄
?????? 更新數(shù)據(jù)我們已經(jīng)說過。需要修改內(nèi)容,修改銀行卡余額,修改裝備信息的時候都需要使用到update,修改語句。
money表數(shù)據(jù)結(jié)構(gòu):
CREATE TABLE IF NOT EXISTS money (
??uid int(11) NOT NULL,
??username varchar(30) NOT NULL,
??balance DECIMAL(9,2) NOT NULL
?)ENGINE=InnoDB DEFAULT CHARSET=utf8;
money表數(shù)據(jù):
INSERT INTO money(uid,username,balance)values('1','zhangsai','15000.22');
INSERT INTO money(uid,username,balance)values('2','zhangsa','16000.22');
INSERT INTO money(uid,username,balance)values('3','lisi','17000.22');
INSERT INTO money(uid,username,balance)values('4','wangwu','18000.22');
修改(也叫更新)語句的基本語語法如下:
基本語法?????? update表名 set 字段1=值1,字段2=值2,字段n=值n where 條件
示例?????? updatemoney set? balance=balance-500 whereuserid = 15;
示例說明?????? 修改money表,將balance余額減500。要求userid為15
假設(shè)我們有下面這一個表,表結(jié)構(gòu)如下:
mysql> select * from money where username='lisi';
使用update 語句進行記錄更新
mysql>?update money set?balance=balance-500 where uid = 15;
同時對兩個表進行更新
基本語法?????? update表1,表2 set 字段1=值1,字段2=值2,字段n=值n where 條件
示例?????? updatemoney m,user u m.balance=m.balance*u.age where m.userid=u.id;
示例說明?????? 修改money,將money表的別名設(shè)置為m;user表的別名設(shè)置為u;將m表的余額改為m表的balance*用戶表的age。執(zhí)行條件是:m.userid = u.id
mysql> update money m,user um.balance=m.balance*u.password where m.uid=u.uid;
使用delete 刪除記錄
基本語法?????? DELETEFROM表 [where 條件];
示例?????? DELETEFROM user where id > 10;
示例說明?????? 刪除掉用戶表中id大于10的所有用戶
mysql> DELETE FROM money where uid='1';
?Query OK, 1 row affected (0.08 sec)
刪除掉了id為1的記錄。
清空表記錄
?????? delete和truncate是一樣的,但它們有一點不同,那就是DELETE可以返回被刪除的記錄數(shù),而TRUNCATE TABLE返回的是0。
?????? 如果一個表中有自增字段,使用truncate table 這個自增字段將起始值恢復成1.
基本語法?????? TRUNCATETABLE表名;
示例?????? TRUNCATETABLE user;
示例說明?????? 清空表的數(shù)據(jù),并且讓自增的id從1開始自增
【切記】
刪除時一定要記住加上where條件,不然會清空掉整個表的記錄。
刪除重要數(shù)據(jù)前一定要備份、備份、備份。
2.0 Mysql 權(quán)限操作
添加權(quán)限
類別?????? 詳細解示
基本語法?????? grant權(quán)限 on 庫.表 to '用戶'@'主機'
identified by '密碼';
示例?????? grantselect, insert on test.* to 'liwenkai'@'localhost' identified by '4311';
示例說明?????? 給予liwenkai用戶,在本機連接test庫所有表的權(quán)限。操作的這些表具有查詢和寫入權(quán)限
注:可以針對一個用戶增加多條權(quán)限。
刪除權(quán)限
基本語法?????? revoke權(quán)限 on 庫.表 from '用戶'@'主機';
示例?????? revokeselect, insert on test.* to 'liwenkai'@'localhost' identified by '4311';
示例說明?????? 給予liwenkai用戶,在本機連接test庫所有表的權(quán)限。操作的這些表具有查詢和寫入權(quán)限。
參數(shù)說明
grant all? 在grant后接all說明給予所有權(quán)限
revoke all?????? 在revoke后接all說明刪除所有權(quán)限
權(quán)限on .?????? .所明給予所有庫所有表的操作權(quán)限
'用戶'@'主機' 主機里面若為%。任意來源的主機均可以使用這個用戶來訪問
創(chuàng)建數(shù)據(jù)庫用戶liwenkai ,具有對test數(shù)據(jù)庫中所有標的 select / insert 權(quán)限
示例:增加權(quán)限
mysql> grant select, insert on test.* to'liwenkai'@'localhost' identified by '4311';
?Query OK, 0 rows affected (0.00 sec)
示例:移除權(quán)限
mysql> revoke insert on test.* from'liwenkai'@'localhost';
?Query OK, 0 rows affected (0.30 sec)
補充:
查看用戶權(quán)限
查看當前用戶權(quán)限:
show grants;
查看其它用戶權(quán)限:
show grants for'test'@'localhost';
刷新權(quán)限
flush privileges;
2.1 PHP操作mysql數(shù)據(jù)庫
注意:
?????? 從PHP7開始默認不再支持mysql擴展,即不再支持mysql_*系列函數(shù)。請使用mysqli連接數(shù)據(jù)庫。
?????? mysqli即支持php5也支持php7。
創(chuàng)建表結(jié)構(gòu):
CREATE TABLE IF NOT EXISTS users (
?? idINT(10) NOT NULL,
??username varchar(30),
??password varchar(30),
??createtime date not null,
??createip binary(16)
);