在各种PostgreSQL与MySQL的比较中,我看到很多提到MySQL中数据完整性的问题。这目前还是个问题吗?
特别是对于使用MySQL的Web应用程序,是否有确保数据完整性的技巧?或者新版本是否真的“开箱即用”,无需额外配置?
答案 0 :(得分:3)
MySQL具有支持多个存储后端(存储引擎)的功能。最突出的是MyISAM和InnoDB。 MyISAM是默认设置,在很多情况下都非常快,但没有提供数据完整性。 InnoDB支持完整的数据完整性。创建表时,您可以设置类型。
CREATE TABLE foo (...) ENGINE=innodb;
有关详细信息,另请参阅http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html。
答案 1 :(得分:3)
默认情况下,MySQL创建了myisam引擎表,它不支持事务或外键,您需要在创建表时显式强制使用事务性innodb引擎。
默认情况下,MySQL接受无效数据,例如日期'2010-02-30',默默地截断太长的文本数据,太大的数字等。但是你可以在mysql 5.0上使用SET sql_mode = 'STRICT_TRANS_TABLES';
为INNODB表更改它。 2及以上 - 见"Constraints on Invalid Data"。
MySQL根本不支持检查约束,所以你不能例如:
因此,所有数据验证都必须在客户端应用程序中完成。哪个更难做,更容易出错。
所有这些都不是PostgreSQL中的问题。
答案 2 :(得分:-1)
没有用于MySQL的存储引擎支持CHECK约束。努夫说。
“对于其他存储引擎,子句被解析但被忽略.CHECK子句被解析但被所有存储引擎忽略。” “接受但忽略语法子句的原因是兼容性,以便更容易从其他SQL服务器移植代码,以及运行创建带引用的表的应用程序” - http://dev.mysql.com/doc/refman/5.1/en/alter-table.html MySQL 5.4或5.5中没有增强功能根据手册。
请注意InnoDB支持FOREIGN KEY。