为什么我不能在magento设置脚本中设置auto_increment值?

时间:2011-07-11 17:50:05

标签: mysql magento

我正在创建一个带有一些自定义数据库表的自定义模块。我需要将auto_increment值设置为5000而不是默认值1.这可以很容易地完成,但是当我尝试通过Magento安装脚本时遇到问题。我想知道为什么,以及如何解决这个问题。这里有更多细节。

当我从常规mysql客户端(如Heidi SQL或标准cli)运行以下create语句时,auto_increment值被正确设置。它被设置为5000.

CREATE TABLE mytable (
  myid INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  other_column INTEGER NULL
) ENGINE=InnoDb DEFAULT CHARSET=UTF8 AUTO_INCREMENT=5000;

但是当我将完全相同的查询放入magento安装脚本时,auto_increment在运行后设置为1。需要说明的是,除了auto_increment未设置为5000这一事实外,该表是按照我的预期创建的。以下是安装脚本中的代码。

file:app / code / local / Mycompany / Mymodule / sql / mymodule_setup / mysql4-install-0.0.1.php

<?php
$installer = $this;
$installer->startSetup();
$installer->run("
    CREATE TABLE {$this->getTable('mytable')} (
      myid INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
      other_column INTEGER NULL
    ) ENGINE=InnoDb DEFAULT CHARSET=UTF8 AUTO_INCREMENT=5000;
");
$installer->endSetup();

为什么会这样?有没有解决方法?

(我还要提到我已尝试使用ALTER语句设置auto_increment,我也遇到同样的问题)

2 个答案:

答案 0 :(得分:0)

您可以将安装脚本设置为.sql文件而不是.php mysql4-install-0.0.1.sql

Checkout Mage / Core / Model / Resource / Setup.php _modifyResourceDb

            try {
                switch ($fileType) {
                    case 'sql':
                        $sql = file_get_contents($sqlFile);
                        if ($sql!='') {
                            $result = $this->run($sql);
                        } else {
                            $result = true;
                        }
                        break;
                    case 'php':
                        $conn = $this->_conn;
                        $result = include($sqlFile);
                        break;
                    default:
                        $result = false;
                }

简短的回答:脚本明智我不认为它可能,并且使用.sql方法可能无法正常工作,因为它仍然调用run();方法

Add an auto_increment column in Magento setup script without using SQL

您还可以查看lib / Varient / Db / Adapter / Pdo / Mysql.php,以便更深入地了解后台正在进行的内容,例如multi_query_splitMultiQuery

此处还可以找到更多关于连接方法的内容:

ALTER TABLE in Magento setup script without using SQL

很可能你不得不超出“Magento Way”的做法并在安装模块之后制作一个自定义的安装后脚本,该脚本将在你的桌面上运行并直接调整auto_increment。 / p>

答案 1 :(得分:0)

我认为你不能以这种方式设置主键。我的所有代码都是以填充方式构建的,并且完美无缺:

    <?php
$installer = $this;
$installer->startSetup();
$installer->run("
    CREATE TABLE {$this->getTable('mytable')} (
      myid INTEGER NOT NULL auto_increment,
      other_column INTEGER NULL,
      PRIMARY KEY (`myid`)
    ) ENGINE=InnoDb DEFAULT CHARSET=UTF8 AUTO_INCREMENT=5000;
");
$installer->endSetup();