mysql 入門

tip: windows 系統(tǒng)下的MySQL學(xué)習(xí)
參考資料: 菜鳥教程

1.安裝

按照網(wǎng)上的許多教程安裝好了MySQL(百度有許多,不重復(fù)了~)

2. 基本概念

  • 數(shù)據(jù)庫是按照數(shù)據(jù)結(jié)構(gòu)來組織离福、存儲和管理數(shù)據(jù)的倉庫;
  • 關(guān)系型數(shù)據(jù)庫: 建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫,借助于集合代數(shù)等數(shù)學(xué)概念和方法來處理數(shù)據(jù)庫中的數(shù)據(jù)。(這句話有點抽象复哆,看看經(jīng)過后面的學(xué)習(xí)能不能有自己的理解~);
  • RDBMS 即關(guān)系數(shù)據(jù)庫管理系統(tǒng)(Relational Database Management System)的特點:
    • 數(shù)據(jù)以表格的形式出現(xiàn)腌零;
    • 每行為各種記錄名稱
    • 每列為記錄名稱所對應(yīng)的數(shù)據(jù)域
    • 許多行和列組成一張表單
    • 若干的表單組成database

(這樣子理解:有一個數(shù)據(jù)庫叫school梯找,存放學(xué)校的各種數(shù)據(jù)。school數(shù)據(jù)庫中有很多張表益涧,比如有一張表叫teacher來存放教師數(shù)據(jù)锈锤,有一張表叫student存放學(xué)生數(shù)據(jù)等。在student數(shù)據(jù)表中有很多行,每行是一個學(xué)生牙咏,每列是學(xué)生的各種屬性例如姓名臼隔、年齡、班級妄壶、分?jǐn)?shù)等)

3. RDBMS 術(shù)語

  • 數(shù)據(jù)庫: 數(shù)據(jù)庫是一些關(guān)聯(lián)表的集合摔握。.
  • 數(shù)據(jù)表: 表是數(shù)據(jù)的矩陣蠕趁。在一個數(shù)據(jù)庫中的表看起來像一個簡單的電子表格拦坠。
  • : 一列(數(shù)據(jù)元素) 包含了相同的數(shù)據(jù), 例如郵政編碼的數(shù)據(jù)杠茬。
  • :一行(=元組滋戳,或記錄)是一組相關(guān)的數(shù)據(jù)笑诅,例如一條用戶訂閱的數(shù)據(jù)裹驰。
  • 冗余:存儲兩倍數(shù)據(jù)雀扶,冗余降低了性能蚁孔,但提高了數(shù)據(jù)的安全性屑埋。
  • 主鍵:主鍵是唯一的豪筝。一個數(shù)據(jù)表中只能包含一個主鍵。你可以使用主鍵來查詢數(shù)據(jù)摘能。
  • 外鍵:外鍵用于關(guān)聯(lián)兩個表续崖。
  • 復(fù)合鍵:復(fù)合鍵(組合鍵)將多個列作為一個索引鍵,一般用于復(fù)合索引团搞。
  • 索引:使用索引可快速訪問數(shù)據(jù)庫表中的特定信息严望。索引是對數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)。類似于書籍的目錄逻恐。
  • 參照完整性: 參照的完整性要求關(guān)系中不允許引用不存在的實體像吻。與實體完整性是關(guān)系模型必須滿足的完整性約束條件,目的是保證數(shù)據(jù)的一致性复隆。

4. 數(shù)據(jù)類型

數(shù)值類型

數(shù)值類型

日期和時間類型

字符串類型

5. 以下是命令行SQL語句的學(xué)習(xí)

命令行切換到 MySQL 安裝目錄下拨匆,命令行輸入 mysql,進(jìn)入MySQL命令輸入模式昏名。

image.png

  • 查看有哪些數(shù)據(jù)庫(show databases;

    image.png

    出現(xiàn)一個箭頭涮雷? 其實是忘記輸入分號就按了回車,如果忘記輸入分號轻局,代表這句命令還沒有結(jié)束洪鸭,可以繼續(xù)輸入,這時可以在箭頭后面繼續(xù)輸入分號仑扑。
    忘記分號了

    正常情況

  • 創(chuàng)建數(shù)據(jù)庫:
    create database 庫名;

    創(chuàng)建數(shù)據(jù)庫

    插入后看看數(shù)據(jù)庫:
    查看數(shù)據(jù)庫

    是不區(qū)分大小寫嗎览爵?

  • 刪除數(shù)據(jù)庫
    drop database 庫名;

    刪除數(shù)據(jù)庫

  • 切換數(shù)據(jù)庫
    use 庫名;

    切換數(shù)據(jù)庫

  • 在數(shù)據(jù)庫中創(chuàng)建一張表:
    create table 表名(列名 列類型(n),列名 列類型(n)....);
    一個簡單的例子:

    創(chuàng)建一張表

    • 列名即屬性,比如id镇饮,名字蜓竹,年齡等;
    • 列類型即數(shù)據(jù)類型比如 varchar(變長字符型),char(字符型),int(整型)等;
    • 列類型括號中的數(shù)字 n 代表為它分配多少存儲空間俱济,就好像C語言定義數(shù)組那樣定義了數(shù)組的長度就會為它分配一定的空間嘶是,不足就不滿,超過就會溢出蛛碌。有一篇參考文章:https://www.cnblogs.com/loren-Yang/p/7512258.html
    • 當(dāng)不希望插入的列數(shù)據(jù)為 NULL 時聂喇,可以在創(chuàng)建表示定義列類型加上 NOT NULL;這樣如果插入 NULL 的數(shù)據(jù)時就會報錯蔚携;
    • AUTO_INCREMENT 定義列為自增的屬性希太,一般用于主鍵,數(shù)值會自動加1酝蜒;
    • PRIMARY KEY 關(guān)鍵字用于定義列為主鍵誊辉;
    • ENGINE 設(shè)置存儲引擎,CHARSET 設(shè)置編碼(編碼大概知道是什么亡脑,存儲引擎是啥后面看看能不能學(xué)到堕澄,先放著);

一個復(fù)雜的例子:

image.png

創(chuàng)建了一個表远豺,名為 student奈偏,包含 id,name,enter_date 等屬性,分別定義了數(shù)據(jù)類型躯护,id 是整型無符號自增的主鍵;name 是變長字符型丽涩,最多不能超過100字節(jié)棺滞,不能為 nullenter_date 是日期類型矢渊;存儲引擎為 innodb ,默認(rèn)字符編碼為 utf8继准。
name插入值為null時

  • 查看表中的字段:
    show columns from 表名;

    查看表字段

    可以看到字段名,字段數(shù)據(jù)類型矮男,默認(rèn)值等信息移必。

  • 查看數(shù)據(jù)表類型:
    show table status like '表名';

    查看數(shù)據(jù)表類型

    尷尬,有點亂毡鉴。

  • 刪除表:
    drop table 表名;

    刪除表

  • 在表中插入記錄:

    插入記錄

    插入記錄

    看起來有兩種格式:
    insert into 表名(fields1,fields2,...)values(value1,value2);
    或者可以省略 fields崔泵。
    fields 代表字段名,即屬性即列名猪瞬;value 代表各列的值憎瘸;目測省略字段名就按照表中字段順序?qū)?yīng)插入;
    如果 value 值是字符型或者日期陈瘦,需要用單引號或者雙引號括住幌甘。
    image.png

    可以看到日期如果沒有用引號的話,查詢到的結(jié)果為0000-00-00;
    可以看到插入的時候沒有為id字段賦值锅风,但是它是自增的酥诽。

  • 查詢表中記錄:
    剛創(chuàng)建的表中沒有記錄:

    查詢表中記錄

    select * from 表名; //*代表返回表中所有字段;
    有記錄的表

    select 字段名1,字段名2 from 表名 [where 條件] [limit n] [offset n];

    • select后面的字段名表示要返回的字段名;
    • where包含限制條件皱埠;
    • limit限制返回記錄的數(shù)目肮帐;
    • offset設(shè)置偏移量,即從第幾條記錄開始查詢漱逸,默認(rèn)為0即從最開始開始查詢泪姨。


      image.png

      where查詢條件

      image.png

      image.png

      limit限制返回數(shù)量

      偏移量
  • where 子句

    • 可以用and 或者 or指定多個查詢條件;
    • where 子句對記錄的查詢不區(qū)分大小寫饰抒;
    • where binary 加查詢條件則區(qū)分大小寫肮砾;

操作符列表:


操作符

大小寫

and
  • update 子句
    update 表名 set 字段名1=newValue,字段名2=newValue2 [可以配合where子句];

    image.png

  • delete 子句
    delete from 表名 [where子句];

    image.png

    沒有where子句表示刪除全部記錄:
    image.png

  • like 子句:模糊查詢
    SQL LIKE 子句中使用百分號 %字符來表示任意字符,類似于UNIX或正則表達(dá)式中的星號 *袋坑;
    如果沒有使用百分號 %, LIKE 子句與等號 = 的效果是一樣的仗处;
    可以使用 AND 或者 OR 指定一個或多個條件;

    image.png

  • union 操作符
    連接兩個以上的 select 結(jié)果到同一個結(jié)果集中枣宫;
    select 字段 from 表名 union [all或者distinct] select 字段 from 表名;
    union 默認(rèn)不返回重復(fù)數(shù)據(jù)婆誓,distinct 即默認(rèn)選項,all 即返回全部數(shù)據(jù)包含重復(fù)數(shù)據(jù)也颤;
    兩張表中的數(shù)據(jù):

    image.png

    返回兩張表中的全部姓名name
    image.png

  • 排序
    select 字段 from 表名 order by 字段 [asc或者desc];
    asc:升序洋幻,不加默認(rèn)升序;
    desc:降序翅娶;

    image.png

    image.png

  • 分組
    舉個例子:

    數(shù)據(jù)表

    該表代表道具清單文留,表中,name 代表道具名竭沫,number 代表道具數(shù)量燥翅,price 代表道具單價,buy_date 代表道具購買日期蜕提,同一個名字的道具可能有不同價格的品種森书,例如杯子 cup 單價3元的購買了100個,單價5元的購買了200個谎势。
    以下按照道具名name進(jìn)行分組:
    image.png

    group by name 代表按照 name 分組凛膏,count( * ) 代表記錄計數(shù)。所以結(jié)果列出了 name 這一列和 count( * ) 這一列它浅。按照名字分組的結(jié)果應(yīng)該是 chair, cup,cup, desk,flower译柏。所以 cupcount( * ) 是2,其他都是1姐霍。
    以下按照道具購買數(shù)量 number 進(jìn)行分組:
    image.png

    同上分析鄙麦,購買數(shù)量為100的有 chair和cup(price=3)典唇,所以 count 為2,購買數(shù)量為200的有 desk和cup(price=5)胯府,所以 count 為2介衔,購買數(shù)量為500的有 flower,所以 count 為1骂因。
    以下按照 name 分組并分別統(tǒng)計購買數(shù)量:
    image.png

    sum(number) 代表對購買數(shù)量 number 進(jìn)行求和炎咖,即:將分組后的同名記錄的 number 值進(jìn)行求和。所以對于 cup 這一種道具有兩個同名記錄寒波,number 求和為300乘盼。
    image.png

    加上 with rollup 會對結(jié)果進(jìn)行求和,如圖是將 sum(number) 加起來的總數(shù)俄烁,但是他沒有名字绸栅,所以是 null,可以為他取一個名字:
    image.png

    coalesce 的作用是:如果記錄的第一個參數(shù)為 null页屠,就用第二個參數(shù)粹胯,如果第二個參數(shù)也為 null,就用第三個參數(shù)辰企,以此類推风纠。所以對于總數(shù)這一項沒有 name,就會使用第二個參數(shù)“總數(shù)”牢贸。
    image.png

    也可以把分別算一下總價再加起來竹观,如上圖。

  • mysql 連接(內(nèi)連接潜索、左連接栈幸、右連接)
    這是兩個表的數(shù)據(jù):

    image.png

    內(nèi)連接(怎么解釋呢)就是a表關(guān)聯(lián)b表的數(shù)據(jù),這個數(shù)據(jù)在兩個表中都是存在的帮辟。例如:
    內(nèi)連接

  • select 要列出的項是 a 表的 id,a 表的 name ,b 表的 age,因為 a b 表一起才能包含比較完全的信息玩焰,例如 a 表 studentid
    name 由驹,但是沒有 age 信息,可以從 b 表 teacher 找到 age
    信息(此處舉例不太恰當(dāng)昔园,可以把 b 表換成一個 person 表而字段不變蔓榄,這樣就不會有又是 teacher又是學(xué)生的疑惑)

  • from 表示從 a 表找,inner join 代表關(guān)聯(lián) b 表的信息默刚,on 代表關(guān)聯(lián)的條件甥郑。

  • 所以從 student 表第一項列出 id,name,再去 teacher 表找到
    name 相同的 age 值荤西,如果 teacher 沒有找到同名項澜搅,則不列出student 表這一項伍俘。類似交集。

  • 還有一種格式可以不用寫a和b:


    另一種格式的內(nèi)連接

左連接:獲取左表所有記錄勉躺,即使右表沒有對應(yīng)匹配的記錄癌瘾。右表沒有的項用 null 填充。

左連接

右連接:與 LEFT JOIN 相反饵溅,用于獲取右表所有記錄妨退,即使左表沒有對應(yīng)匹配的記錄。
右連接

  • null 值處理
    正如 JavaScript 里的 NaN蜕企,NaN === NaN 返回的是 false咬荷,在 MySQL 中,某個值為 null 時轻掩,不能通過 value = null 或者 value 幸乒!= null 來判斷,因為 MySQL 中 null=null 也是返回 false放典。在 JavaScript 中判斷是否為 NaN 可以通過 isNaN 函數(shù)來判斷逝变,在 MySQL 中,可以通過 value is null 或者 value is not null 來返回 null 值或者 非null 值奋构。例如:

    null值的判斷

  • 正則表達(dá)式
    可以用在 where 子句中(emmm,我的正則不太好壳影,每次要用的時候都是要再去查的,此處就忽略正則的例子):
    select * from 表名 where 字段 regexp 正則表達(dá)式;
    上面的命令會按照正則表達(dá)式匹配對應(yīng)的內(nèi)容返回弥臼。

  • 事務(wù)

    • 根據(jù) 菜鳥教程的解釋和舉例我覺得可以理解為事務(wù)是一組操作宴咧;事務(wù)開始,然后進(jìn)行了一組操作径缅,最后可以確認(rèn)掺栅,這樣就影響了數(shù)據(jù)庫中的數(shù)據(jù),也可以在一組操作之后不確認(rèn)纳猪,使用回滾來放棄這組操作氧卧。
    • 原子性:整一組操作,要么確認(rèn)了一起生效氏堤,要么回滾了一起失效沙绝;
    • 穩(wěn)定性 :有非法數(shù)據(jù)(外鍵約束之類),事務(wù)撤回(emmm鼠锈,不懂)闪檬;
    • 隔離性:事務(wù)獨立運行。一個事務(wù)處理后的結(jié)果购笆,影響了其他事務(wù)粗悯,那么其他事務(wù)會撤回。事務(wù)的100%隔離同欠,需要犧牲速度(emmm样傍,不懂)横缔;
    • 可靠性:軟、硬件崩潰后铭乾,InnoDB數(shù)據(jù)表驅(qū)動會利用日志文件重構(gòu)修改剪廉。可靠性和高速度不可兼得炕檩, innodb_flush_log_at_trx_commit 選項 決定什么時候把事務(wù)保存到日志里(emmm斗蒋,不懂);
    • 在 MySQL 中只有使用了 Innodb 數(shù)據(jù)庫引擎的數(shù)據(jù)庫或表才支持事務(wù)笛质;
    • 在我們之前的使用命令行模式的時候都可以看作自動提交的事務(wù)泉沾;
    • 顯示開啟事務(wù):begin;
      執(zhí)行一組操作: insert,update,delete 等;
      提交:commit; 或者 回滾:rollback;
      原始數(shù)據(jù)

      commit

      rollback

      關(guān)于事務(wù)應(yīng)該還有更多的操作,后續(xù)補(bǔ)充;
  • alter 命令:修改妇押、添加跷究、刪除字段名、字段類型或者表名等信息
    添加字段:alter table 表名 add 字段名 字段數(shù)據(jù)類型;

    添加字段

    添加字段的位置:關(guān)鍵字 first 可將字段插在第一列敲霍,after 關(guān)鍵字可將字段插在某字段后面俊马;
    first

    after

    在使用 after 關(guān)鍵字將新字段插入 name 字段后面時遇到了錯誤,后來將 gender 的數(shù)據(jù)類型改為 char 類型時就成功了肩杈。
    image.png

    image.png

    應(yīng)該是 varchar 是變長的柴我,沒有默認(rèn)大小,所以 MySQL 不知道要給它分配多少空間扩然,因此報錯艘儒,而 char 或者 int 是固定長度的,默認(rèn)分配一個字節(jié)夫偶。所以在新增字段的時候定義數(shù)據(jù)類型時還是為它分配好所需的空間好界睁,以免出錯。

修改字段:alter table 表名 change 舊字段名 新字段名 新字段數(shù)據(jù)類型;

修改字段

刪除字段:alter table 表名 drop 字段名;
刪除字段

修改字段類型:modify 或者 change
修改字段類型

change 可以同時用來修改字段名和字段類型兵拢。

設(shè)置null值和默認(rèn)值:

image.png

把gender設(shè)置為非null值和默認(rèn)值為female翻斟,從第一次設(shè)置失敗可見,female六個字節(jié)已經(jīng)超過了gender的長度5個字節(jié)说铃,所以要修改大一些杨赤。
image.png

可見設(shè)置默認(rèn)值不會影響之前已經(jīng)存在的記錄,但是對新添加的記錄有影響截汪。
image.png

可見除了用 modify 也可以使用 alter table tablename alter field set default value; 來修改默認(rèn)值。

刪除默認(rèn)值:alter table tablename alter field drop default;

刪除默認(rèn)值

修改表名:alter table 舊表名 rename to 新表名

修改表名

  • MySQL索引
    看了菜鳥教程的MySQL索引后依然不知道這個是什么作用植捎,只是說創(chuàng)建了索引可以提高查詢速度衙解,并不知道為什么以及怎么個提高法。于是去網(wǎng)上搜了一些其他的文章焰枢,大概看了和B-tree和哈希索引的一些東西有關(guān)蚓峦,由于這部分和數(shù)據(jù)結(jié)構(gòu)有關(guān)舌剂,而我的數(shù)據(jù)結(jié)構(gòu)又是極其的菜,所以等我后面補(bǔ)了數(shù)據(jù)結(jié)構(gòu)的知識就回來部MySQL的索引暑椰。

  • mysql臨時表
    當(dāng)我們需要臨時在MySQL保存一些數(shù)據(jù)用完就馬上銷毀時霍转,可以創(chuàng)建MySQL臨時表。MySQL臨時表只在當(dāng)前連接有效一汽,連接關(guān)閉后臨時表就會被自動銷毀避消。
    create temporary table 表名(fields type);
    手動銷毀臨時表:drop table 表名

  • MySQL復(fù)制表
    有大概三種形式,一二種只復(fù)制結(jié)構(gòu)不復(fù)制表中的記錄召夹,第三種復(fù)制結(jié)構(gòu)和記錄:

  • way1:
    show create table 源表名 //顯示要復(fù)制的源表的創(chuàng)建語句

    image.png

    然后把那段 create 語句復(fù)制后即可創(chuàng)建(= = 我的命令行不知道怎么復(fù)制就沒有演示了)岩喷;

  • way 2:
    首先 create table 目標(biāo)表名 like 源表名; //復(fù)制源表的結(jié)構(gòu)
    show tables; //可以看到已經(jīng)創(chuàng)建了一個新表
    show columns from 目標(biāo)表名; //可以看到目標(biāo)表和源表擁有相同的字段等信息
    select * from 目標(biāo)表名; //看到新復(fù)制的目標(biāo)表并沒有記錄內(nèi)容
    insert into 目標(biāo)表名 select * from 源表名; //從源表復(fù)制內(nèi)容到目標(biāo)表
    select * from 目標(biāo)表名; //可以看到新復(fù)制的目標(biāo)表已經(jīng)有了源表的內(nèi)容

    image.png

    也可以用create table 目標(biāo)表名 select * from 目標(biāo)表名 where 1=2;取代create table 目標(biāo)表名 like 源表名;命令復(fù)制源表結(jié)構(gòu):
    image.png

  • way 3:
    create table 目標(biāo)表名 select * from 源表名; //復(fù)制源表結(jié)構(gòu)并且復(fù)制源表中的數(shù)據(jù):

    image.png

  • MySQL自增序列


    image.png

    student表的id字段是一個定義時為auto_increment的序列,但是在刪除了一些記錄之后并沒有重新補(bǔ)回序號的空缺监憎,所以上圖沒有id為1234的記錄纱意。可以通過將id字段先刪除然后重新添加自增序列鲸阔。


    image.png

    image.png

    也可以為自增序列設(shè)置一個起始值:
    image.png

    設(shè)置起始值不會影響已有記錄只會影響新的記錄偷霉。

  • mysql處理重復(fù)數(shù)據(jù)
    在MySQL數(shù)據(jù)表中設(shè)置指定的字段為 PRIMARY KEY(主鍵) 或者 UNIQUE(唯一) 索引來保證數(shù)據(jù)的唯一性。

    image.png

    image.png

    insert ignore intoinsert into 的區(qū)別就是 insert ignore into 會忽略數(shù)據(jù)庫中已經(jīng)存在的數(shù)據(jù)褐筛,如果數(shù)據(jù)庫沒有數(shù)據(jù)类少,就插入新的數(shù)據(jù),如果有數(shù)據(jù)的話就跳過這條數(shù)據(jù)死讹。這樣就可以保留數(shù)據(jù)庫中已經(jīng)存在數(shù)據(jù)瞒滴,達(dá)到在間隙中插入數(shù)據(jù)的目的。
    insert ignore into 當(dāng)插入數(shù)據(jù)時赞警,在設(shè)置了記錄的唯一性后妓忍,如果插入重復(fù)數(shù)據(jù),將不返回錯誤愧旦,只以警告形式返回世剖。 而 replace into 如果存在 primary 或 unique 相同的記錄,則先刪除掉笤虫。再插入新記錄旁瘫。

    • 過濾重復(fù)數(shù)據(jù):使用 distinct 關(guān)鍵字
      image.png
  • SQL注入
    情況大致就是惡意用戶在用戶輸入中輸入了SQL語句,SQL語句被執(zhí)行后帶來不好的后果琼蚯。
    所以永遠(yuǎn)認(rèn)為用戶輸入是不安全的酬凳,永遠(yuǎn)不要信任用戶輸入,對用戶輸入進(jìn)行過濾和轉(zhuǎn)義等遭庶。
    具體如何注入和如何防止在我進(jìn)行了實例學(xué)習(xí)后會舉例說明~

  • 導(dǎo)出數(shù)據(jù)到文件
    select ... into outfile 文件路徑 [fields terminated by 分隔符] [lines terminated by 分隔符];

    image.png

    tmp 文件夾如果不存在會報錯宁仔。
    image.png

    全部數(shù)據(jù)連成一行了~
    格式化一下:每個字段用引號包住,用逗號隔開峦睡,每行回車換行:
    image.png

    image.png

    不要引號和逗號:
    image.png

    image.png

  • mySQL數(shù)據(jù)導(dǎo)入
    load data local infile 文件路徑 into table 表名 [fields terminated by 分隔符] [lines terminated by 分隔符];
    用上面數(shù)據(jù)導(dǎo)出的文件導(dǎo)入到一個新的表格中:

    image.png

    image.png

6. 遇到的問題

(1)MySQL 初次安裝沒有自己設(shè)置密碼翎苫,打開命令行直接輸入“mysql”之后就可以進(jìn)入 MySQL 的命令模式权埠,一開始可以正常使用 show databasescreate database name 等命令,但是突然某一次開始使用 create 命令創(chuàng)建數(shù)據(jù)庫一直報權(quán)限錯誤:

錯誤

查看網(wǎng)上教程很多與我的情況有相似又有不同煎谍,找到了一篇是使用安裝
MySQL 的時候一起安裝的 MySQL workbench(MySQL可視化工作臺)解決了這個問題攘蔽。附上鏈接:http://blog.csdn.net/a19881029/article/details/37809209
我的做法是修改了 root 的密碼,然后之后全部使用 root 身份登錄 MySQL
進(jìn)行命令操作呐粘。結(jié)合網(wǎng)絡(luò)教程满俗,猜測之前報權(quán)限錯誤的原因是用匿名身份登錄了 MySQL,匿名身份缺乏相關(guān)創(chuàng)建數(shù)據(jù)庫的權(quán)限吧= =事哭?(歡迎知道原因的胖友告訴我~)
(2)事務(wù)回滾問題:
事務(wù)回滾出錯

  • 在使用alter重命名表名時使用了事務(wù)漫雷,修改了表名后想要回滾發(fā)現(xiàn)還是被修改了。在網(wǎng)上查了之后覺得可能一個是因為使用了alter是ddl語句(關(guān)于DDL語句是什么以及哪些語句會自動提交可以參考:http://blog.csdn.net/sunshixingh/article/details/50920119)會隱式提交鳍咱,另一個是因為事務(wù)中出現(xiàn)了錯誤降盹。
  • 于是使用控制變量法對這兩個原因進(jìn)行了測試:
    首先是測試DDL語句的因素:


    DDL因素

    可見teacher不在,即事務(wù)中不存在錯誤也被修改了谤辜,回滾失敗了蓄坏。
    對事務(wù)中發(fā)生錯誤的因素:


    事務(wù)中出現(xiàn)錯誤

    可見即使事務(wù)中發(fā)生了錯誤也沒有插入新數(shù)據(jù),回滾成功丑念。
    根據(jù)上面的測試涡戳,應(yīng)該是因為事務(wù)中的DDL語句導(dǎo)致了隱式的提交。

再次查詢了相關(guān)資料后進(jìn)行相關(guān)的測試(不包含隱式提交語句的):

  • 事務(wù)開始脯倚,如果全部執(zhí)行了正確的操作并且commit就是全部提交:


    image.png
  • 事務(wù)開始渔彰,如果執(zhí)行了正確的操作然后執(zhí)行了錯誤的操作又執(zhí)行了正確的操作,然后commit推正,會提交成功的操作:


    image.png
  • 事務(wù)開始恍涂,如果執(zhí)行了正確的操作然后執(zhí)行了錯誤的操作又執(zhí)行了正確操作,然后rollback植榕,會全部回滾:


    image.png
  • set autocommit=0 似乎不起作用再沧?
    image.png

    關(guān)于MySQL事務(wù)的理解歡迎大神指正~
    (3)兩個MySQL服務(wù):
    今天打開命令行如往常一樣mysql -u root -p然后輸入密碼的時候發(fā)現(xiàn)密碼錯誤,打開MySQLworkbench發(fā)現(xiàn)也需要輸入密碼尊残,結(jié)果輸入和以往一樣的密碼無法登陸成功炒瘸,后來試了很多常用密碼就登進(jìn)去了。一開始以為是我記錯密碼了寝衫,但當(dāng)我用命令行查看test數(shù)據(jù)庫下的數(shù)據(jù)表時卻發(fā)現(xiàn)沒有昨天練習(xí)的數(shù)據(jù)表顷扩,又看了數(shù)據(jù)庫好像多了其他數(shù)據(jù)庫名稱。覺得很奇怪慰毅。以為是數(shù)據(jù)庫數(shù)據(jù)丟失屎即,去看了安裝目錄下的data文件夾,是存在我之前的數(shù)據(jù)表的。后來看了網(wǎng)上教程說會不會連接錯了數(shù)據(jù)庫技俐,就打算用任務(wù)管理器關(guān)掉數(shù)據(jù)庫服務(wù)再看看怎么連接。但是我在任務(wù)管理器中發(fā)現(xiàn)了兩個MySQL服務(wù)统台,一個叫MySQL56(正在運行)雕擂,一個叫MySQL(已停止),于是我啟用了MySQL服務(wù)又停掉MySQL56贱勃,就找回自己的數(shù)據(jù)表了井赌,發(fā)現(xiàn)原來我的密碼也沒有記錯!
    之前好像也有安裝過MySQL但是好像安裝失敗了贵扰,后來卸載掉仇穗。過了很久重新按照網(wǎng)上教程按照的MySQL就可以用了。
    所以是因為我安裝了兩次MySQL嗎還是什么原因戚绕?
    image.png

    MySQL和MySQL56對應(yīng)不同的密碼,安裝目錄下的數(shù)據(jù)是MySQL不是MySQL56的,所以MySQL56是什么旱捧?脏里??用MySQL56的時候data文件夾又在哪里球切?谷誓?
    發(fā)現(xiàn)每次開機(jī)自啟的MySQL服務(wù)是那個MySQL56的。吨凑。捍歪。?鸵钝?糙臼?

以上是MySQL入門學(xué)習(xí),更多復(fù)雜操作蒋伦,待使用更新~
理論上會學(xué)Nodejs+MySQL弓摘,而且這些語句,也是要結(jié)合實例多多使用多多踩坑才更容易記住和學(xué)會的痕届,emmmm

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末韧献,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子研叫,更是在濱河造成了極大的恐慌锤窑,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嚷炉,死亡現(xiàn)場離奇詭異渊啰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門绘证,熙熙樓的掌柜王于貴愁眉苦臉地迎上來隧膏,“玉大人,你說我怎么就攤上這事嚷那“恚” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵魏宽,是天一觀的道長腐泻。 經(jīng)常有香客問我,道長队询,這世上最難降的妖魔是什么派桩? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蚌斩,結(jié)果婚禮上铆惑,老公的妹妹穿的比我還像新娘。我一直安慰自己凳寺,他們只是感情好鸭津,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肠缨,像睡著了一般逆趋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晒奕,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天闻书,我揣著相機(jī)與錄音,去河邊找鬼脑慧。 笑死魄眉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的闷袒。 我是一名探鬼主播坑律,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼囊骤!你這毒婦竟也來了晃择?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤也物,失蹤者是張志新(化名)和其女友劉穎宫屠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滑蚯,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡浪蹂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年抵栈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坤次。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡古劲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缰猴,到底是詐尸還是另有隱情绢慢,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布洛波,位于F島的核電站,受9級特大地震影響骚露,放射性物質(zhì)發(fā)生泄漏蹬挤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一棘幸、第九天 我趴在偏房一處隱蔽的房頂上張望焰扳。 院中可真熱鬧,春花似錦误续、人聲如沸吨悍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽育瓜。三九已至,卻和暖如春栽烂,著一層夾襖步出監(jiān)牢的瞬間躏仇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工腺办, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留焰手,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓怀喉,卻偏偏與公主長得像书妻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子躬拢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容