我有一张桌子'用户'已经在db with fields
create Table user (
id INT(6) NOT NULL AUTO_INCREMENT PRIMARY KEY,
username varchar(20) NOT NULL,
password varchar(20) NOT NULL,
profilename varchar(20) NOT NULL,
email varchar(40) NOT NULL,
socialemail varchar(40) NOT NULL)engine=InnoDB;
所述列还包含值
我更改了表并添加了更多列
ALTER TABLE user
ADD COLUMN enabled varchar(1),
ADD COLUMN accountnonexpired varchar(1),
ADD COLUMN credentialsnonexpired varchar(1),
ADD COLUMN accountnonlocked varchar(1);
现在,当我使用MYSQL中的以下命令将值插入新列时。
insert into user
(id,enabled,accountnonexpired,credentialsnonexpired,accountnonlocked) values ('1','Y','Y','Y','Y'),('2','Y','Y','Y','Y');
我收到错误
Error Code: 1364. Field 'username' doesn't have a default value
谁能告诉我为什么? 在新列中插入值的正确方法是什么?
答案 0 :(得分:4)
INSERT
会向您的表中添加新行,并且这些行必须具有非空用户名才能使INSERT
成功它不是100%明确但我认为您是说您要为所有现有行设置这些新列的值。为此,您需要UPDATE
而不是INSERT
:
UPDATE user SET id='1', enabled = 'Y', accountnonexpired = 'Y' WHERE 1
为了简洁起见,我省略了一些专栏,但你明白了。您可能还希望更改表格,使这些值成为将来插入的新行的DEFAULT
。
答案 1 :(得分:3)
您的表格为[用户名],[密码],[个人资料名称],[电子邮件]和[socialemail]字段设置了NOT NULL。在设置NOT NULL并且没有默认值时,您将需要提供值。
除非您打算将数据插入到预先存在的列中,否则请使用Update语句。
update user
set enabled = 'Y', accountnonexpired='Y', credentialsnonexpired='Y', accountnonlocked='Y'
from user
where id = 1
答案 2 :(得分:2)
INSERT
正在创建新记录。您有一个标记为NOT NULL
的用户名字段但是在您的SQL中,您的语句中不包含用户名和其他NOT NULL
字段。
您的插入内容需要包含所有NOT NULL
字段。
insert into user(id,username,password,profilename,email,socialemail,enabled,accountnonexpired,credentialsnonexpired,accountnonlocked)
values ('1',<username>,<password>,<profilename>,<email>,<socialemail>'Y','Y','Y','Y'),('2',<username>,<password>,<profilename>,<email>,<socialemail>'Y','Y','Y','Y');
我怀疑你确实想在这里更新而不是插入。
更新如下所示:
UPDATE user set enabled = 'Y', accountnonexpired='Y', credentialsnonexpired='Y', accountnonlocked='Y'
FROM user
WHERE id = 1
答案 3 :(得分:0)
为'username'字段赋值。它没有默认值,默认值不是根据您的表定义。这将有效
答案 4 :(得分:0)
在插入过程中,没有为用户名字段分配值,因为username varchar(20) is NOT NULLable
,您需要为该col设置默认值或更改col属性以接受空值。