日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL基础原创笔记(一)

發(fā)布時(shí)間:2023/12/13 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL基础原创笔记(一) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

對表的增刪改操作:

創(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操作字

需要使用組合查詢的情況:

  • 在單個(gè)查詢中從不同的表返回類似結(jié)構(gòu)的數(shù)據(jù);
  • 對單個(gè)表執(zhí)行多個(gè)查詢,按單個(gè)查詢返回?cái)?shù)據(jù);
  • 在各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中是一般可以不用事先申明變量,可直接用setselect賦值,

    ?

    變量賦值:;使用變量時(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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。