MySQL基础原创笔记(一)
對表的增刪改操作:
創(chuàng)建表:
create table student (
???????? id ?int ?primary key ?auto_increment,
???????? name ?varchar(10) ?character set utf8 ?not null,
???????? sex??? char(2)? default ‘M’,
???????? constraint? fk_student_score? foreign key(id)? references score(id)
)? engine=InnoDB;
?
primary key :指定表的主鍵;
如果是指定單個(gè)主鍵,可直接在該字段后聲明;
如果是指定多個(gè)主鍵,只能采用primary key (X,Y)的形式;
?
定義外鍵:
constraint fk_T2_T1 foreign key(t2_id) references T1(t1_id); //將T1表中的t1_id字段設(shè)置成為T2表的外鍵;
增加外鍵
alter table T2 orderitemds add constraint fk_T2_T1 foreign key(id) references T1(id); //將T1表中的t1_id字段設(shè)置成為T2表的外鍵;
?
auto_increment :讓Mysql自動(dòng)對該列增量;每個(gè)表只允許有一個(gè)auto_increment列,且必須被索引(以最大的數(shù)去遞增),從而可將該列當(dāng)作主鍵;
注:select last_insert_id():該語句可獲得最后一個(gè)auto_increment的值;
default:為字段設(shè)置默認(rèn)值;
?
character set …:指定編碼格式,通常是為了讓其能識別中文;
?
engine = …:指定mysql引擎;
常用的引擎類型:
InnoDB:可靠地事物處理引擎,但不支持全文檢索;
MyISAM:性能極高的引擎,支持全文檢索,但不支持事務(wù)處理;
MEMORY:功能同于MyISAM,但由于數(shù)據(jù)庫在內(nèi)存里,速度很快;適用于臨時(shí)表;
注:新版Mysql默認(rèn)引擎是InnoDB;
?
更新表:使用alter table語句
增加列:
alter table T add Tname varchar(20); //為T表增加一個(gè)名為Tname的列
刪除列:一次只能刪除一列;
alter table T drop column Tname; ///刪除T表中名為Tname的列
?
刪除表:使用Drop table語句
例:drop table T;
?
重命名表:使用rename table語句
例:rename table T1 to t1, T2 to t2, T3 to t3;
?
對表中數(shù)據(jù)的查詢操作:
SQL語句格式:
select
from
where
group by
having
order by
limit
?
去重:distinct
例:select distinct * from T
數(shù)據(jù)分組: group by , having , rollup
group by? :進(jìn)行分組; 如果分組中具有null值,則null將作為一個(gè)分組返回;
having ??:過濾分組; 它支持所有where中的操作符;
注:可以使用rollup關(guān)鍵字來顯示出分組前所有的數(shù)據(jù);例:group by prod_id with rollup;
除聚集計(jì)算語句外,select語句中使用的每個(gè)選擇列或表達(dá)式列,都必須在group by子句中給出;
排序:order by
select * from XXX order byXXX (desc(降序)/asc(升序))
限制檢索行數(shù):limit, limit offset
例: ???select * from XXX limit 0,2 (從第0行開始,取2行)
等價(jià)于? select * from xxx limit 1 offset 2(從第2行開始取1行)
起別名:
可以為表或列起別名;
有兩種形式:
(1)table1 t1
(2)table1 as t1
?
where語句中注意的問題:
注:and比or的優(yōu)先級高
? ??‘<>’ 等價(jià)于 ‘!=’f
??? between A and B:包括邊界
???? is null
???? in :指定條件范圍 取值時(shí)用","分隔,相當(dāng)于or的作用,但比or操作符執(zhí)行的更快;并且可以包含select語句;
???? not
???? like: %:任意字符(null除外)?? _:單個(gè)字符
??? 注:用通配符過濾:花費(fèi)時(shí)間較長,避免過度使用;可以考慮用正則表達(dá)式;
?
mysql支持部分正則表達(dá)式,可以匹配基本的字符和字符串;
形如: select * from products where prod_name regexp ‘XXXX’
例:檢索到prod_name包含文本1000的所有行;
select * ??from products ??where prod_name regexp ‘1000’
mysql的預(yù)定義字符集:
[:digit:]---任意的數(shù)字(同[0-9])
[:lower:]---任意小寫字母(同[a-z])
[:upper:]---任意大寫字母(同[A-Z])
[:alpha:]---任意字符(同[a-zA-Z])
[:alnum:]---任意數(shù)字和字母(同[a-zA-Z0-9])
[:blank:]---空格和制表符(同[\\t])
[:space:]---任意的空白字符,包括空格;(同[\\f\\n\\r\\t\\v])
例:-- 表示檢索出現(xiàn)連在一起的任意4位數(shù)字和小寫字母的所有行
select prod_name
from products
where prod_name regexp ‘[[:digit:][:lower:]]{4}’??
like 和 regexp的區(qū)別:
like是匹配這個(gè)列,如果被匹配的文本僅在列值中出現(xiàn),like并不會(huì)找到它,相應(yīng)的行將不會(huì)返回(使用通配符除外)。
regexp是匹配列值,如果被匹配的文本在列值中出現(xiàn),regexp會(huì)找到它,相應(yīng)的行將會(huì)返回(可以用定位符號^和$,讓regexp匹配這個(gè)列,而非列值)。
?
當(dāng)一些操作,不需要從表上選擇數(shù)據(jù)時(shí),mysql中提供了一個(gè)內(nèi)置的特殊的表dual(空表),來方便操作;
?
mysql中提供的一些常用函數(shù):
聚集函數(shù)(匯總函數(shù)):
max(), ??min(),? ?sum(),? avg(),? count();
注:它們都忽略列值為null的行;
它們都可以和distinct關(guān)鍵字聯(lián)合使用;例如:count(distinct prod_price)
?
文本處理函數(shù):
concat( , ) :用來拼接字段
例:
select concat(vend_name, vend_country)
from vendors
trim( , ):去掉字段中值中的所有空格
rtrim( , ):去掉字段中值右邊的所有空格
ltrim( , ):去掉字段中值左邊的所有空格
soundex( ):能對串進(jìn)行發(fā)音比較;可將任何文本串轉(zhuǎn)化為描述其語音表示的字母數(shù)字;
例如:soundex(cust_contact) = soundex(‘Y.Lie’) //可找到表中cust_contact=Y Lee的這條記錄;
日期和時(shí)間處理函數(shù):
Now() :返回當(dāng)前日期和時(shí)間
CurData():返回當(dāng)前日期
Curtime():返回當(dāng)前時(shí)間
Year(D):返回回一個(gè)日期D中的年份部分 類似有:Month(D)……
DateOfWeek(D):返回對于一個(gè)日期D,返回對應(yīng)的星期幾
DateDiff(D1,D2):計(jì)算D1到D2兩個(gè)日期之差
Date_Format(D,F):按照表示式F的要求顯示日期D;
AddDate(D,n):計(jì)算起始日期D加上n天的日期;
SubDate(D,n): 計(jì)算起始日期D減去n天的日期;
?
子查詢:嵌套在其他查詢中的查詢
使用子查詢的兩種方式:
1.一般與in操作符結(jié)合使用,但也可以用于測試等不等于;
2.用子查詢?nèi)?chuàng)建計(jì)算字段;將子查詢整體作為一個(gè)計(jì)算字段使用;
注:一切的問題都可以采用子查詢寫出;
?
連接:兩個(gè)表之間字段取交集
等值連接:where …=…
例: from T1,T2?? where T1.p_id=T2.p_id;
內(nèi)部連接:inner join…on…
例:from T1 inner join T2 on T1.p_id =T2.p_id;
注:推薦用inner join on子句,它的性能好于where.
外連接:left outer join … on… 、right outer join …on…
左外連接:得到的內(nèi)容為 兩者的公共交集+ 左邊的表中非關(guān)聯(lián)部分
右外連接:得到的內(nèi)容為 兩者的公共交集+ 右邊的表中非關(guān)聯(lián)部分
例:from T1 left outer join T2 on T1.p_id =T2.p_id;
自連接:速度很好,推薦使用
可以通過子查詢來實(shí)現(xiàn),
select
from t
where? t_id = {? }
也可以通過不同的別名來實(shí)現(xiàn);
select
from? t as t1, t as t2
where? t1_id = t2_id
?
組合查詢:多個(gè)查詢并將結(jié)果作為一個(gè)查詢結(jié)果集返回,使用union操作字
需要使用組合查詢的情況:
在各select語句之間放上關(guān)鍵字union,每個(gè)查詢必須包含相同的列、表達(dá)式或聚集函數(shù)。
它會(huì)從查詢結(jié)果中自動(dòng)去除重復(fù)的行,如果需要不取消行,可使用union all;
注:使用uinon可以替代where,能夠用較簡單的方式去完成由where非常復(fù)雜才得到的結(jié)果;
?
范式:
第一范式(1NF):確保每列保持原子性
第二范式(2NF):符合1NF,并且,確保表中的每列都和主鍵相關(guān)
第三范式(3NF):符合2NF,并且,確保每列都和主鍵列直接相關(guān),而不是間接相關(guān);
BC范式(BCNF):符合3NF,并且,主屬性不依賴于主屬性
第四范式:要求把同一表內(nèi)的多對多關(guān)系刪除。
第五范式:從最終結(jié)構(gòu)重新建立原始結(jié)構(gòu)。
?
對表中數(shù)據(jù)的增刪改操作:
注:T代表某個(gè)表
向表中增加行:有四種形式;
第一種形式:插入完整行,必須按默認(rèn)順序?yàn)槊總€(gè)列提供一個(gè)值;
insert into T
values(……)
注:若該列沒有值則用null表示;
第二種形式:插入部分行,可按自己指定的順序?yàn)槊總€(gè)列賦值;
insert into T(……)
values(……)
第三種形式:插入多行;
insert into T(……)
values(……) ;
insert into T(……)
values(……) ;
或
(Mysql特有的)
insert into T(……)
values(……) ,(……);
第四種形式:插入部分某些查詢結(jié)果;
insert into T(……)
select ……
?
修改表中的數(shù)據(jù):
update T set ……
例:
//修改編號為1002顧客的顧客名和顧客電話
update customers set cust_name=’Tom’, cust_tele=”10086” where cust_id=1002;
//刪除編號為1001顧客的郵件地址
updata customers set cust_email=null where cust_id=1001;
?
從表中刪除行:
delete from T where……
注:也可以用truncate table語句刪除表中所有數(shù)據(jù),它的速度更快,相當(dāng)于刪除原表,在建一個(gè)空表;
?
視圖:即:虛擬的表,它只是一個(gè)SQL查詢,不包含任何數(shù)據(jù);
查看創(chuàng)建視圖的語句:show create view <視圖名稱>
創(chuàng)建視圖:
create view <視圖名稱>
as
select查詢語句
刪除視圖:drop view <視圖名稱>
注: 通常視圖都是和select語句使用的,
雖然視圖是可更新的,即可以對視圖使用insert,update,delete;但其實(shí)更新一個(gè)視圖,實(shí)際上是更新其基表,是對基表的增刪改,所以并不推薦這樣使用;
優(yōu)點(diǎn):可重用SQL語句;
????? 化簡了復(fù)雜的SQL操作
????? 使用的部分表,而不是整個(gè)表;
????? 能保護(hù)數(shù)據(jù);
????? 可更改數(shù)據(jù)格式和表示;
缺點(diǎn):視圖會(huì)影響性能,因此使用大量視圖時(shí)要慎重;
?
?
Mysql高級語言
有三種形式的注釋:
行注釋:?? #XXX ????-- XXX(之間至少有一個(gè)空格符)
塊注釋: ??/* XXX */
?
變量:局部變量用@開頭;全局變量用@@開頭;
?
聲明變量: 用declare語句 , 變量不能加@符號;使用游標(biāo)是只能用declare定義
daclare var_name[,……]? type? (default value)
注:declare語句必須用在begin……end語句塊中且必須在最前面;變量名不區(qū)分大小寫; mysql中是一般可以不用事先申明變量,可直接用set或select賦值,
?
變量賦值:;使用變量時(shí)用“@var_name”表示即可; 打印時(shí)只能用以下的方式;
用set語句直接賦值:可以用”=”或”:=”賦值
set ?@var_name=value[,…] 或set? @var_name:=value[,…]
用select語句查詢賦值:只能用”=”賦值,因?yàn)樵趕elect語句中=被看作比較運(yùn)算符;
①select? @var_name:=value[,…]
②select? @var_name[,…]
from……
where……
③select ?@col_name[,…] into var_name[,…] ??#把選定的列賦值給變量
from ……where……
注:直接用set/select語句定義的變量必須加@符號,除非該變量已經(jīng)被declare聲明過;
例://通過連續(xù)賦值,加起來賦為t1,并把每個(gè)值都打印出來;
select @t1:=(@t2=1)+@t3:=4,@t1,@t2,@t3; from…where…?
?
變量的分類:
mysql手冊將變量分系統(tǒng)變量和用戶變量
但實(shí)際中常有以下幾種:
局部變量(作用域是當(dāng)前語句塊,即:begin……end):必須用declare聲明
用戶變量(作用域是當(dāng)前整個(gè)連接):無需使用declare申明,可用select或set會(huì)話變量:(作用域是當(dāng)前整個(gè)連接):
定義:
set @var_name=value;
set session @var_name=value;
set @@session var_name=value;
查看:
select @@var_name;
select @@session.var_name;
show session variables like “%var%”
全局變量(作用域是整個(gè)數(shù)據(jù)庫):
set global @@var_name=value;
查看:
select @@global.var_name;
show global variables like “%var%”
?
?
存儲(chǔ)過程中的控制語句:
if(expr1, expr2, expr3):相當(dāng)于java中的三目運(yùn)算符,
expr1是true,則返回expr2,否則返回expr3;
?
ifnull(expr1, expr2):
若expr1非null,返回本身;否則返回expr2;
?
nullif(expr1,expr2):
若兩者相等,返回null,否則返回expr1;
?
分支語句之if:
if ?condition? then ?result
[else ?result]
end if;
?
分支語句2之case:
形式一:
case value
when compare-value? then? result
[when compare-value ?then? result
……]
[else result]
end case;
形式二:====java中的if else語句
case
when condition? then? result
[when condition? then ?result
……]
[else result]
end case;
注:在流程控制中end后不用寫case;
???????? condition是一個(gè)表達(dá)式;
?
循環(huán)語句之while循環(huán):執(zhí)行前檢查是否滿足循環(huán)條件
while condition do
???????? ……
end while;
循環(huán)語句之repeat循環(huán):執(zhí)行前檢查是否不滿足循環(huán)條件
repeat
???????? ……
???????? until condition (沒有‘;’)
end repeat;
循環(huán)語句之loop循環(huán):
lable_1:loop
???????? ……
?????????????????? leave lable_1;
end loop;
注:
leave語句:只能循環(huán)語句中使用,意思離開語句標(biāo)號為lable_1的語句,相當(dāng)于“跳出整個(gè)循環(huán)”(類似java中的break);當(dāng)滿足了特定條件時(shí),通過“leave 循環(huán)標(biāo)號”語句跳出整個(gè)循環(huán);
iterater語句:只能循環(huán)語句中使用,意思直接跳轉(zhuǎn)到語句標(biāo)號為lable_1的語句,相當(dāng)于“跳過本次循環(huán)” (類似java中的continue);
當(dāng)滿足了特定條件時(shí),通過“iterater 循環(huán)標(biāo)號”語句跳過本次循環(huán);
語句標(biāo)號:lables可以用到while, repeat ,loop等循環(huán)控制語句中;
?
存儲(chǔ)過程和函數(shù):統(tǒng)稱為PL/SQL子程序,它們是被命名的PL/SQL塊,均存儲(chǔ)在數(shù)據(jù)庫中,以便共享;
?
唯一區(qū)別:函數(shù)向調(diào)用者返回?cái)?shù)據(jù),而過程不返回?cái)?shù)據(jù);函數(shù)可以在SQL語句內(nèi)部被調(diào)用,而過程則不能被調(diào)用;
存儲(chǔ)過程和函數(shù)的優(yōu)點(diǎn):簡單,安全,高性能;
?
創(chuàng)建存儲(chǔ)過程:
注:為了安全可以先執(zhí)行這句:drop procedure if exists ?<過程名稱>;
delimiter //(有空格符)
create procedure <過程名稱> (
???????? 參數(shù)聲明
)
begin
???????? 過程體
end //
delimiter ;(有空格符)
注:
①delimiter意思是定義符號, 目的是用delimiter關(guān)鍵字申明當(dāng)前段的自定義分隔符,將其之間的內(nèi)容當(dāng)作存儲(chǔ)過程,使mysql編譯器不會(huì)執(zhí)行這些的代碼;記得用完后要把分隔符還原;
②存儲(chǔ)過程定義時(shí)有三種參數(shù)類型: in,? out,? inout
in 輸入?yún)?shù):在調(diào)用時(shí)指定,執(zhí)行中不能被修改并返回;
out 輸出參數(shù):執(zhí)行中能被修改并返回;
inout 輸入輸出參數(shù):在調(diào)用時(shí)指定,執(zhí)行中能被修改并返回;
?
調(diào)用存儲(chǔ)過程:
call proc_name (…);
修改存儲(chǔ)過程:
alter procedure proc_name ……;
刪除存儲(chǔ)過程:
drop procedure proc_name ;
查看存儲(chǔ)過程:可以獲取何時(shí),有誰創(chuàng)建的信息
查看所有存儲(chǔ)過程的信息:
show procedure status;
查看指定的存儲(chǔ)過程:
show create procedure proc_name;
?
函數(shù):大體類似于存儲(chǔ)過程,只是將關(guān)鍵字procedure變?yōu)閒unction
但注意創(chuàng)建函數(shù)時(shí)不能使用in,out,inout關(guān)鍵字,因?yàn)樗J(rèn)其所有的參數(shù)都是in的;
注:為了安全可以先執(zhí)行這句:drop function if exists ?<函數(shù)名稱>;
delimiter //(有空格符)
create function <函數(shù)名稱> (
???????? 參數(shù)聲明 (參數(shù)不能是帶@的)
)
returns 參數(shù)
begin
???????? 過程體
???????? return 參數(shù);
end //
delimiter ;(有空格符)
?
函數(shù)不能用call調(diào)用外,但它能在SQL語句內(nèi)部被調(diào)用
例如:select func_name(…) from … where…
?
使用存儲(chǔ)過程和函數(shù)的選擇:
1.返回多個(gè)值或不返回值,用存儲(chǔ)過程;返回一個(gè)值,用函數(shù);
2.存儲(chǔ)過程一般用于執(zhí)行一個(gè)指定的動(dòng)作;
函數(shù)一般用于計(jì)算和返回一個(gè)值;
3.要在SQL語句內(nèi)部被使用,只能用函數(shù);
?
游標(biāo)cursor:只能用與存儲(chǔ)過程或函數(shù);
能在檢索出來的行中前進(jìn)或后退一行或多行;
它不是select語句,而是被該語句檢索出來的結(jié)果;
創(chuàng)建游標(biāo):定義時(shí)并未檢索數(shù)據(jù)? 只能用declare定義變量;
decalar cur_name cursor for 定義使用的select語句;
打開游標(biāo):打開時(shí)才按定義檢索數(shù)據(jù)
open cur_name;
使用游標(biāo): 通常在while,repeat,loop循環(huán)中使用; 游標(biāo)也可以嵌套;
關(guān)閉游標(biāo):
close cur_name;
注意:使用后必須關(guān)閉游標(biāo);存儲(chǔ)過程或函數(shù)中定義的局部變量必須放在游標(biāo)之前,而定義的句柄必須放在游標(biāo)之后;
?
例:創(chuàng)建一個(gè)存儲(chǔ)過程,使用游標(biāo)輸出orders表中所有的order_num;
但是這樣會(huì)有多個(gè)結(jié)果窗口;
delimiter //
create procedure p_1()
begin
?
declare o int;? #局部變量最先定義
declare done boolean default 0;
declare ordernumbers cursor for #游標(biāo)在其后定義
select order_num from orders;
declare continue handler for? #處理器在最后定義
sqlstate '02000' set done = 1;
?
open ordernumbers;
fetch ordernumbers into o;
repeat
select o;
#最好將fetch語句放在循環(huán)的最后,當(dāng)其發(fā)生異常時(shí)能夠立即終止循環(huán);
fetch ordernumbers into o;
until done
end repeat;
close ordernumbers;
?
end //
delimiter ;
注:
fetch cursor ?into var_name:獲取游標(biāo)當(dāng)前指向的數(shù)據(jù)行并將指針指向下一行,然后賦給一個(gè)變量;(只能取一行數(shù)據(jù))
declare continue handler forsqlstate '02000' set done = 1;
它表示fetch的執(zhí)行過程中發(fā)生滿足sql狀態(tài)碼所代表的異常時(shí),會(huì)被自動(dòng)執(zhí)行的代碼;
?
觸發(fā)器trigger: 讓某些語句在事件發(fā)生前或后自動(dòng)執(zhí)行;
創(chuàng)建觸發(fā)器:
delimiter $
create trigger <觸發(fā)器名稱>
[before|after] [insert|update|delete]? on <表名稱>
for ench row
?
begin
<觸發(fā)器SQL語句>
end $
delimiter ;
支持的事件類型:insert, update, delete;
例:在增加tab1表記錄后,自動(dòng)將記錄中的tab1_id列中的數(shù)據(jù)增加到tab2表中;
delimiter $
create trigger t_1
after insert on tab1
/* 一次只能定義一種事件類型;
before update on tab1
after delete on tab1
*/
for each row
?
begin
#在增加tab1表中記錄后,自動(dòng)將在指定的新增數(shù)據(jù)添加到tab2表中;
insert into tab2(tab2_id) values (new.tab1_id);
/*
#在tab1表中修改tab1_name列中數(shù)據(jù)時(shí),會(huì)自動(dòng)將數(shù)據(jù)變?yōu)榇髮?#xff1b;
set tab1_name = Upper(new.tab1_name);
#在刪除tab1表中記錄后,自動(dòng)將指定的刪除數(shù)據(jù)添加到tab2表中;
insert into tab2(tab2_id) values (old.tab1_id);
*/
end $
delimiter ;
注:
在insert觸發(fā)器中是不能使用old關(guān)鍵字的,只能用new;
在delete觸發(fā)器中是不能使用new關(guān)鍵字的,只能用old;
在updeta觸發(fā)器中,before時(shí)用new, after時(shí)用old;
因?yàn)閚ew中的值可被更新修改;而old中的值都是只讀的,不能更新修改;
?
事務(wù)處理:它是一種用來維護(hù)數(shù)據(jù)庫完整性的機(jī)制,可以保證一組操作的原子性,即:要不整體執(zhí)行,要不執(zhí)行;如果成功,則寫入數(shù)據(jù)庫;如果發(fā)生錯(cuò)誤,則可以進(jìn)行回退到以前的某種狀態(tài);一般用于增刪改操作;
(內(nèi)部實(shí)現(xiàn)的就是讓操作在內(nèi)存中執(zhí)行,然后一次性將結(jié)果寫入硬盤)
涉及的關(guān)鍵字:
transaction:事務(wù)
rollback:回退
commit:提交到硬盤
savepoint:保留點(diǎn),它是事務(wù)處理中設(shè)置的臨時(shí)占位符,可以對它發(fā)布回退,使其恢復(fù)到之前的狀態(tài);
例:
start transaction; #開始事務(wù)處理
delete from tab1 where id= 0;
savepoint point1; #設(shè)置保留點(diǎn)
delete from tab1 where id= 1;
delete from tab1 where id= 2;
rollback to point1; #回退到保留點(diǎn)point1之前的狀態(tài);
rollback; #回退到開始事務(wù)處理之前的狀態(tài)
?
commit; #將結(jié)果提交到硬盤
注:如果不用事務(wù)處理,Mysql默認(rèn)是自動(dòng)提交的,但可以用set autocommit=0 語句,取消自動(dòng)提交;這樣就可以使用回退操作;
?
安全管理:
創(chuàng)建MySql用戶賬號:
create user 用戶名 indentified by ‘密碼’;
更改用戶名:
rename user … to…;
刪掉用戶名:
drop user 用戶名;
設(shè)置訪問權(quán)限:
show grants for
?
設(shè)置口令:
set password for …… =password(‘ 口令’); //設(shè)置自己的口令
set password for …… =password(‘ 口令’);
?
數(shù)據(jù)庫維護(hù):
?
備份數(shù)據(jù)庫:使用mysqldump命令
?
備份多個(gè)數(shù)據(jù)庫:
mysqldump –u username –p –all –database dbname1 dbname2 > Backup.sql
?
備份所有數(shù)據(jù)庫:
mysqldump –u username –p –all --database > Backup.sql
注:
-n:不創(chuàng)建數(shù)據(jù)庫
-d:不導(dǎo)出任何數(shù)據(jù),只導(dǎo)出數(shù)據(jù)庫的表結(jié)構(gòu)
-t:只導(dǎo)出數(shù)據(jù)
-r:導(dǎo)出存儲(chǔ)過程以及自定義函數(shù)
?
還原數(shù)據(jù):
mysql –u root –p dbname < backup.sql
?
?
?
數(shù)據(jù)庫易混點(diǎn):
數(shù)據(jù)庫中用“=”表示是否相等而不是“==”;
null和任何值操作的結(jié)果都是null;
轉(zhuǎn)載于:https://www.cnblogs.com/zhaojinxin/p/5722715.html
總結(jié)
以上是生活随笔為你收集整理的MySQL基础原创笔记(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FileZilla等软件搭建ftp服务器
- 下一篇: linux cmake编译源码,linu