`

Mysql InnoDB表外键约束

阅读更多
CREATE TABLE `country` (
  `country_id` smallint(5) unsigned NOT NULL auto_increment,
  `country` varchar(50) NOT NULL,
  `last_update` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`country_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `city` (
  `city_id` smallint(5) unsigned NOT NULL auto_increment,
  `city` varchar(50) NOT NULL,
  `country_id` smallint(5) unsigned NOT NULL,
  `last_update` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`city_id`),
  KEY `idx_fk_country_id` (`country_id`),
  CONSTRAINT `fk_city_country` FOREIGN KEY (`country_id`) REFERENCES `country` (`country_id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into country(country_id, country) values(1, "china");
insert into city(city_id, city, country_id) values(200, "wenzhou", 1);


mysql> delete from country where country_id=1;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`test/city`, CONSTRAINT `fk_city_country` FOREIGN KEY (`country_id`) R
EFERENCES `country` (`country_id`))

因为DELETE RESTRICT,子表有,删除父表时提示出错



mysql> update country set country_id=1000 where country_id=1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from country;
+------------+---------+---------------------+
| country_id | country | last_update         |
+------------+---------+---------------------+
|       1000 | china   | 2009-01-10 22:46:42 |
+------------+---------+---------------------+
1 row in set (0.00 sec)

mysql> select * from city;
+---------+---------+------------+---------------------+
| city_id | city    | country_id | last_update         |
+---------+---------+------------+---------------------+
|     200 | wenzhou |       1000 | 2009-01-10 22:45:38 |
+---------+---------+------------+---------------------+
1 row in set (0.00 sec)


mysql> show table status like 'city' \G;
*************************** 1. row ***************************
           Name: city
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 1
 Avg_row_length: 16384
    Data_length: 16384
Max_data_length: 0
   Index_length: 16384
      Data_free: 0
 Auto_increment: 201
    Create_time: 2009-01-10 22:36:53
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment: InnoDB free: 4096 kB; (`country_id`) REFER `test/country`(`country_id`) ON UPDATE
1 row in set (0.00 sec)
分享到:
评论

相关推荐

    详解MySQL中的外键约束问题

    在MySQL中,外键约束主要用于InnoDB存储引擎,因为它支持事务处理和行级锁定,这在处理并发操作和数据完整性时至关重要。 在MySQL中,外键约束有四种行为类型: 1. CASCADE:当父表中的行被删除或更新时,会自动...

    mysql处理添加外键时提示error 150 问题的解决方法

    如果其中一个或者两个表是 MyISAM 引擎的表,若想要使用外键约束,必须是 InnoDB 引擎。实际上,如果两个表都是 MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键。你可以通过查询浏览器来设置表的引擎类型。...

    Mysql增加外键的方法

    只有InnoDB存储引擎支持外键约束,因此在创建数据表时,必须指定ENGINE=InnoDB。如果不设置,可能会导致外键约束不起作用。 此外,在使用PHPMyAdmin时,目前(直到4.0X和4.1X版本)尚未提供所见即所得的外键定义...

    mysql外键的添加与删除参考.pdf

    MySQL 中的外键只能在 InnoDB 存储引擎中生效,而其他存储引擎将忽略外键约束。 添加外键 --------- 在 MySQL 中,添加外键可以使用ALTER TABLE语句,例如: ``` ALTER TABLE ss_accesscode ADD FOREIGN KEY ...

    MySQL Innodb 索引原理详解

    - **外键支持**:InnoDB支持外键约束,而MyISAM不支持。 - **表锁机制**:MyISAM使用表锁机制,降低了并发性能。 #### 4. 总结 本文详细介绍了MySQL InnoDB存储引擎中的索引原理及其实现方式,特别是B+树的应用。...

    mysql数据库设置外键应该注意的几点

    MySQL的MyISAM存储引擎不支持外键约束,因此在设置外键时,需要确保使用支持外键的存储引擎,如InnoDB。 8. **外键约束检查时机**: 默认情况下,MySQL在`DEFERRED`模式下,只在事务提交时检查外键约束。若需在...

    详解MySQL 外键约束

    MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。 2.外键的使用条件 两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持) 外键列必须建立了索引,MySQL ...

    mysql的外键

    - 在InnoDB存储引擎中,外键约束是支持的;而在MyISAM存储引擎中,则不支持外键。 8. **实际应用** - 在电商系统中,订单表(Orders)可以通过外键关联用户表(Users),以标识下单的用户。 - 在论坛系统中,...

    MySQL内核:InnoDB存储引擎 卷1.pdf.zip

    3. **外键约束**:InnoDB支持外键,这是其他一些存储引擎如MyISAM所不具备的。外键可以确保数据的参照完整性和数据库间的关系。 4. **MVCC(多版本并发控制)**:InnoDB使用MVCC来实现高并发读写,尤其是在可重复读...

    MySql innodb 引擎表存储分析

    MySQL的InnoDB存储引擎是一种广泛使用的事务处理引擎,支持行级锁定和外键约束等功能。本文将深入解析InnoDB存储引擎中的表存储机制,重点介绍其如何管理和存储数据。 #### InnoDB表存储结构 InnoDB表存储结构的...

    MySQL体系结构及原理(innodb)图文完美解析

    InnoDB提供了多种高级功能,如外键约束、事务管理以及崩溃恢复机制等。 3. **MySQL与InnoDB的关系** MySQL可以使用多种不同的存储引擎,而InnoDB是其中最流行的一个。从MySQL 5.1版本开始,InnoDB被集成作为插件...

    MySQL技术InnoDB存储引擎_姜承尧_第2版

    在MySQL数据库中,InnoDB存储引擎扮演着至关重要的角色,它是支持事务处理、行级锁定以及外键约束的主要引擎。InnoDB的引入使得MySQL能够满足企业级应用的需求,提供了高度的数据一致性与可靠性。 首先,InnoDB的...

    MySQL外键使用及说明详解

    MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。 外键的使用条件:  1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);  2.外键列必须建立了索引,...

    MySql Innodb 引擎特性详解

    6. **支持外键约束**:与MyISAM相比,InnoDB引擎支持外键约束,有助于维护数据库的完整性。 7. **不支持全文索引**:尽管InnoDB功能强大,但它不支持全文索引功能,这一点在特定的应用场景中可能需要额外考虑。 #...

    mySql 存储引擎 启用 Innodb

    其中,InnoDB作为MySQL中最常用的存储引擎之一,提供了众多高级特性,如事务支持、行级锁定以及外键约束等。本文将详细介绍如何在MySQL中启用InnoDB存储引擎,并对比分析InnoDB与其他存储引擎(如MyISAM)之间的主要...

    实战mysql innodb 删除数据后释放磁盘

    Innodb 删除数据后释放磁盘空间 InnoDB 是 MySQL 中的一种存储引擎,它具有高性能和...此外,InnoDB 还有其他一些特点,例如支持事务、锁机制、外键约束等。这使得 InnoDB 成为 MySQL 中的一种可靠和高效的存储引擎。

Global site tag (gtag.js) - Google Analytics