web-dev-qa-db-ja.com

MySQLの「CREATETABLELIKE」にはトリガーが含まれます

MySQL 5.6(5.6.29-76.2-56-log Percona XtraDB Cluster)を使用しています

CREATE TABLE LIKEを発行すると、テーブルのトリガーがコピーされません。新しいテーブルでもトリガーを取得できますか?

1
Boden Garman

長い答えと短い答えはノーです!これは、MySQLのもう1つの「非機能」です。この構成は、より一般的にCTAS(_CREATE TABLE AS.... SELECT_)として知られています-_CREATE TABLE LIKE_構文は非標準です-MySQLの多くのように!

MySQLのドキュメントでは、 ここ -この脱落は「柔軟性」を確保するためのものであると主張しています-それほど悲しくないのであれば、あなたは笑うでしょう!

CREATE TABLE ... SELECTは、インデックスを自動的に作成しません。これは、ステートメントを可能な限り柔軟にするために意図的に行われます。

次のようにSELECTの前に宣言することで、それら(インデックス)を作成できます。

作成したテーブルにインデックスを作成する場合は、SELECTステートメントの前に次のインデックスを指定する必要があります。

_> mysql> CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;
_

しかし、TRIGGERs、FUNCTIONs、および_STORED PROCEDURE_ sは運が悪いです。

これが重要な場合は、テーブル継承メカニズムを備えたPostgreSQLで運試しをすることができます。これにより、スキーマの変更がプロページされますが、WITH INDEXES、WITH FUNCTIONS、WITH _STORED PROCEDURES_構文ができなかった理由がわかりません。紹介されていません。

機能リクエストを提出した場合(幸運を祈ります!MySQLにはまだ_CHECK CONSTRAINT_ sがありません)、ここにリンクを投稿していただければ、喜んで_"me-too"_を提出します。 。

_CREATE TABLE LIKE_も同様に機能不全のオプションです ここ から

CREATE TABLE ... LIKEは、元のテーブルに指定されたDATADIRECTORYまたはINDEXDIRECTORYテーブルオプション、あるいは外部キー定義を保持しません。

2
Vérace