如何更改复合主键以添加其他列
How to alter composite primary key to add additional column
让我们支持我有一个迁移,我们称它为 001_Create_organization_users.php
两列,X,Y 它们都是一个组合的 PK:
<?php
namespace Fuel\Migrations;
class Create_organizations_users
{
public function up()
{
\DBUtil::create_table('organizations_users', array(
'X' => array('constraint' => 11, 'type' => 'int'),
'Y' => array('constraint' => 11, 'type' => 'int')
), array('X', 'Y')); // Primary Key
}
// Other functions
}
然后我用不同的迁移向 table 添加一列,我们称之为 002_Add_column_to_organization_users.php
<?php
namespace Fuel\Migrations;
class Add_column_to_organization_users.php
{
public function up()
{
$fields = array(
'Z' => array(
'constraint' => 11, 'type' => 'int'),
);
\DBUtil::add_fields('organizations_users', $fields);
//....
}
我能否以某种方式编辑该迁移,以便我可以将列 'Z' 添加为具有先前输入的键的主键,以便我的最终主键是 X,Y,Z
?
既然您已经创建了 PRIMARY KEY
,那么您需要先删除它,然后使用新的一组列创建新的。
ALTER TABLE <table_name> DROP PRIMARY KEY, ADD PRIMARY KEY(X, Y, Z);
让我们支持我有一个迁移,我们称它为 001_Create_organization_users.php
两列,X,Y 它们都是一个组合的 PK:
<?php
namespace Fuel\Migrations;
class Create_organizations_users
{
public function up()
{
\DBUtil::create_table('organizations_users', array(
'X' => array('constraint' => 11, 'type' => 'int'),
'Y' => array('constraint' => 11, 'type' => 'int')
), array('X', 'Y')); // Primary Key
}
// Other functions
}
然后我用不同的迁移向 table 添加一列,我们称之为 002_Add_column_to_organization_users.php
<?php
namespace Fuel\Migrations;
class Add_column_to_organization_users.php
{
public function up()
{
$fields = array(
'Z' => array(
'constraint' => 11, 'type' => 'int'),
);
\DBUtil::add_fields('organizations_users', $fields);
//....
}
我能否以某种方式编辑该迁移,以便我可以将列 'Z' 添加为具有先前输入的键的主键,以便我的最终主键是 X,Y,Z
?
既然您已经创建了 PRIMARY KEY
,那么您需要先删除它,然后使用新的一组列创建新的。
ALTER TABLE <table_name> DROP PRIMARY KEY, ADD PRIMARY KEY(X, Y, Z);