web-dev-qa-db-ja.com

列の変更:nullからnull以外

MYSQLの列をNULLからNOT NULLに変更する必要がありますが、構文でエラーが発生します。最後の列だけを変更したいのですが、すでにいくつかの調査を行っていますが、解決策は見つかりませんでした。これは簡単な場合もありますが、データベースは初めてであり、現時点でこれに気づいていませんでした。誰かが私を助けることができますか?

例が保持されています:NULL列をNOT NULLにすばやく変更

ALTER TABLE glpi_ticketsatisfactions ALTER COLUMN comment BIGINT NOT NULL;

私のテーブル: My table

エラー:

[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
6
Renato Lazaro

使用した構文は、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 ;
19
ypercubeᵀᴹ