正确使用MySQL的外键约束

缺省情况下,在MySQL数据库管理系统中建立的表由MyISAM数据库引擎管理,是不支持外键约束的。所以需要指定使用InnoDB引擎,InnoDB 是 MySQL 上第一个提供外键约束的引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。也就是说如果要采用外键约束,表类型必须时InnoDB。如果使用Hibernate,在hibernate.properties中应该正确设置dialect,如下:

hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect

如果dialect设置成org.hibernate.dialect.MySQLDialect将使用MyISAM引擎。

完成以上设置后,用Hibernate编译成的schema文件中,在创建表的SQL语句中都会增加 type=InnoDB 选项。