Ren*_*aro 10 mysql alter-table
我不得不将 MYSQL 中的一列更改为 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 literal
或DROP 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
,从转换“注释”列TEXT
到BIGINT
没有太大的意义。我会假设您想保留它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)
归档时间: |
|
查看次数: |
55410 次 |
最近记录: |