â ãèæ¯
ä¼åsqlçè¿ç¨ä¸åç°è¡¨ä¸å°ä¸ä¸ªç´¢å¼,ç´æ¥å ä¸ä¸ªï¼ä¼ä¸ä¼hangä½ï¼ä¸å ï¼sqlåè·ä¸å¥½,ç±æ¤å¼åºä¸ä¸ªé®é¢ââddlæä½æä¹åï¼
â ¡ãé²æ¯ä¸ä¸¤å¥
- 5.6çæ¬ä¹åçMySQLå建索å¼ä¸æ¯æonline,ä¼å¯¹è¡¨å ä¸ä¸ªè¯»é(S lock),åªè½select,insertä¼é»å¡,5.6å¼å§,MySQLåçæ¯æäºå¨çº¿ç´¢å¼æ·»å ,å¨æ·»å ç´¢å¼è¿ç¨ä¸,åºç¨ç¨åºå¯¹è¡¨ä¾ç¶å¯è¯»å¯å
- online ddlçè¿æ®µæ¶é´å ,对表åçæä½ä¼å è®°å½å°alter tableçæ¥å¿é,è¿ä¸ªæ¥å¿æ¯å åç,å¦æå å大å°å¤ªå°è®°ä¸ä¸æ¥å°±ä¼æ¥é
show variables like 'innodb%max%';
innodb_online_alter_log_max_size | 134217728
å¦æ线ä¸æ´æ°æä½æ¯è¾å¤,è°å¤§è¿ä¸ªå¼ set global innodb_online_alter_log_max_size = 128M,è¿æ¯ä¸ªå ¨å±åé,å¨my.cnfä¸ä¹é ä¸
â ¢ãèå¼DDL
3.1 é模å¼ä¸ç®æ³è§£æ
1ã两个åæ°ï¼lockåalgorithm
é模å¼ï¼
æ¨¡å¼ | å«ä¹ |
---|---|
default | æ ¹æ®äºå¡æ大并åå¤æç¨ä»ä¹æ¨¡å¼ |
none | ä¸å ä»»ä½é,ä¸é»å¡ |
shared | å ±äº«æ¨¡å¼,å5.1çfast index creationä¸æ ·,å¯è¯»,ä½ä¸æ¯ædml |
exclusive | æä»æ¨¡å¼,ä»»ä½æä½é½ä¸æ¯æ |
ç®æ³ï¼
ç®æ³ | |
---|---|
æ ¹æ®old_alter_tableå³å®ç¨åªä¸ªç®æ³,off为ç¨æ°ç®æ³,å³inplace | |
inplace | å ±äº«é,åªæ¯æå¢å åå é¤ç´¢å¼ä¸¤ç§æä½ |
copy | éè¦æ·è´æ°æ®,æçä½ |
ä¸ç®¡ç¨ä»ä¹æ¨¡å¼,online ddlå¼å§ä¹åé½ä¼æä¸ä¸ªçæ¶é´çæä»é,ç»æä¹åä¹ä¸æ ·,æ以说,æä½ä¹åéè¦ç¡®ä¿æ²¡æ大äºå¡æ§è¡,å¦åä¼åºç°ä¸¥éé»å¡
2ã两ç§ç®æ³æ·»å ç´¢å¼æ¥éª¤å¯¹æ¯(5.5çæ¬)
- | ||
---|---|---|
1 | æ°å»ºå¸¦ç´¢å¼ç临æ¶è¡¨ | å建索å¼æ°æ®åå ¸(åªè½æ¯äºçº§ç´¢å¼,å¦ææ¯ä¸»é®æå®inplaceä¹ä¼è½¬ä¸ºcopy) |
2 | éå表,ç¦æ¢DML,å 许æ¥è¯¢ | å å ±äº«é,ç¦æ¢DML,å 许æ¥è¯¢ |
3 | å°å表æ°æ®æ·è´å°ä¸´æ¶è¡¨ | 读åèç°ç´¢å¼,æé æ°çç´¢å¼é¡¹,æåºå¹¶æå ¥æ°ç´¢å¼ |
4 | å级sharedé为exclusive,ç¦æ¢è¯»å,årename(ä¿®æ¹æ°æ®åå ¸,å¾å¿«) | çå¾ æå¼å½å表çææåªè¯»äºå¡æ交 |
5 | å®æå建索å¼æä½ | å建索å¼ç»æ |
3ãè¯æ³:
alter table tb_name ...
lock = xxx,algorithm = xxx
注æï¼å¤ä¸ªddlæä½å»ºè®®æ¾å°ä¸æ¡è¯å¥ç§æ§è¡,æçæ¯åå¼æ§è¡é«
tips:
以ä¸åææ¯é对5.5åä¹åçæ åµ,å³é£æ¶ååªæå¢å ãå é¤ç´¢å¼ä¸éè¦æ·è´å表,ä½ä¹ä¸è½æä½DML
â £ãç°ä»£online ddlçåç±»ä¸å®ç°ç»è
4.1 åç±»
online ddlå å«copyåinplace两ç§
ä¿®æ¹åç±»ååå é¤ä¸»é®ç¨copy
inplaceåå为rebuildåno-rebuild两ç§
rebuildéè¦é建表,ä¿®æ¹è®°å½æ ¼å¼,æ·»å ãå é¤åãä¿®æ¹é»è®¤å¼é½ç¨rebuild
no-rebuildåªéè¦ä¿®æ¹å æ°æ®,æ·»å ãå é¤ç´¢å¼ãä¿®æ¹åååç¨no-rebuild
rebuildæ¹å¼æ¯no-rebuildæ¹å¼å®è´¨å¤äºä¸ä¸ªddlæ§è¡é¶æ®µ
4.2 å®ç°ç»è(ä¸é¶æ®µ)
å æ£æµä¸äºå½åãé¿åº¦çéå¶
prepare | ddl | commit | |
---|---|---|---|
serverå±å建临æ¶frm | é级exclusive-mdlé,å 许读å(copyä¸å¯å) | å级exclusive-mdlé,ç¦æ¢è¯»å | |
ææexclusive-mdlé,ç¦æ¢è¯»å | æ«æå表çèç°ç´¢å¼æ¯æ¡è®°å½ | åºç¨æårow_logç§äº§ççæ¥å¿ | |
æ ¹æ®alterç±»å,ç¡®å®æ§è¡æ¹å¼(copy,inplace-rebuild,inplace-norebuild) | éåæ°è¡¨çèç°ç´¢å¼åäºçº§ç´¢å¼ | æ´æ°innodbçæ°æ®åå ¸ | |
æ´æ°æ°æ®åå ¸çå å对象 | æ ¹æ®è®°å½æé 对åºçç´¢å¼é¡¹ | æ交äºå¡(å·æ°äºå¡çredoæ¥å¿) | |
åé row_log对象记å½å¢é | å°ç´¢å¼é¡¹æå ¥sort_bufferå | ä¿®æ¹ç»è®¡ä¿¡æ¯ | |
6 | innodbå±çæ临æ¶ibdæ件(rebuildæ åµä¸) | å°sort_bufferåæå ¥æ°çç´¢å¼ | rename临æ¶idbãfrmæ件 |
7 | æ°æ®åå ¸ä¸æ交äºå¡ãéæ¾é | å¤çddlæ§è¡è¿ç¨ç§äº§ççå¢é(rebuildæ åµä¸) | åæ´å®æ |
4.3 注æä¸ä¸ªåæ°
åæ° | |
---|---|
old_alter_table | é»è®¤offå³ç¨inplaceæ¨¡å¼ |
tmpdir | å建索å¼æ¶æåºçå åä¸å¤åå¨æ¤ç®å½å |
innodb_online_alter_log_max_size | årow_log |
â¡online ddlä¸inplaceæ¯ä¼é项,ALGORITHM=COPYå®ä¼æ·è´è¡¨,åªè¯»,ä½ALGORITHM=INPLACEä¹å¯è½æ·è´è¡¨,ä½å¯ä»¥å¹¶åDML(å 为ærow_log)
â¢5.6ä¾ç¶ä¸æ¯æonlineçddlæä½ï¼ä¿®æ¹åçæ°æ®ç±»å,å é¤ä¸»é®,åæ´è¡¨å符é
â£inplace对dmlçæ¯ææ¯è¾å¥½,ä½æ¶èå´æ¯copy大
online ddlå ³é®ç¹å°ç»
â æ°æ®å®æ´æ§--->row_log
â¡onlineåæ°æ®ä¸è´æ§--->propareåcommitæ¶çæmdl,å ä¹å ¨ç¨online
â¢serveråinnodbä¸è´--->prepareæ¶serverçæfrm,innodbçæ临æ¶ibd,ddlæ¶å表æ·è´å°ibd,row_logåºç¨å°ibd,commitæ¶innodbä¿®æ¹æ°æ®åå ¸,æ交,æåinnodbåserveréå½åibdårfm
â ¤ãpt-osc
5.1 为ä»ä¹è¦ç¨pt-osc
é®é¢ï¼
å¨çº¿ç´¢å¼æ·»å åå¨çä¸ä¸ªé®é¢ââ主ä»å»¶æ¶(MySQLé»è¾å¤å¶,oracleç©çå¤å¶ä¸åå¨è¿ä¸ªé®é¢)
åå ï¼
alter tableæ¯æ§è¡å®ä¹åæåè¯ä»æºè¦æ§è¡(äºå¡),ä»åºå顺åºæ§è¡ã
å¦ææ¯copyçé£ç§online ddl,æ§è¡å°è¿ä¸ªddl,å ¶ä»å¹¶è¡çdmlè¯å¥åè¦çå¾ è¿ä¸ªddlæ§è¡å®æ¯åæè½ç»§ç»(çä¸æåç),å¦ä¸å¾ï¼
主ä»å»¶è¿ç产çï¼
+------------------------+
| master | o_ddl_5min
+------------------------+
| |
|log| åæ¥çæ¯äºè¿å¶æ¥å¿,è¦çäºå¡æ§è¡å®ä¹åææ交è¿å»,åç©çæ¥å¿ä¸å
| |
+------------------------+
| slave | o_ddl_5min
+------------------------+
å æ¤,å³ä½¿5.7ç°å¨å¯¹è¶æ¥è¶å¤çddlæä½è¯»åä¸é»å¡äº,çæ£å¨çº¿ä¸ä¹å¾å°ç¨alter tableè¿ç§æ¹å¼å»æ§è¡ddlæä½
ç®åæ们常ç¨çä¸ä¸ªå·¥å ·æ¯pt-osc
è¿ä¸ªå·¥å ·åå¨çº¿ddl,主ä»å»¶è¿é常å°,å®ä¸æ¯ç´æ¥æä½ç,æ¯éè¿è§¦åå¨çæºå¶æ¥æ ¢æ ¢å,è¿æä¸é¨æ§å¶å»¶è¿çåæ°
5.2 å®è£ ä¸æä½æ¼ç¤º
yum install -y perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-Time-HiRes perl-DBI perl-DBD-MySQL
cd /usr/local/src
wget https://www.percona.com/downloads/percona-toolkit/3.0.4/binary/tarball/percona-toolkit-3.0.4_x86_64.tar.gz
tar zxvf percona-toolkit-3.0.4_x86_64.tar.gz
cd percona-toolkit-3.0.4
perl Makefile.PL
make
make install
pt-online-schema-change --alter "convert to character set utf8b4" D=test,t=a
æ¾ç¤ºæä½æ¥éª¤,çæ£æ§è¡è¦å --excute
pt-online-schema-change --alter "alter table add index index_a (a)" D=test,t=a --excute
æ´ä¸ªè¿ç¨ææå¾å¤å°çæ¥éª¤,ä¸ä¸ªä¸ä¸ªä¼ å°ä»ä¸å»,æ以延è¿æ¯è¾å°,缺ç¹æ¯æ¶é´é¿
percona toolkitä¸ææç¨çå°±æ¯pt-online-schema-change,å ¶ä»å·¥å ·å®æ¹å·¥å ·å utlitieséé¢é½æäº,å°½éç¨å®æ¹ç,å¦å¤å®æ¹ä¹å¨åoscäº
5.3 åçæµ æ
æ¹æ¡ï¼
æ¥éª¤ | æä½ |
---|---|
step1 | sysbenchå¯¼å ¥æµè¯æ°æ®å°teståºsbtest1ä¸ |
step2 | å¼å¯general_log,并è¾åºå°mysql.general_log表 |
step3 | oscç»sbtest1表çcå段å ä¸ä¸ªç´¢å¼(å¯ä»¥æexecuteæ¢å--dry-runï¼ |
step4 | åæglog |
step1ï¼ç¥
step2ï¼
(root@localhost) [(none)]> truncate mysql.general_log;
Query OK, 0 rows affected (1.65 sec)
(root@localhost) [(none)]> set global general_log = 1;
Query OK, 0 rows affected (0.00 sec)
(root@localhost) [(none)]> set global log_output = 'table';
Query OK, 0 rows affected (0.01 sec)
step 3ï¼
pt-online-schema-change --alter "add index index_c (c)" --socket=/tmp/mysql.sock --user=root --password=123 D=test,t=sbtest1 --execute
No slaves found. See --recursion-method if host VM_221_162_centos has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.
Operation, tries, wait:
analyze_table, 10, 1
copy_rows, 10, 0.25
create_triggers, 10, 1
drop_triggers, 10, 1
swap_tables, 10, 1
update_foreign_keys, 10, 1
Altering `test`.`sbtest1`...
Creating new table...
Created new table test._sbtest1_new OK.
Altering new table...
Altered `test`.`_sbtest1_new` OK.
2017-11-30T18:28:19 Creating triggers...
2017-11-30T18:28:19 Created triggers OK.
2017-11-30T18:28:19 Copying approximately 493200 rows...
2017-11-30T18:28:41 Copied rows OK.
2017-11-30T18:28:41 Analyzing new table...
2017-11-30T18:28:41 Swapping tables...
2017-11-30T18:28:41 Swapped original and new tables OK.
2017-11-30T18:28:41 Dropping old table...
2017-11-30T18:28:41 Dropped old table `test`.`_sbtest1_old` OK.
2017-11-30T18:28:41 Dropping triggers...
2017-11-30T18:28:41 Dropped triggers OK.
Successfully altered `test`.`sbtest1`.
ä¸é¢å·²ç»å¯ä»¥çåºä¸ªå¤§æ¦è¿ç¨äº
step 4ï¼
è¿ä¸æ¥è¯¦ç»å5ååæå¦ä¸ï¼
(root@localhost) [(none)]> set global log_output = 'file';
Query OK, 0 rows affected (0.00 sec)
(root@localhost) [(none)]> set global general_log = 0;
Query OK, 0 rows affected (0.01 sec)
(root@localhost) [mysql]> select argument from mysql.general_log;
root@localhost on test using Socket
set autocommit=1
SHOW VARIABLES LIKE 'innodb\_lock_wait_timeout'
SET SESSION innodb_lock_wait_timeout=1
SHOW VARIABLES LIKE 'lock\_wait_timeout'
SET SESSION lock_wait_timeout=60
SHOW VARIABLES LIKE 'wait\_timeout'
SET SESSION wait_timeout=10000
SELECT @@SQL_MODE
SET @@SQL_QUOTE_SHOW_CREATE = 1/*!40101, @@SQL_MODE='NO_AUTO_VALUE_ON_ZERO,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'*/
SELECT @@server_id /*!50038 , @@hostname*/
说æï¼
1ã设置session级çåé
SET SESSION innodb_lock_wait_timeout=1
SET SESSION lock_wait_timeout=60
SET SESSION wait_timeout=10000
ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼
SHOW VARIABLES LIKE 'version%'
SHOW ENGINES
SHOW VARIABLES LIKE 'innodb_version'
SHOW VARIABLES LIKE 'innodb_stats_persistent'
SELECT @@SERVER_ID
SHOW GRANTS FOR CURRENT_USER()
SHOW FULL PROCESSLIST
SHOW SLAVE HOSTS
SHOW GLOBAL STATUS LIKE 'Threads_running'
SHOW GLOBAL STATUS LIKE 'Threads_running'
SELECT CONCAT(@@hostname, @@port)
SHOW TABLES FROM `test` LIKE 'sbtest1'
SELECT VERSION()
SHOW TRIGGERS FROM `test` LIKE 'sbtest1'
/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, @@SQL_MODE := '', @OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, @@SQL_QUOTE_SHOW_CREATE := 1 */
USE `test`
SHOW CREATE TABLE `test`.`sbtest1`
/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, @@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */
EXPLAIN SELECT * FROM `test`.`sbtest1` WHERE 1=1
SELECT table_schema, table_name FROM information_schema.key_column_usage WHERE referenced_table_schema='test' AND referenced_table_name='sbtest1'
SHOW VARIABLES LIKE 'wsrep_on'
/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, @@SQL_MODE := '', @OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, @@SQL_QUOTE_SHOW_CREATE := 1 */
说æï¼
1ãæ¥çåé,å½åç¨æ·çæé,slaveä¿¡æ¯,çæ¬ä¿¡æ¯ç
2ãæ£æ¥sbtest1æ¯å¦åå¨è§¦åå¨
3ãæ§è¡è®¡å
4ãæ£æ¥sbtest1æ¯å¦åå¨å¤é®å
³è
ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼
USE `test`
SHOW CREATE TABLE `test`.`sbtest1`
/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, @@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */
CREATE TABLE `test`.`_sbtest1_new` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`k` int(11) NOT NULL DEFAULT '0',
`c` char(120) NOT NULL DEFAULT '',
`pad` char(60) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `k_1` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=500001 DEFAULT CHARSET=latin1
ALTER TABLE `test`.`_sbtest1_new` add index index_c (c)
/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, @@SQL_MODE := '', @OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, @@SQL_QUOTE_SHOW_CREATE := 1 */
USE `test`
SHOW CREATE TABLE `test`.`_sbtest1_new`
/*!40101 SET @@SQL_MODE := @OLD_SQL_MODE, @@SQL_QUOTE_SHOW_CREATE := @OLD_QUOTE */
SELECT TRIGGER_SCHEMA, TRIGGER_NAME, DEFINER, ACTION_STATEMENT, SQL_MODE, CHARACTER_SET_CLIENT, COLLATION_CONNECTION, EVENT_MANIPULATION, ACTION_TIMING FROM INFORMATION_SCHEMA.TRIGGERS WHERE EVENT_MANIPULATION = 'DELETE' AND ACTION_TIMING = 'AFTER' AND TRIGGER_SCHEMA = 'test' AND EVENT_OBJECT_TABLE = 'sbtest1'
SELECT TRIGGER_SCHEMA, TRIGGER_NAME, DEFINER, ACTION_STATEMENT, SQL_MODE, CHARACTER_SET_CLIENT, COLLATION_CONNECTION, EVENT_MANIPULATION, ACTION_TIMING FROM INFORMATION_SCHEMA.TRIGGERS WHERE EVENT_MANIPULATION = 'UPDATE' AND ACTION_TIMING = 'AFTER' AND TRIGGER_SCHEMA = 'test' AND EVENT_OBJECT_TABLE = 'sbtest1'
SELECT TRIGGER_SCHEMA, TRIGGER_NAME, DEFINER, ACTION_STATEMENT, SQL_MODE, CHARACTER_SET_CLIENT, COLLATION_CONNECTION, EVENT_MANIPULATION, ACTION_TIMING FROM INFORMATION_SCHEMA.TRIGGERS WHERE EVENT_MANIPULATION = 'INSERT' AND ACTION_TIMING = 'AFTER' AND TRIGGER_SCHEMA = 'test' AND EVENT_OBJECT_TABLE = 'sbtest1'
SELECT TRIGGER_SCHEMA, TRIGGER_NAME, DEFINER, ACTION_STATEMENT, SQL_MODE, CHARACTER_SET_CLIENT, COLLATION_CONNECTION, EVENT_MANIPULATION, ACTION_TIMING FROM INFORMATION_SCHEMA.TRIGGERS WHERE EVENT_MANIPULATION = 'DELETE' AND ACTION_TIMING = 'BEFORE' AND TRIGGER_SCHEMA = 'test' AND EVENT_OBJECT_TABLE = 'sbtest1'
SELECT TRIGGER_SCHEMA, TRIGGER_NAME, DEFINER, ACTION_STATEMENT, SQL_MODE, CHARACTER_SET_CLIENT, COLLATION_CONNECTION, EVENT_MANIPULATION, ACTION_TIMING FROM INFORMATION_SCHEMA.TRIGGERS WHERE EVENT_MANIPULATION = 'UPDATE' AND ACTION_TIMING = 'BEFORE' AND TRIGGER_SCHEMA = 'test' AND EVENT_OBJECT_TABLE = 'sbtest1'
SELECT TRIGGER_SCHEMA, TRIGGER_NAME, DEFINER, ACTION_STATEMENT, SQL_MODE, CHARACTER_SET_CLIENT, COLLATION_CONNECTION, EVENT_MANIPULATION, ACTION_TIMING FROM INFORMATION_SCHEMA.TRIGGERS WHERE EVENT_MANIPULATION = 'INSERT' AND ACTION_TIMING = 'BEFORE' AND TRIGGER_SCHEMA = 'test' AND EVENT_OBJECT_TABLE = 'sbtest1'
CREATE TRIGGER `pt_osc_test_sbtest1_del` AFTER DELETE ON `test`.`sbtest1` FOR EACH ROW DELETE IGNORE FROM `test`.`_sbtest1_new` WHERE `test`.`_sbtest1_new`.`id` <=> OLD.`id`
CREATE TRIGGER `pt_osc_test_sbtest1_upd` AFTER UPDATE ON `test`.`sbtest1` FOR EACH ROW BEGIN DELETE IGNORE FROM `test`.`_sbtest1_new` WHERE !(OLD.`id` <=> NEW.`id`) AND `test`.`_sbtest1_new`.`id` <=> OLD.`id`;REPLACE INTO `test`.`_sbtest1_new` (`id`, `k`, `c`, `pad`) VALUES (NEW.`id`, NEW.`k`, NEW.`c`, NEW.`pad`);END
CREATE TRIGGER `pt_osc_test_sbtest1_ins` AFTER INSERT ON `test`.`sbtest1` FOR EACH ROW REPLACE INTO `test`.`_sbtest1_new` (`id`, `k`, `c`, `pad`) VALUES (NEW.`id`, NEW.`k`, NEW.`c`, NEW.`pad`)
说æï¼
1ãæ ¹æ®å表ç表ç»æç»å建ä¸å¼ æ°è¡¨
2ã对æ°è¡¨ä¸çcå段å ç´¢å¼,è¿éä¾ç¶ç¨çæ¯alter
3ãæ£æ¥å表ä¸è§¦åå¨æ
åµ,5.6å¼å§åä¸å¼ 表ä¸ä¸è½åå¨åä¸ä¸ªå¨ä½ç触åå¨
4ãé对æ°è¡¨å建ä¸ä¸ªè§¦åå¨,DELETE,UPDATEåINSERT(éç¹çä¸ä¸ä¸ªè§¦åå¨å
容)
ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼
EXPLAIN SELECT * FROM `test`.