;
帖子
3919 
精华
积分
11710 
鱼币
0 ¥ 
来自
大连 
在线时间
1858 小时 
注册时间
2007-6-11 
最后登录
2009-10-20 

贴图大师勋章新人进步勋章宣传大使勋章论坛元老勋章

3
发表于 2009-1-5 19:48 | 只看该作者
Mysql寮鍙戜腑鐨勫閿笌鍙傜収瀹屾暣鎬 - 缂栫▼搴 - Powered by SupeSite

浣犵殑浣嶇疆锛缂栫▼搴 >> 璧勮 >> MySQL >> 浣跨敤瀹夎 >> 璇︾粏鍐呭 鍦ㄧ嚎鎶曠ǹ

Mysql寮鍙戜腑鐨勫閿笌鍙傜収瀹屾暣鎬

鍙戝竷: 2008-7-01 09:34 |  浣滆: admin |   鏌ョ湅: 3娆

Mysql寮鍙戜腑鐨勫閿笌鍙傜収瀹屾暣鎬

銆愬瓧浣擄細灏 澶с

Mysql寮鍙戜腑鐨勫閿笌鍙傜収瀹屾暣鎬

浣滆咃細涓嶈 鏂囩珷鏉ユ簮锛氱綉缁 鐐瑰嚮鏁帮細525 鏇存柊鏃堕棿锛2007-1-21

鍙傜収瀹屾暣鎬(Referential integrity)鏄暟鎹簱璁捐涓竴涓噸瑕佺殑姒傚康銆傚湪绯荤粺涓嶅悓鐨勫垪琛ㄤ腑锛屽綋鏁版嵁搴撴墍鏈夊弬鐓у悎娉曟垨闈炲悎娉曞叧鑱旀椂閮戒細娑夊強鍒板弬鐓у畬鏁存с傚綋鍙傜収瀹屾暣鎬у瓨鍦ㄦ椂锛屼换浣曚笌涓嶅瓨鍦ㄨ褰曠殑鍏宠仈灏嗗彉寰楁棤鏁堝寲锛岀敱姝ゅ彲闃叉鐢ㄦ埛鍑虹幇鍚勭閿欒锛屼粠鑰屾彁渚涙洿涓哄噯纭拰瀹炵敤鐨勬暟鎹簱銆

鍙傜収瀹屾暣鎬ч氬父閫氳繃澶栭敭(foreign key)鐨勪娇鐢ㄨ岃骞挎硾搴旂敤銆傞暱涔呬互鏉ワ紝娴佽宸ュ叿寮婧怰DBMS MySQL骞舵病鏈夋敮鎸佸閿紝鍘熷洜鏄繖绉嶆敮鎸佸皢浼氶檷浣嶳DBMS鐨勯熷害鍜屾ц兘銆傜劧鑰岋紝鐢变簬寰堝鐢ㄦ埛瀵瑰弬鐓у畬鏁存х殑浼樼偣鍊嶆劅鍏磋叮锛屾渶杩慚ySQL鐨勪笉鍚岀増鏈兘閫氳繃鏂癐nnoDB鍒楄〃寮曟搸鏀寔澶栭敭銆傜敱姝わ紝鍦ㄦ暟鎹簱缁勬垚鐨勫垪琛ㄤ腑淇濇寔鍙傜収瀹屾暣鎬у皢鍙樺緱闈炲父绠鍗曘

涓轰簡寤虹珛涓や釜MySQL琛ㄤ箣闂寸殑涓涓閿叧绯伙紝蹇呴』婊¤冻浠ヤ笅涓夌鎯呭喌锛

涓や釜琛ㄥ繀椤绘槸InnoDB琛ㄧ被鍨嬨

浣跨敤鍦ㄥ閿叧绯荤殑鍩熷繀椤讳负绱㈠紩鍨(Index)銆

浣跨敤鍦ㄥ閿叧绯荤殑鍩熷繀椤讳笌鏁版嵁绫诲瀷鐩镐技銆

渚嬪瓙鏄悊瑙d互涓婅鐐圭殑鏈濂芥柟娉曘傚琛ˋ鎵绀猴紝寤虹珛涓や釜琛紝鍏朵腑涓涓垪鍑哄姩鐗╃绫诲強鐩稿簲鐨勪唬鐮(琛ㄥ悕涓猴細species)锛屽彟涓琛ㄥ垪鍑哄姩鐗╁洯涓殑鍔ㄧ墿(琛ㄥ悕涓猴細zoo)銆傜幇鍦紝鎴戜滑鎯抽氳繃species鍏宠仈杩欎袱涓〃锛屾墍浠ユ垜浠彧闇瑕佹帴鍙楀拰淇濆瓨zoo琛ㄤ腑鍖呭惈species琛ㄤ腑鐨勫悎娉曞姩鐗╃殑鍏ュ彛鍒版暟鎹簱涓

琛ˋ

MySQL> CREATE TABLE species (id TINYINT NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, PRIMARY KEY(id)) ENGINE=INNODB;

Query OK, 0 rows affected (0.11 sec)

MySQL> INSERT INTO species VALUES (1, 'orangutan'), (2, 'elephant'), (3, 'hippopotamus'), (4, 'yak');

Query OK, 4 rows affected (0.06 sec)

Records: 4 Duplicates: 0 Warnings: 0

mysql> CREATE TABLE zoo (id INT(4) NOT NULL, name VARCHAR(50) NOT NULL, FK_species TINYINT(4) NOT NULL, INDEX (FK_species), FOREIGN KEY (FK_species) REFERENCES species (id), PRIMARY KEY(id)) ENGINE=INNODB;

娉ㄦ剰:瀵逛簬闈濱nnoDB琛紝 FOREIGN KEY 璇彞灏嗚蹇界暐銆

鐜板湪锛宖ieldszoo.species涓巗pecies.id 涔嬮棿瀛樺湪涓涓閿叧绯汇傚彧鏈夌浉搴旂殑zoo.specie涓巗pecies.idfield鐨勪竴涓肩浉鍖归厤锛屽姩鐗╄〃涓殑鍏ュ彛鎵嶅彲琚闂備互涓嬬殑杈撳嚭鍗虫紨绀轰簡褰撲綘鎯宠緭鍏ヤ竴涓狧arry Hippopotamus璁板綍锛岃屼娇鐢ㄥ埌涓嶅悎娉曠殑species浠g爜锛

mysql> INSERT INTO zoo VALUES (1, 'Harry', 5);

ERROR 1216 (23000): Cannot add or update a child row: a foreign key constraint fails

杩欓噷锛孧ySQL鏍告煡species琛ㄤ互鏌ョ湅species浠g爜鏄惁瀛樺湪锛屽鏋滃彂鐜颁笉瀛樺湪锛屽氨鎷掔粷璇ヨ褰曘傚綋浣犺緭鍏ユ纭唬鐮佺殑锛屽彲浠ヤ笌浠ヤ笂鍋氭瘮杈冦

mysql> INSERT INTO zoo VALUES (1, 'Harry', 3);

Query OK, 1 row affected (0.06 sec)

杩欓噷锛孧ySQL鏍告煡species琛ㄤ互鏌ョ湅species浠g爜鏄惁瀛樺湪锛屽綋鍙戠幇瀛樺湪锛屽厑璁歌褰曚繚瀛樺湪zoo琛ㄤ腑銆

涓轰簡鍒犻櫎涓涓閿叧绯伙紝棣栧厛浣跨敤SHOW CREATE TABLE鎵惧嚭InnoDB鐨勫唴閮ㄦ爣绛撅紝濡傝〃B鎵绀猴細

琛 B

+-------+---------------------------------------------------+

| Table | Create Table |

+-------+---------------------------------------------------+

| zoo | CREATE TABLE `zoo` (

`id` int(4) NOT NULL default '0',

`name` varchar(50) NOT NULL default '',

`FK_species` tinyint(4) NOT NULL default '0',

KEY `FK_species` (`FK_species`),

CONSTRAINT `zoo_ibfk_1` FOREIGN KEY (`FK_species`)

REFERENCES `species` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

+-------+----------------------------------------------------+

鐒跺悗浣跨敤甯︽湁DROP FOREIGN KEY 璇彞鐨凙LTER TABLE鍛戒护锛屽浠ヤ笅锛

mysql> ALTER TABLE zoo DROP FOREIGN KEY zoo_ibfk_1;

Query OK, 1 row affected (0.11 sec)

Records: 1 Duplicates: 0 Warnings: 0

涓轰簡灏嗕竴涓閿坊鍔犲埌涓涓幇鎴愮殑琛ㄤ腑锛屼娇鐢ˋDD FOREIGN KEY鐨 ALTER TABLE璇彞鎸囧畾鍚堥傜殑鍩熶綔涓轰竴涓閿細

mysql> ALTER TABLE zoo ADD FOREIGN KEY (FK_species) REFERENCES species (id);

鎵撳嵃 | 鏀惰棌姝ら〉 |  鎺ㄨ崘缁欏ソ鍙 | 涓炬姤
涓婁竴绡 涓嬩竴绡
 

璇勫垎锛0

鍙戣〃璇勮
鏌ョ湅鍏ㄩ儴鍥炲銆愬凡鏈0浣嶇綉鍙嬪彂琛ㄤ簡鐪嬫硶銆