1. 程式人生 > >高效能MySQL筆記:第一章

高效能MySQL筆記:第一章

#建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;