Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL数据完整性?_Mysql_Postgresql_Web Applications - Fatal编程技术网

MySQL数据完整性?

MySQL数据完整性?,mysql,postgresql,web-applications,Mysql,Postgresql,Web Applications,在各种PostgreSQL与MySQL的比较中,我看到很多人提到MySQL中的数据完整性问题。这目前仍然是一个问题吗 特别是对于使用MySQL的web应用程序,是否有确保数据完整性的技巧?或者在新版本中,这是真正的“开箱即用”,不需要额外配置吗?MySQL具有支持多个存储后端存储引擎的功能。最突出的是MyISAM和InnoDB。MyISAM是默认值,在许多情况下速度相当快,但不提供数据完整性。InnoDB支持完整的数据完整性。创建表时,可以设置类型 CREATE TABLE foo (...)

在各种PostgreSQL与MySQL的比较中,我看到很多人提到MySQL中的数据完整性问题。这目前仍然是一个问题吗


特别是对于使用MySQL的web应用程序,是否有确保数据完整性的技巧?或者在新版本中,这是真正的“开箱即用”,不需要额外配置吗?

MySQL具有支持多个存储后端存储引擎的功能。最突出的是MyISAM和InnoDB。MyISAM是默认值,在许多情况下速度相当快,但不提供数据完整性。InnoDB支持完整的数据完整性。创建表时,可以设置类型

CREATE TABLE foo (...) ENGINE=innodb;

有关更多详细信息,请参见。

MySQL具有支持多存储后端存储引擎的功能。最突出的是MyISAM和InnoDB。MyISAM是默认值,在许多情况下速度相当快,但不提供数据完整性。InnoDB支持完整的数据完整性。创建表时,可以设置类型

CREATE TABLE foo (...) ENGINE=innodb;

有关更多详细信息,请参见。

默认情况下,MySQL创建的myisam引擎表不支持事务或外键,您需要在创建表时显式强制事务innodb引擎

默认情况下,MySQL接受无效数据,如日期“2010-02-30”,默默地截断太长的文本数据、太大的数字等。但您可以使用SET-sql_mode='STRICT_TRANS_tables'为INNODB表更改它;在mysql 5.0.2及更高版本上-请参阅

MySQL根本不支持检查约束,因此您不能执行以下操作,例如:

强制整数数据位于某个位置 范围 强制文本数据采用某种格式,例如有效电子邮件 地址或有效url; 将文本数据限制为仅限有效字符ASCII、仅限ISO-8859-1、仅限 数字和负号等。; 不允许空格、换行、双空格、结尾空格等。 或空文本数据。 所以所有的数据验证都必须在客户端应用程序中完成。这更难做到,也更容易出错


所有这些在PostgreSQL中都不是问题。

默认情况下,MySQL创建的myisam引擎表不支持事务或外键,您需要在创建表时显式强制事务innodb引擎

默认情况下,MySQL接受无效数据,如日期“2010-02-30”,默默地截断太长的文本数据、太大的数字等。但您可以使用SET-sql_mode='STRICT_TRANS_tables'为INNODB表更改它;在mysql 5.0.2及更高版本上-请参阅

MySQL根本不支持检查约束,因此您不能执行以下操作,例如:

强制整数数据位于某个位置 范围 强制文本数据采用某种格式,例如有效电子邮件 地址或有效url; 将文本数据限制为仅限有效字符ASCII、仅限ISO-8859-1、仅限 数字和负号等。; 不允许空格、换行、双空格、结尾空格等。 或空文本数据。 所以所有的数据验证都必须在客户端应用程序中完成。这更难做到,也更容易出错


所有这些在PostgreSQL中都不是问题。

MySQL的存储引擎不支持检查约束。努夫说

对于其他存储引擎,这些子句将被解析但忽略。CHECK子句已解析,但被所有存储引擎忽略。接受但忽略语法子句的原因是为了兼容性,以便更容易从其他SQL服务器移植代码,并运行创建带有引用的表的应用程序-根据手册,MySQL 5.4或5.5中没有对此进行增强


请注意,InnoDB确实支持外键。

MySQL的存储引擎不支持检查约束。努夫说

对于其他存储引擎,这些子句将被解析但忽略。CHECK子句已解析,但被所有存储引擎忽略。接受但忽略语法子句的原因是为了兼容性,以便更容易从其他SQL服务器移植代码,并运行创建带有引用的表的应用程序-根据手册,MySQL 5.4或5.5中没有对此进行增强


请注意,InnoDB确实支持外键。

为什么这个问题是社区wiki?为什么这个问题是社区wiki?-1。误导同一手册中说:InnoDB存储引擎支持外键和引用子句……外键不是检查约束。请修改你的负面反馈。我不能:你最后一次投票是在5月16日15:06。你的投票现在被锁定,除非这个答案被编辑。误导同一手册中说:InnoDB存储引擎支持外键和引用子句……外键不是检查约束。请修改你的负面反馈。我不能:你最后一次投票是在5月16日15:06。除非编辑此答案,否则您的投票现在已锁定。