插入具有自动递增值和默认字段的值时,MySQL 1136错误

时间:2018-10-20 15:10:29

标签: mysql

我创建了一个MySQL数据库,但是在我很难在其中一个表中插入伪数据后立即创建了数据库。这是我用来创建具有三个表的数据库的查询:类别,交易,预算_2018;

use mct;
create table if not exists categories(
id int auto_increment not null,
category varchar(255),
primary key (id)
);

create table if not exists transactions(
id int auto_increment not null,
dt date,
vendor varchar(255),
amount decimal(7,2),
cat_id int default 1,
primary key(id),
foreign key(cat_id) references categories(id)
);

create table if not exists budgets_2018(
id int not null,
January decimal(7,2) default 0.00,
February decimal(7,2) default 0.00,
March decimal(7,2) default 0.00,
April decimal(7,2) default 0.00,
May decimal(7,2) default 0.00,
June decimal(7,2) default 0.00,
July decimal(7,2) default 0.00,
August decimal(7,2) default 0.00,
September decimal(7,2) default 0.00,
October decimal(7,2) default 0.00,
November decimal(7,2) default 0.00,
December decimal(7,2) default 0.00,
primary key(id),
foreign key(id) references categories(id)
);
insert into categories (category) values ('Uncategorized');
insert into budgets_2018(id) values ((select id from categories where category = 'Uncategorized'));

从理论上讲,类别与交易具有一对多的关系,而与budgets_2018则具有一对一的关系。同样,最后几行代码的确产生了一个类别表,其中包含一条记录(1,“未分类”),还有一个budgets_2018表,其中包含一条记录(每月增加1,0.00,0.00 ... x11)。

这是我用来向事务表中添加一些虚拟数据的查询。该表有五列,第一列是自动递增的,第五列默认为1。第五列(cat_id)也是类别主类的外键,因此我将它们排除在下面的插入查询之外:

insert into transactions (dt, vendor, amount) values (
(curdate(), 'DummyVendor1', 3.45),
(curdate(), 'DummyVendor2', 11.47),
(curdate(), 'DummyVendor3', 73.22),
(curdate(), 'DummyVendor4', 199.27),
(curdate(), 'DummyVendor5', 34.56),
(curdate(), 'DummyVendor6', 18.99),
(curdate(), 'DummyVendor7', 1.45),
(curdate(), 'DummyVendor8', 2.41)
);

但是在插入查询之后,我一直得到

  

“错误1136:列计数与第1行的值计数不匹配”。

如果我错了,可以纠正我,但是在不需要显式插入的情况下,应该填充事务的第一列(id自动递增)和第五列(cat_id默认为1),对吗?所以我不确定是什么引起了错误。

谢谢。

1 个答案:

答案 0 :(得分:0)

问题是您的第一个和最后一个括号。删除它们,它应该可以插入:

insert into transactions (dt, vendor, amount) values 
    (curdate(), 'DummyVendor1', 3.45),
    (curdate(), 'DummyVendor2', 11.47),
    (curdate(), 'DummyVendor3', 73.22),
    (curdate(), 'DummyVendor4', 199.27),
    (curdate(), 'DummyVendor5', 34.56),
    (curdate(), 'DummyVendor6', 18.99),
    (curdate(), 'DummyVendor7', 1.45),
    (curdate(), 'DummyVendor8', 2.41);