MYSQLの列をNULLからNOT NULLに変更する必要がありますが、構文でエラーが発生します。最後の列だけを変更したいのですが、すでにいくつかの調査を行っていますが、解決策は見つかりませんでした。これは簡単な場合もありますが、データベースは初めてであり、現時点でこれに気づいていませんでした。誰かが私を助けることができますか?
例が保持されています:NULL列をNOT NULLにすばやく変更
ALTER TABLE glpi_ticketsatisfactions ALTER COLUMN comment BIGINT NOT NULL;
エラー:
[42000] [1064] SQL構文にエラーがあります。 MariaDBサーバーのバージョンに対応するマニュアルで、1行目の「BIGINT NOT NULL」付近で使用する正しい構文を確認してください
CREATE TABLE
:
CREATE TABLE glpi_ticketsatisfactions
( id int(11) NOT NULL AUTO_INCREMENT,
tickets_id int(11) NOT NULL DEFAULT '0',
type int(11) NOT NULL DEFAULT '1',
ate_begin datetime DEFAULT NULL,
date_answered datetime DEFAULT NULL,
satisfaction int(11) DEFAULT NULL,
comment text COLLATE utf8_unicode_ci,
PRIMARY KEY (id),
UNIQUE KEY tickets_id (tickets_id)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
使用した構文は、SQL Serverの例、MySQLではありません。 MySQLのドキュメントで ALTER TABLE
構文について確認することをお勧めします。
MySQLでは、ALTER COLUMN
副次句は、列のデフォルト値(SET DEFAULT literal
またはDROP DEFAULT
)の設定または削除にのみ使用できます。
CHANGE COLUMN
を使用する必要があります(これを使用して名前を変更できるため、列名が2倍になることに注意してください)。
ALTER TABLE MyTable
CHANGE COLUMN comment comment BIGINT NOT NULL;
またはMODIFY COLUMN
:
ALTER TABLE MyTable
MODIFY COLUMN comment BIGINT NOT NULL;
ここで、構文のほかに2つの問題があります。
CREATE TABLE
を見ると、「コメント」列をTEXT
からBIGINT
に変換してもあまり意味がありません。私はあなたがそれをTEXT
にしてNOT NULL
だけにしたいと仮定します。
テーブルにはすでにNULL
値が含まれている可能性があります。その場合、ステートメントはエラーで失敗します。したがって、最初にそれらの値をUPDATE
にnull以外の値(たとえば、空の文字列)にしてから、列を変更する必要があります。
したがって、ステートメントは次のようになります。
UPDATE glpi_ticketsatisfactions
SET comment = ''
WHERE Comment IS NULL ;
ALTER TABLE glpi_ticketsatisfactions
MODIFY COLUMN comment TEXT COLLATE utf8_unicode_ci NOT NULL ;