例えば、
ALTER TABLE users ADD UNIQUE KEY(LoginID, Email);
ALTER TABLE users ADD UNIQUE KEY(Email);
ALTER TABLE users ADD UNIQUE KEY(LoginID);
Knex.Schema.createTable
それを行うにはどうすればよいですか
私はあなたがこれを行うことができるはずだと信じています:
Knex.Schema.createTable('tableName', function(table) {
table.unique(['LoginID', 'Email']);
table.unique('LoginID');
table.unique('Email');
});
動作していないように思われる場合はお知らせください。
動作します、ありがとう! Sequelizeから切り替える準備をしています。
移行を実行しようとしています
knex.schema.createTable('users', function (table) {
table.increments('id').primary();
table.string('network', 3).notNullable();
table.string('uid', 64).notNullable();
table.unique(['network', 'uid']);
table.timestamps();
}).then(function () {
console.log('Users Table is Created!');
});
しかし、私は一意のインデックスを取得しません
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`network` varchar(3) NOT NULL,
`uid` varchar(64) NOT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
何が間違っている可能性がありますか?
@ theo-ptzAPIはしばらく前に変更されました。 ドキュメントによると、 unique
はチェーン可能なメソッドになり、 primary
とnotNullable
使用するのと同じ方法で使用できます。
@bendrucker 、ありがとう。
しかし、何かが機能しません。
このコードを実行しようとしています
knex.schema.createTable('users', function (table) {
table.increments('id').primary();
table.string('network', 3).notNullable();
table.string('uid', 64).unique();
table.timestamps();
})
私はこれをデバッグで見ました
--> ComQueryPacket
{ command: 3,
sql: 'create table
ユーザー(
id int(11) unsigned not null auto_increment primary key,
ネットワークvarchar(3) not null,
uid varchar(64),
created_at datetime,
update_at datetime) default character set utf8' }
インデックスを取得できませんでした。
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`network` varchar(3) NOT NULL,
`uid` varchar(64) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
何が間違っている可能性がありますか?
移行時に複合一意インデックスを作成する方法はありますか?
複合一意制約の例については、統合テストを参照してください。
https://github.com/tgriesser/knex/blob/master/test/integration/schema/index.js#L92
ヒント:githubでブラウジング中に「y」キーを押すと、表示している現在のファイルの現在のファイルに切り替わります。 とても便利です。コメントにghurlを貼り付けると、githubが自動的にそれを実行してくれるといいのですが。
この機能はドキュメントにないため、非推奨になりましたか?
@RichardSimkoテストスイートによると、複合キーのtable.unique([...])
構文は引き続きサポートされているため、ドキュメントのバグのように見えます。
ええ、私はそれがまだ機能していることに気づきました、それがドキュメントにないのでそれが削除されようとしているのではないかと心配していました。
では、 table.unique([...])
とtable.primary([...])
の違いは何ですか?
ドキュメントによると、 primary([...])
を使用することが複合主キーを実行する適切な方法のようです。
単一の列で呼び出されると、その列がテーブルの主キーとして設定されます。 複合主キーを作成するには、列名の配列
table.primary(['column1', 'column2'])
渡します。constraintName
が指定されていない限り、制約名のデフォルトはtablename_pkey
です。
http://knexjs.org/#Schema -primary
最も参考になるコメント
私はあなたがこれを行うことができるはずだと信じています:
動作していないように思われる場合はお知らせください。