改变列:null 到 not null

Ren*_*aro 10 mysql alter-table

我不得不将 MYSQL 中的一列更改为 NULL 到 NOT NULL,但是我得到了语法错误。我只想更改最后一列,已经进行了一些研究,但还没有找到解决方案,这可能很简单,但我是数据库新手,直到现在才意识到这一点。有谁能够帮助我?

示例: 快速将 NULL 列更改为 NOT NULL

ALTER TABLE glpi_ticketsatisfactions ALTER COLUMN comment BIGINT NOT NULL;
Run Code Online (Sandbox Code Playgroud)

我的表: 我的桌子

错误:

[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
Run Code Online (Sandbox Code Playgroud)

ype*_*eᵀᴹ 23

您使用的语法来自SQL Server示例,而不是来自 MySQL。检查有关ALTER TABLE语法的 MySQL 文档会很好。

在 MySQL 中,ALTER COLUMN子条款只能用于设置或删除列的默认值(SET DEFAULT literalDROP DEFAULT)。

您需要使用其中之一CHANGE COLUMN(请注意,列名是双倍的,因为您可以使用它来更改其名称):

ALTER TABLE MyTable  
    CHANGE COLUMN comment comment BIGINT NOT NULL;
Run Code Online (Sandbox Code Playgroud)

MODIFY COLUMN

ALTER TABLE MyTable 
    MODIFY COLUMN comment BIGINT NOT NULL;
Run Code Online (Sandbox Code Playgroud)

现在,除了语法之外,还有两个问题:

  • 见此CREATE TABLE,从转换“注释”列TEXTBIGINT没有太大的意义。我会假设您想保留它TEXT并且只制作它NOT NULL

  • NULL表中可能已有值。如果是这种情况,该语句将因错误而失败。因此,您必须首先将UPDATE这些值设置为某个非空值(比如空字符串),然后修改该列:

所以我们的语句变成:

UPDATE glpi_ticketsatisfactions 
SET comment = ''
WHERE Comment IS NULL ;

ALTER TABLE glpi_ticketsatisfactions 
    MODIFY COLUMN comment TEXT COLLATE utf8_unicode_ci NOT NULL ;
Run Code Online (Sandbox Code Playgroud)