为什么自动增量在谷歌sql云中不起作用?

时间:2016-04-23 10:23:46

标签: mysql google-app-engine

您好我正在尝试使用此查询在Google sql云中创建一个表格,这里$ email和$ sid是根据用户的动态变量更改。

    $productcategory="CREATE TABLE IF NOT EXISTS `".$email."`.`".$email."_".$sid."_product_category`(`id` int(20) NOT NULL AUTO_INCREMENT,`addeditems` varchar(25) NOT NULL) ENGINE = InnoDB"; 

q5=mysqli_query($sql,$category);

当我没有添加在我的sql中创建的关键字 AUTO_INCREMENT 时,此表格,但在添加 AUTO_INCREMENT 后,我的表格未创建。有人可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

问:为什么AUTO_INCREMENT在google sql cloud中不起作用?

您真正要问的是,当您在列定义中包含AUTO_INCREMENT属性时,为什么您的CREATE TABLE语句没有创建表。

原因是google sql cloud中的CREATE TABLE语句失败。并且由于同样的原因,它在每个MySQL数据库中都会失败。

MySQL要求将AUTO_INCREMENT列编入索引。通常,AUTO_INCREMENT列是表的PRIMARY KEY,或者它上面有唯一索引。

这在MySQL参考手册中有记载。

  

注意
  每个表只能有一个AUTO_INCREMENT列,必须将其编入索引,并且不能具有DEFAULT值。 ...

当语句试图违反此规则时,MySQL会返回错误。该错误可以从mysqli_error函数获得。您的代码可以执行条件测试,以检查语句的执行是否失败或是否成功。如果失败,可以使用mysqli_error函数检索错误消息。

另一方面,int(20)有点奇怪。 INTEGER类型是一个4字节有符号整数。最大值为2 ** 31-1。转换为十进制,正数值需要(最多)10位数。最小(最大负值)值需要额外的符号字符。

INTEGER列的(可选)长度说明符指定显示长度。它对可存储的值范围没有任何影响。 令人感到奇怪的是,显示长度是20,比可以存储的任何值所需的字符多9个字符。

如果需要一个支持比INTEGER类型更大范围的值的整数类型,则可以使用BIGINT。那是一个8字节的有符号整数。 BIGINT支持的最大值为2 ** 63-1。显示长度为20对BIGINT有意义。

所有整数类型(包括BIGINT和INTEGER)都支持UNSIGNED属性,该属性不允许使用负值。