插入现有表中的新添加列

时间:2014-04-04 04:36:09

标签: mysql sql database

我有一张桌子'用户'已经在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

谁能告诉我为什么? 在新列中插入值的正确方法是什么?

enter image description here

5 个答案:

答案 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属性以接受空值。