it-swarm.com.de

Ändern einer Spalte: null auf nicht null

Ich muss eine Spalte in MYSQL in NULL in NOT NULL ändern, aber ich erhalte den Fehler außerhalb der Syntax. Ich möchte nur die letzte Spalte ändern, habe bereits einige Nachforschungen angestellt, aber keine Lösung gefunden. Dies kann einfach sein, aber ich bin neu in der Datenbank und habe dies bis jetzt nicht erkannt. Kann mir jemand helfen?

Beispiel: Ändern Sie die NULL-Spalte schnell in NOT NULL

ALTER TABLE glpi_ticketsatisfactions ALTER COLUMN comment BIGINT NOT NULL;

Mein Tisch: My table

Error:

[42000] [1064] Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von 'BIGINT NOT NULL' in Zeile 1

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

Die von Ihnen verwendete Syntax stammt aus einem SQL Server-Beispiel , nicht aus MySQL . Es wäre gut, die MySQL-Dokumentation über ALTER TABLE Syntax zu überprüfen.

In MySQL kann der Unterabschnitt ALTER COLUMN Nur zum Festlegen oder Löschen des Standardwerts der Spalte (SET DEFAULT literal Oder DROP DEFAULT) Verwendet werden.

Sie müssen entweder CHANGE COLUMN Verwenden (beachten Sie, dass der Spaltenname verdoppelt wird, da Sie ihn verwenden können, um seinen Namen zu ändern):

ALTER TABLE MyTable  
    CHANGE COLUMN comment comment BIGINT NOT NULL;

oder MODIFY COLUMN:

ALTER TABLE MyTable 
    MODIFY COLUMN comment BIGINT NOT NULL;

Neben der Syntax gibt es jetzt zwei weitere Probleme:

  • Wenn Sie CREATE TABLE Sehen und eine "Kommentar" -Spalte von TEXT in BIGINT konvertieren, ist dies nicht sehr sinnvoll. Ich gehe davon aus, dass Sie es behalten möchten TEXT und es nur NOT NULL Machen.

  • Möglicherweise sind bereits NULL -Werte in der Tabelle enthalten. In diesem Fall schlägt die Anweisung mit Fehlern fehl. Sie müssen diese Werte also zuerst UPDATE auf einen Wert ungleich Null (z. B. die leere Zeichenfolge) setzen und dann die Spalte ändern:

So werden unsere Aussagen:

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ᵀᴹ