站内搜索: 请输入搜索关键词
当前页面: 在线文档首页 > MySQL 5.1参考手册中文版

Appendix聽I.聽Feature Restrictions - MySQL 5.1参考手册中文版

闄勫綍I锛氱壒鎬ч檺鍒

鍦ㄦ湰闄勫綍涓紝浠嬬粛浜嗕娇鐢ㄨ濡傚瓙鏌ヨ鎴栬鍥剧瓑MySQL鐗规ф椂瀛樺湪鐨勯檺鍒躲

I.1. 瀵瑰瓨鍌ㄥ瓙绋嬪簭鍜岃Е鍙戠▼搴忕殑闄愬埗

杩欓噷浠嬬粛鐨勬煇浜涢檺鍒堕傜敤浜庢墍鏈夌殑瀛樺偍瀛愮▼搴忥紝鍗冲瓨鍌ㄧ▼搴忓拰瀛樺偍鍑芥暟銆傛煇浜涢檺鍒朵粎閫傜敤浜庡瓨鍌ㄥ嚱鏁拌屼笉鏄瓨鍌ㄧ▼搴忋

瀵瑰瓨鍌ㄥ嚱鏁扮殑鐨勬墍鏈夐檺鍒朵篃閫傜敤浜庤Е鍙戠▼搴忋

娉ㄩ噴锛濡傛灉SQL璇彞锛屽SELECT ... INTO璇彞鍖呭惈鍏锋湁鐩稿悓鍚嶇О鐨瀵瑰垪鐨勫紩鐢浠ュ強澹版槑鐨勫眬閮ㄥ彉閲忥紝MySQL浼氬皢寮曠敤瑙i噴涓哄彉閲忕殑鍚嶇О銆傝繖鏄竴绉嶉潪鏍囧噯鐨勮涓猴紝浼樺厛椤哄簭閫氬父鏄垪鍚嶃佺劧鍚庢槸SQL鍙橀噺鍜屽弬鏁般傝鍙傝20.2.9.3鑺傦紝鈥淪ELECT ... INTO璇彞鈥

瀛樺偍瀛愮▼搴忎笉鑳藉寘鍚换鎰SQL璇彞銆傚湪瀛樺偍瀛愮▼搴忎腑锛岀姝娇鐢ㄤ笅杩拌鍙ワ細

         CHECK TABLES

         LOCK TABLES, UNLOCK TABLES

         LOAD DATA, LOAD TABLE

         SQL棰勫鐞嗚鍙ワ紙PREPAREEXECUTEDEALLOCATE PREPARE锛夈傞殣鍚剰涔夛細涓嶈兘鍦ㄥ瓨鍌ㄥ瓙绋嬪簭涓娇鐢ㄥ姩鎬SQL璇彞锛堝叾涓紝鑳藉浠ュ瓧绗︿覆褰㈠紡鏋勯犲姩鎬佽鍙ワ紝鐒跺悗鎵ц瀹冧滑锛夈備粠MySQL 5.0.13寮濮嬶紝瀵逛簬瀛樺偍绋嬪簭鏀惧浜嗚闄愬埗锛屼絾璇ラ檺鍒朵粛閫傜敤浜庡瓨鍌ㄥ嚱鏁板拰瑙﹀彂绋嬪簭銆

         OPTIMIZE TABLE

瀵逛簬瀛樺偍鍑芥暟锛堣屼笉鏄瓨鍌ㄧ▼搴忥級锛岀姝笅杩伴澶栬鍙ワ細

         鎵ц鏄惧紡鎴栭殣寮忔彁浜ゆ垨鍥炴粴鎿嶄綔鐨勮鍙ャ

         杩斿洖缁撴灉闆嗙殑璇彞銆傚寘鎷病鏈INFO瀛愬彞鐨SELECT璇彞锛屼互鍙SHOW璇彞銆傝兘澶熺敤SELECT 鈥 INTO锛屾垨浣跨敤鍏夋爣鍜FETCH璇彞澶勭悊缁撴灉闆嗙殑鍑芥暟銆

         FLUSH璇彞銆傛敞鎰忥紝灏界鑳藉鍦ㄥ瓨鍌ㄧ▼搴忎腑浣跨敤FLUSH锛屼絾涓嶈兘浠庡瓨鍌ㄥ嚱鏁版垨瑙﹀彂绋嬪簭璋冪敤杩欑被瀛樺偍绋嬪簭銆

娉ㄦ剰锛屽敖绠℃煇浜涢檺鍒跺湪姝e父鎯呭喌涓嬮傜敤浜庡瓨鍌ㄥ嚱鏁板拰瑙﹀彂绋嬪簭锛屼笉閫傜敤浜庡瓨鍌ㄧ▼搴忥紝濡傛灉瀹冧滑鏄粠瀛樺偍鍑芥暟鎴栬Е鍙戠▼搴忎腑璋冪敤鐨勶紝杩欎簺闄愬埗涔熼傜敤浜庡瓨鍌ㄧ▼搴忋

浣跨敤瀛樺偍瀛愮▼搴忎細瀵艰嚧澶嶅埗闂銆傚叧浜庤繖鏂归潰鐨勮繘涓姝ヨ璁猴紝璇峰弬瑙20.4鑺傦紝鈥滃瓨鍌ㄥ瓙绋嬪簭鍜岃Е鍙戠▼搴忕殑浜岃繘鍒舵棩蹇楀姛鑳解

INFORMATION_SCHEMA灏氫笉鍖呭惈PARAMETERS琛紝鍥犳锛屽浜庨渶瑕佸湪杩愯鏃惰幏鍙栧瓙绋嬪簭鍙傛暟淇℃伅鐨勫簲鐢ㄧ▼搴忔潵璇达紝蹇呴』閲囩敤鐩稿簲鐨勮閬块敊璇紝濡傝В鏋SHOW CREATE璇彞鐨勮緭鍑恒

娌℃湁瀛樺偍瀛愮▼搴忚皟璇曞伐鍏枫

瀛樺偍瀛愮▼搴忎娇鐢ㄤ簡鍏蜂綋鍖栫殑鍏夋爣锛岃屼笉鏄浐鏈夊厜鏍囷紙鍦ㄦ湇鍔″櫒绔敓鎴愮粨鏋滈泦骞跺缁撴灉闆嗚繘琛岄珮閫熺紦鍐插鐞嗭紝鐒跺悗鍦ㄥ鎴风鑾峰彇缁撴灉闆嗘椂鎸夎杩斿洖锛夈

涓嶈兘鎻愬墠澶勭悊CALL璇彞銆傛棤璁烘槸瀵规湇鍔″櫒绔澶勭悊璇彞杩樻槸SQL棰勫鐞嗚鍙ワ紝鍧囨垚绔嬨

涓轰簡闃叉鏈嶅姟鍣ㄧ嚎绋嬮棿鐨勪氦浜掗棶棰橈紝褰撳鎴风鍙戝嚭璇彞鏃讹紝鏈嶅姟鍣ㄥ皢浣跨敤鍙敤鐨勩佺敤浜庤鍙ユ墽琛岀殑瀛愮▼搴忓拰瑙﹀彂绋嬪簭蹇収銆備篃灏辨槸璇达紝鏈嶅姟鍣ㄥ皢璁$畻鍑哄彲鍦ㄨ鍙ユ墽琛屾湡闂翠娇鐢ㄧ殑瀛樺偍绋嬪簭銆佸嚱鏁板拰瑙﹀彂绋嬪簭鐨勫垪琛紝鍔犺浇瀹冧滑锛岀劧鍚庤繘鍏ヨ鍙ユ墽琛屻傝繖鎰忓懗鐫锛屽湪璇彞鎵ц鐨勫悓鏃讹紝瀹冧笉浼氱湅鍒板叾浠栫嚎绋嬪瀛愮▼搴忔墍浣滅殑鍙樻洿銆

I.2. 瀵规湇鍔″櫒绔厜鏍囩殑闄愬埗

MySQL 5.0.2寮濮嬶紝閫氳繃mysql_stmt_attr_set() C API鍑芥暟瀹炵幇浜嗘湇鍔″櫒绔厜鏍囥傛湇鍔″櫒绔厜鏍囧厑璁稿湪鏈嶅姟鍣ㄧ鐢熸垚缁撴灉闆嗭紝浣嗕笉浼氬皢鍏朵紶杈撳埌瀹㈡埛绔紝闄ら潪瀹㈡埛绔姹傝繖浜涜銆備緥濡傦紝濡傛灉瀹㈡埛绔墽琛屼簡鏌ヨ锛屼絾浠呭绗1琛屾劅鍏磋叮锛岄偅涔堜笉浼氫紶杈撳墿浣欑殑琛屻

鍏夋爣鏄彧璇荤殑锛屼笉鑳戒娇鐢ㄥ厜鏍囨潵鏇存柊琛屻

鏈疄鏂UPDATE WHERE CURRENT OFDELETE WHERE CURRENT OF锛岃繖鏄洜涓轰笉鏀寔鍙洿鏂扮殑鍏夋爣銆

鍏夋爣鏄笉鍙繚鎸佺殑锛堟彁浜ゅ悗涓嶅啀淇濇寔鎵撳紑锛夈

鍏夋爣鏄笉鏁忔劅鐨勩

鍏夋爣鏄笉鍙粴鍔ㄧ殑銆

鍏夋爣鏄湭鍛藉悕鐨勩傝鍙ュ鐞嗙▼搴忚捣鐫鍏夋爣ID鐨勪綔鐢ㄣ

瀵逛簬姣忔潯棰勫鐞嗚鍙ワ紝浠呰兘鎵撳紑1涓厜鏍囥傚鏋滈渶瑕佸涓厜鏍囷紝蹇呴』澶勭悊澶氭潯璇彞銆

濡傛灉鍦ㄩ澶勭悊妯″紡涓嬩笉鏀寔璇彞锛屼笉鑳藉湪鐢熸垚缁撴灉闆嗙殑璇彞涓婁娇鐢ㄥ厜鏍囥傚寘鎷CHECK TABLESHANDLER READSHOW BINLOG EVENTS璇彞銆

I.3. 瀵瑰瓙鏌ヨ鐨勯檺鍒

闅忓悗灏嗘洿姝g殑涓鑷寸己闄凤細濡傛灉灏NULL鍊间笌浣跨敤ALLANYSOME鐨勫瓙鏌ヨ杩涜姣旇緝锛岃屼笖瀛愭煡璇㈣繑鍥炵┖缁撴灉锛屾瘮杈冩搷浣滃皢瀵NULL鐨勯潪鏍囧噯缁撴灉杩涜璇勪及锛岃屼笉鏄TRUEFALSE

瀛愭煡璇㈢殑澶栭儴璇彞鍙互鏄SELECTINSERTUPDATEDELETESETDO涓殑浠讳綍涓涓

浠呴儴鍒嗘敮鎸佽姣旇緝鎿嶄綔锛

         瀵逛簬expr IN (subquery)expr鍙互鏄n-tuple锛堥氳繃琛屾瀯閫犵▼搴忚娉曟寚瀹氾級锛岃屼笖瀛愭煡璇㈣兘杩斿洖n-tuples涓銆

         瀵逛簬expr op {ALL|ANY|SOME} (subquery)expr蹇呴』鏄爣搴﹀硷紝瀛愭煡璇㈠繀椤绘槸鍒楀瓙鏌ヨ锛屼笉鑳借繑鍥炲鍒楄銆

鎹㈠彞璇濊锛屽浜庤繑鍥n-tuples琛岀殑瀛愭煡璇紝鏀寔锛

(val_1, ..., val_n) IN (subquery)

浣嗕笉鏀寔锛

(val_1, ..., val_n) op {ALL|ANY|SOME} (subquery)

鏀寔閽堝IN鐨勮姣旇緝锛屼絾涓嶆敮鎸侀拡瀵瑰叾浠栫殑琛屾瘮杈冿紝鍘熷洜鍦ㄤ簬锛IN瀹炴柦鏄氳繃灏嗗叾閲嶆柊缂栧啓涓衡=鈥濇瘮杈冨拰AND鎿嶄綔鐨勫簭鍒楀畬鎴愮殑銆傝鏂规硶涓嶈兘鐢ㄤ簬ALLANYSOME

鏈壇濂戒紭鍖栬鏋勯犵▼搴忋備笅闈㈢殑涓や釜琛ㄨ揪寮忔槸绛夋晥鐨勶紝浣嗗彧鏈夌2涓〃杈惧紡鑳借浼樺寲锛

(col1, col2, ...) = (val1, val2, ...)
col1 = val1 AND col2 = val2 AND ...

瀵逛簬IN鐨勫瓙鏌ヨ浼樺寲涓嶅瀵光=鈥濈殑浼樺寲閭f牱鏈夋晥銆

瀵逛簬涓嶈壇IN鎬ц兘鐨勪竴绉嶅吀鍨嬫儏鍐垫槸锛屽綋瀛愭煡璇㈣繑鍥炲皯閲忚锛屼絾澶栭儴鏌ヨ杩斿洖灏嗕笌瀛愭煡璇㈢粨鏋滅浉姣旇緝鐨勫ぇ閲忚銆

FROM瀛愬彞涓殑瀛愭煡璇笉鑳戒笌瀛愭煡璇鏈夊叧绯汇傚湪璇勪及澶栭儴鏌ヨ涔嬪墠锛屽皢瀵瑰畠浠繘琛屽叿浣撳寲澶勭悊锛堟墽琛屼互鐢熸垚缁撴灉闆嗭級锛屽洜姝わ紝涓嶈兘鎸夌収澶栭儴鏌ヨ鐨勮瀵瑰畠浠繘琛岃瘎浼般

涓鑸岃█锛屼笉鑳芥洿鏀硅〃锛屽苟浠庡瓙鏌ヨ鍐呯殑鐩稿悓琛ㄨ繘琛岄夋嫨銆備緥濡傦紝璇ラ檺鍒堕傜敤浜庡叿鏈変笅杩板舰寮忕殑璇彞锛

DELETE FROM t WHERE ... (SELECT ... FROM t ...);
UPDATE t ... WHERE col = (SELECT ... FROM t ...);
{INSERT|REPLACE} INTO t (SELECT ... FROM t ...);

渚嬪锛氬鏋滀负FROM瀛愬彞涓洿鏀圭殑琛ㄤ娇鐢ㄥ瓙鏌ヨ锛屽墠杩扮浠ゅ皢涓嶅啀閫傜敤銆備緥濡傦細

UPDATE t ... WHERE col = (SELECT (SELECT ... FROM t...) AS _t ...);

绂佷护鍦ㄦ涓嶉傜敤锛岃繖鏄洜涓FROM涓殑瀛愭煡璇㈠凡琚叿浣撳寲涓轰复鏃惰〃锛屽洜姝もt鈥濅腑鐨勭浉鍏宠宸插湪婊¤冻鈥t鈥濇潯浠剁殑鎯呭喌涓嬨佸湪鏇存柊鏃惰閫変腑銆

涓庡瓙鏌ヨ鐩告瘮锛岄拡瀵硅仈鍚堢殑浼樺寲绋嬪簭鏇存垚鐔燂紝鍥犳锛屽湪寰堝鎯呭喌涓嬶紝濡傛灉灏嗗叾鏀瑰啓涓join锛堣仈鍚堬級锛屼娇鐢ㄥ瓙鏌ヨ鐨勮鍙ヨ兘澶熸洿鏈夋晥鍦版墽琛屻

浣嗕笅杩版儏褰緥澶栵細IN瀛愭煡璇㈠彲琚敼鍐SELECT DISTINCT鑱斿悎銆備緥濡傦細

SELECT col FROM t1 WHERE id_col IN (SELECT id_col2 FROM t2 WHERE condition);

鍙皢璇ヨ鍙ユ敼鍐欎负锛

SELECT DISTINCT col FROM t1, t2 WHERE t1.id_col = t2.id_col AND condition;

浣嗗湪璇ユ儏鍐典笅锛岃仈鍚堥渶瑕侀澶栫殑DISTINCT鎿嶄綔锛岃屼笖涓庡瓙鏌ヨ鐩告瘮锛屾晥鐜囧苟涓嶉珮銆

鍙兘鐨勬湭鏉ヤ紭鍖栵細MySQL涓嶆敼鍐欓拡瀵瑰瓙鏌ヨ璇勪及鐨勮仈鍚堥『搴忋傚湪鏌愪簺鎯呭喌涓嬶紝濡傛灉MySQL灏嗗叾鏀瑰啓涓鸿仈鍚堬紝鑳藉鏇存湁鏁堝湴鎵ц瀛愭煡璇€傝繖鏍凤紝浼樺寲绋嬪簭灏辫兘鍦ㄦ洿澶氱殑鎵ц鏂规闂磋繘琛岄夋嫨銆備緥濡傦紝瀹冭兘鍐冲畾鏄惁棣栧厛璇诲彇鏌愪竴琛ㄦ垨鍏朵粬銆

渚嬪锛

SELECT a FROM outer_table AS ot
WHERE a IN (SELECT a FROM inner_table AS it WHERE ot.b = it.b);

瀵逛簬璇ユ煡璇紝MySQL鎬讳細棣栧厛鎵弿outer_table锛屽鐒跺悗閽堝姣忎竴琛屽湪inner_table涓婃墽琛屽瓙鏌ヨ銆濡傛灉outer_table鏈夊緢澶氳鑰inner_table鍙湁灏戦噺琛岋紝鏌ヨ鐨勬墽琛岄熷害鎴栬瑕佹參浜庢湰搴旀湁鐨勯熷害銆

鍓嶈堪鏌ヨ鍙敼鍐欎负锛

SELECT a FROM outer_table AS ot, inner_table AS it
WHERE ot.a = it.a AND ot.b = it.b;

鍦ㄨ鎯呭喌涓嬶紝鎴戜滑鑳芥壂鎻忓皬鐨勮〃锛inner_table锛夊苟鏌ヨouter_table涓殑琛岋紝濡傛灉鍦鈥渙t.a,ot.b鈥涓婃湁绱㈠紩锛岄熷害浼氭洿蹇

鍙兘鐨勬湭鏉ヤ紭鍖栵細瀵瑰閮ㄦ煡璇㈢殑姣忎竴琛岃瘎浼板叧鑱旂殑瀛愭煡璇€傛洿濂界殑鏂规硶鏄紝濡傛灉澶栭儴琛岀殑鍊间笌涔嬪墠鐨勮鐩告瘮娌℃湁鍙樺寲锛屼笉瀵瑰瓙鏌ヨ杩涜鍐嶆璇勪及锛岃屾槸浣跨敤浠ュ墠鐨勭粨鏋溿

鍙兘鐨勬湭鏉ヤ紭鍖栵細閫氳繃灏嗙粨鏋滃叿浣撳寲鍒颁复鏃惰〃锛岃屼笖璇ヨ〃涓嶄娇鐢ㄧ储寮曪紝瀵FROM瀛愬彞涓殑瀛愭煡璇㈣繘琛岃瘎浼般傚湪鏌ヨ涓笌鍏朵粬琛ㄨ繘琛屾瘮杈冩椂锛屽敖绠″彲鑳芥槸鏈夌敤鐨勶紝浣嗕笉鍏佽浣跨敤绱㈠紩銆

鍙兘鐨勬湭鏉ヤ紭鍖栵細濡傛灉FROM瀛愬彞涓殑瀛愭煡璇㈢被浼间簬鍙柦鍔MERGE绠楁硶鐨勮鍥撅紝鏀瑰啓鏌ヨ骞堕噰鐢MERGE绠楁硶锛屼互渚胯兘澶熶娇鐢ㄧ储寮曘備笅杩拌鍙ュ寘鍚繖绫诲瓙鏌ヨ锛

SELECT * FROM (SELECT * FROM t1 WHERE t1.t1_col) AS _t1, t2 WHERE t2.t2_col;

璇ヨ鍙ュ彲琚敼鍐欎负鑱斿悎锛屽涓嬫墍绀猴細

SELECT * FROM t1, t2 WHERE t1.t1_col AND t2.t2_col;

杩欑被鏀瑰啓鍏锋湁涓や釜浼樼偣锛

1.    閬垮厤浣跨敤閭d簺涓嶈兘浣跨敤绱㈠紩鐨勪复鏃惰〃銆傚湪鏀瑰啓鐨勬煡璇腑锛屼紭鍖栫▼搴忓彲鍦t1涓婁娇鐢ㄧ储寮曘

2.    浼樺寲绋嬪簭鍦ㄩ夋嫨涓嶅悓鐨勬墽琛岃鍒掓柟闈㈠叿鏈夋洿澶х殑鑷敱銆備緥濡傦紝灏嗘煡璇㈡敼鍐欎负鑱斿悎锛岄偅涔堝氨鍏佽浼樺寲绋嬪簭棣栧厛浣跨敤t1t2

鍙兘鐨勬湭鏉ヤ紭鍖栵細瀵逛簬娌℃湁鍏宠仈瀛愭煡璇㈢殑IN= ANY<> ANY= ALL銆佷互鍙<> ALL锛屼负缁撴灉浣跨敤鍐呭瓨涓鍝堝笇澶勭悊锛屾垨瀵硅緝澶х殑缁撴灉浣跨敤鍏锋湁绱㈠紩鐨勪复鏃惰〃銆備緥濡傦細

SELECT a FROM big_table AS bt
WHERE non_key_field IN (SELECT non_key_field FROM table WHERE condition)

鍦ㄨ鎯呭喌涓嬶紝鍙垱寤轰复鏃惰〃锛

CREATE TABLE t (key (non_key_field))
(SELECT non_key_field FROM table WHERE condition)

鐒跺悗锛屽big_table涓殑姣忎竴琛岋紝鏍规嵁bt.non_key_field锛屽湪鈥渢鈥涓繘琛岄敭鏌ユ壘銆

I.4. 瀵硅鍥剧殑闄愬埗

瑙嗗浘澶勭悊鍔熻兘姒傚康鏈紭鍖栵細

         涓嶈兘鍦ㄨ鍥句笂鍒涘缓绱㈠紩銆

         瀵逛簬浣跨敤MERGE绠楁硶澶勭悊鐨勮鍥撅紝鍙互浣跨敤绱㈠紩銆備絾鏄紝瀵逛簬浣跨敤涓存椂琛ㄧ畻娉曞鐞嗙殑瑙嗗浘锛屼笉鑳藉湪鍏跺熀琛ㄤ笂鍒╃敤绱㈠紩鎻愪緵鐨勪紭鐐癸紙灏界鑳藉鍦ㄤ复鏃惰〃鐨勭敓鎴愯繃绋嬩腑浣跨敤绱㈠紩锛夈

鍦ㄨ鍥剧殑FROM瀛愬彞涓笉鑳戒娇鐢ㄥ瓙鏌ヨ銆傛湭鏉ヨ闄愬埗灏嗚鏀惧銆

瀛樺湪涓涓竴鑸師鍒欙紝涓嶈兘鏇存敼鏌愪竴琛ㄥ苟鍦ㄥ瓙鏌ヨ鐨勭浉鍚岃〃鍐呰繘琛岄夋嫨銆傝鍙傝I.3鑺傦紝鈥滃瀛愭煡璇㈢殑闄愬埗鈥

濡傛灉浠庤〃閫夋嫨浜嗚鍥惧苟鎺ョ潃浠庤鍥捐繘琛屼簡閫夋嫨锛屽悓鏍风殑鍘熺悊涔熼傜敤锛屽鏋滃湪瀛愭煡璇腑浠庤〃閫夋嫨浜嗚鍥惧苟浣跨敤MERGE绠楁硶璇勪及浜嗚鍥撅紝涔熷悓鏍枫備緥濡傦細

CREATE VIEW v1 AS
SELECT * FROM t2 WHERE EXISTS (SELECT 1 FROM t1 WHERE t1.a = t2.a);
 
UPDATE t1, v2 SET t1.a = 1 WHERE t1.b = v2.b;

濡傛灉瑙嗗浘鏄娇鐢ㄤ复鏃惰〃璇勪及鐨勶紝鍙粠瑙嗗浘瀛愭煡璇腑鐨勮〃杩涜閫夋嫨锛屽苟浠嶈兘鏇存敼澶栭儴鏌ヨ涓殑琛ㄣ傚湪璇ユ儏鍐典笅锛岃鍥惧皢琚叿浣撳寲锛屽洜姝わ紝浣犲疄闄呬笂涓嶈兘浠庡瓙鏌ヨ鐨勮〃涓繘琛岄夋嫨骞垛滃悓鏃垛濇洿鏀瑰畠锛堣繖鏄綘鎵撶畻寮哄埗MySQL浣跨敤涓存椂琛ㄧ畻娉曠殑鍙︿竴鍘熷洜锛屽叾鏂规硶鏄湪瑙嗗浘瀹氫箟涓寚瀹ALGORITHM = TEMPTABLE鍏抽敭瀛锛夈

鍙互浣跨敤DROP TABLEALTER TABLE鏉ヨ垗寮冩垨鏇存敼瑙嗗浘瀹氫箟涓娇鐢ㄧ殑琛紙瀹冧細鏄鍥惧け鏁堬級锛岃屼笖鑸嶅純鎴栨洿鏀规搷浣滀笉浼氬鑷村憡璀︺浣嗗湪浠ュ悗浣跨敤瑙嗗浘鏃朵細鍑洪敊銆

瑙嗗浘瀹氫箟鏄氳繃鐗瑰畾璇彞鈥滃喕缁撯濈殑锛

         濡傛灉PREPARE棰勫鐞嗙殑璇彞寮曠敤浜嗚鍥撅紝浠ュ悗姣忔鎵ц璇彞鏃剁湅鍒扮殑瑙嗗浘鍐呭涓庨澶勭悊瑙嗗浘鏃剁殑鍐呭鐩稿悓銆傚嵆浣垮湪璇彞棰勫鐞嗗畬鎴愪箣鍚庛佸湪鎵ц璇彞涔嬪墠鏇存敼浜嗚鍥惧畾涔夛紝鎯呭喌涔熷悓鏍枫備緥濡傦細

                CREATE VIEW v AS SELECT 1;
                PREPARE s FROM 'SELECT * FROM v';
                ALTER VIEW v AS SELECT 2;
                EXECUTE s;

EXECUTE璇彞杩斿洖鐨勭粨鏋滄槸1锛岃屼笉鏄2

         濡傛灉瀛樺偍瀛愮▼搴忎腑鐨勮鍙ュ紩鐢ㄤ簡瑙嗗浘锛岃鍙ユ墍瑙佸埌鐨勮鍥惧唴瀹逛笌棣栨鎵ц璇彞鏃剁殑鐩稿悓銆傝繖鎰忓懗鐫锛屽鏋滆鍙ユ槸浠ュ惊鐜柟寮忔墽琛岀殑锛岃繘涓姝ョ殑璇彞杩唬瑙佸埌鐨勮鍥惧唴瀹规槸鐩稿悓鐨勶紝鍗充娇鍦ㄥ惊鐜繃绋嬩腑鏇存敼浜嗚鍥惧畾涔変篃鍚屾牱銆備緥濡傦細

                CREATE VIEW v AS SELECT 1;
                delimiter //
                CREATE PROCEDURE p ()
                BEGIN
                  DECLARE i INT DEFAULT 0;
                  WHILE i < 5 DO
                    SELECT * FROM v;
                    SET i = i + 1;
                    ALTER VIEW v AS SELECT 2;
                  END WHILE;
                END;
                //
                delimiter ;
                CALL p();

濡傛灉璋冪敤浜嗙▼搴p()锛屾瘡娆¢氳繃寰幆鏃SELECT杩斿洖1锛屽嵆浣垮湪寰幆鍐呮洿鏀逛簡瑙嗗浘瀹氫箟涔熷悓鏍枫

鍏充簬瑙嗗浘鐨勫彲鏇存柊鎬э紝瀵逛簬瑙嗗浘锛屽叾鎬讳綋鐩爣鏄紝濡傛灉浠讳綍瑙嗗浘浠庣悊璁轰笂璁叉槸鍙洿鏂扮殑锛屽湪瀹為檯涓婁篃搴旀槸鍙洿鏂扮殑銆傝繖鍖呮嫭鍦ㄥ叾瀹氫箟涓湁UNION鐨勮鍥俱傜洰鍓嶏紝骞堕潪鎵鏈夌悊璁轰笂鍙洿鏂扮殑瑙嗗浘鍧囪兘琚洿鏂般傛渶鍒濈殑瑙嗗浘瀹炴柦鏈夋剰閲囩敤璇ユ柟寮忥紝涓虹殑鏄敖蹇湴鍦MySQL涓幏寰楁湁鐢ㄧ殑鍙洿鏂拌鍥俱傚緢澶氱悊璁轰笂鍙洿鏂扮殑瑙嗗浘鐜板凡鑳芥洿鏂帮紝浣嗛檺鍒朵緷鐒跺瓨鍦細

         鍏跺瓙鏌ヨ浣嶄簬WHERE瀛愬彞涔嬪浠讳綍浣嶇疆鐨勫彲鏇存柊瑙嗗浘銆傚浜庢煇浜涘叾瀛愭煡璇綅浜SELECT鍒楄〃涓殑瑙嗗浘锛屼篃鏄彲鏇存柊鐨勩

         涓嶈兘浣跨敤UPDATE鏉ユ洿鏂板畾涔変负Join鐨勮鍥剧殑1涓互涓婄殑鍩鸿〃銆

         涓嶈兘浣跨敤DELETE鏉ユ洿鏂板畾涔変负Join鐨勮鍥俱

I.5. 瀵筙A浜嬪姟鐨勯檺鍒

XA浜嬪姟鏀寔闄愪簬InnoDB瀛樺偍寮曟搸銆

MySQL XA瀹炴柦鏄拡瀵瑰閮XA鐨勶紝鍏朵腑锛MySQL鏈嶅姟鍣ㄤ綔涓鸿祫婧愮鐞嗗櫒锛岃屽鎴风绋嬪簭浣滀负浜嬪姟绠$悊鍣ㄣ傛湭瀹炴柦鈥鍐呴儴XA鈥濄傝繖鏍凤紝灏卞厑璁MySQL鏈嶅姟鍣ㄥ唴鐨勫崟鐙瓨鍌ㄥ紩鎿庝綔涓RM锛堣祫婧愮鐞嗗櫒锛夛紝鑰屾湇鍔″櫒鏈韩浣滀负TM锛堜簨鍔$鐞嗗櫒锛夈傚鐞嗗寘鍚1涓互涓婂瓨鍌ㄥ紩鎿庣殑XA浜嬪姟鏃讹紝闇瑕佸唴閮XA銆傚唴閮XA鐨勫疄鏂芥槸涓嶅畬鏁寸殑锛岃繖鏄洜涓猴紝瀹冭姹傚瓨鍌ㄥ紩鎿庡湪琛ㄥ鐞嗙▼搴忓眰闈笂鏀寔涓ら樁娈垫彁浜わ紝鐩墠浠呭InnoDB瀹炵幇浜嗚鐗规с

瀵逛簬XA START锛屼笉鏀寔JOINRESUME瀛愬彞銆

瀵逛簬XA END锛屼笉鏀寔SUSPEND [FOR MIGRATE]瀛愬彞銆

鍦ㄥ叏灞浜嬪姟鍐咃紝瀵逛簬姣忎釜XA浜嬪姟锛xid鍊肩殑bqual閮ㄥ垎搴旀槸涓嶅悓鐨勶紝璇ヨ姹傛槸瀵瑰綋鍓MySQL XA瀹炴柦鐨勯檺鍒躲傚畠涓嶆槸XA瑙勮寖鐨勭粍鎴愰儴鍒嗐

濡傛灉XA浜嬪姟杈惧埌PREPARED鐘舵佽屼笖MySQL鏈嶅姟鍣ㄥ畷鏈猴紝褰撴湇鍔″櫒閲嶅惎鍚庯紝鑳藉缁х画澶勭悊浜嬪姟銆傚氨鍍忓師鏈簲褰撶殑閭f牱銆備絾鏄紝濡傛灉瀹㈡埛绔繛鎺ヤ腑姝㈣屾湇鍔″櫒缁х画杩愯锛屾湇鍔″櫒灏嗗洖婊氫换浣曟湭瀹屾垚鐨XA浜嬪姟锛屽嵆浣胯浜嬪姟宸茶揪鍒PREPARED鐘舵佷篃鍚屾牱銆傚畠搴旇兘鎻愪氦鎴栧洖婊PREPARED XA浜嬪姟锛屼絾鍦ㄤ笉鏇存敼浜岃繘鍒舵棩蹇楁満鍒剁殑鎯呭喌涓嬩笉鑳借繖鏍枫


杩欐槸MySQL鍙傝冩墜鍐岀殑缈昏瘧鐗堟湰锛屽叧浜嶮ySQL鍙傝冩墜鍐岋紝璇疯闂dev.mysql.com銆傚師濮嬪弬鑰冩墜鍐屼负鑻辨枃鐗堬紝涓庤嫳鏂囩増鍙傝冩墜鍐岀浉姣旓紝鏈炕璇戠増鍙兘涓嶆槸鏈鏂扮殑銆