高效能MySQL筆記:第一章
阿新 • • 發佈:2018-11-04
#建student表 CREATE TABLE `student`( `id` bigint(5) UNIQUE NOT NULL COMMENT '主鍵', `name` varchar(25) DEFAULT NULL COMMENT '姓名', `birthday` datetime NOT NULL COMMENT '生日', `age` bigint(3) NOT NULL COMMENT '年齡', PRIMARY KEY(`id`) )ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '學生資訊'; SELECT * FROM student; SELECT * FROM bak_student; DELETE FROM bak_student WHERE id=2; #事務一: START TRANSACTION; UPDATE student SET name="Mary" WHERE id=1; UPDATE student SET name="Tome" WHERE id=2; COMMIT; #事務二: START TRANSACTION; UPDATE student SET name="Kevin" WHERE id=2; UPDATE student SET name="Colia" WHERE id=1; COMMIT; #上述兩個事務,事務一將id=1的name改成Marry沒問題,但是鎖住了這條資料,事務二將id=2的name改成Kevin也沒問題,但是鎖住了這條資料, #這樣,事務一修改id=2和事務二修改id=1由於相互鎖住了資料,就會出現死鎖的現象; #自動提交: SHOW VARIABLES LIKE "AUTOCOMMIT"; SET AUTOCOMMIT=0; #0表示off,即為關閉自動提交 SET AUTOCOMMIT=1; #1表示on,即為開啟自動提交 #mySQL的儲存引擎:InnoDB和MyISAM,其中,InnoDB支援事務,MyISAM不支援事務和行級鎖,且MyISAM的致命缺陷是崩潰後極大可能無法安全恢復; ALTER TABLE student ENGINE=InnoDB; #將student表的引擎修改為InnoDB; CREATE TABLE bak_student LIKE student; #建立一張新表bak_student,複製與student; ALTER TABLE bak_student ENGINE=MyISAM; #將bak_student的儲存引擎改為MyISAM; INSERT INTO bak_student SELECT * FROM student; #將student表的資料複製到bak_student表中; #或者可以這樣將student表中的資料插入到bak_student中: START TRANSACTION; INSERT INTO bak_student SELECT * FROM student WHERE id BETWEEN 3 AND 4; COMMIT;