我一直在尝试将数据插入到数据库中,但它不断向我显示此错误,即使我没有在第一个字段中写入列名(MemID),而是我试图输入它像这样分开
create table Member (
MemID VARCHAR(20) PRIMARY KEY,
FullName VARCHAR(50),
email VARCHAR(50),
gender VARCHAR(50),
Contact_Number VARCHAR(50),
Registration_Number VARCHAR(50),
User_S# INT
);
insert into Member (FullName, email, gender, Contact_Number,
Registration_Number, User_S#) values ('Jemmy Joutapaitis',
'jjoutapaitiscf@dailymail.co.uk', 'Male', '86-(804)800-8008',
'3574884734839928', 449);
insert into Member (FullName, email, gender, Contact_Number,
Registration_Number, User_S#) values ('Cleo Glynn', 'cglynncg@i2i.jp',
'Male', '81-(694)548-5205', '5443114970343516', 450);
insert into Member (FullName, email, gender, Contact_Number,
Registration_Number, User_S#) values ('Ivonne Deetlefs',
'ideetlefsch@virginia.edu', 'Female', '86-(257)683-5628',
'3571675846170605', 451);
insert into Member(MemID)
values('Mem0');
insert into Member(MemID)
values('Mem1');
insert into Member(MemID)
values('Mem2');
此代码给出了错误
无法将值NULL插入列' MemID',表中 ' master.dbo.Member&#39 ;;列不允许空值。 INSERT失败。
但是我分别插入了MemID列。
并且上面创建的表没有在数据库中显示,是因为错误还是别的?
答案 0 :(得分:3)
这不是插件如何工作。
当触发插入时,sql尝试立即添加该行,而不等待后续语句(对于任何dml语句,它都是正确的,而不仅仅是插入)。
因此,当您的第一个插入被触发时,sql会尝试将null
放入MemID
,因为您尚未在插入中提供任何MemID。
尝试将其插入插入中的第一个位置。而不是单独的声明,如:
insert into Member (MemID, FullName, email, gender, Contact_Number,
Registration_Number, User_S#) values ('Mem0','Jemmy Joutapaitis',
'jjoutapaitiscf@dailymail.co.uk', 'Male', '86-(804)800-8008',
'3574884734839928', 449);
修改强>
通过回复您的评论,我认为准备好的陈述是您正在寻找的。 p>
由于你正在使用python,你可以准备你的插入语句,如:
sql = "insert into Member (MemID, FullName, email, gender, Contact_Number,
Registration_Number, User_S#) values (%s,'Jemmy Joutapaitis',
'jjoutapaitiscf@dailymail.co.uk', 'Male', '86-(804)800-8008',
'3574884734839928', 449);"
sql = sql.format(self.db_scan_table)
//whenever you've memid ready use.
self.cursor.execute(sql, ('Mem01'))
答案 1 :(得分:1)
定义AUTO_INCREMENT
列以为您生成ID值:
CREATE TABLE Member (
MemID INT AUTO_INCREMENT PRIMARY KEY,
-- ...
);
如果这不实用,因为您需要某些特定的字符串定义,那么您唯一的选择是将其作为初始INSERT
调用的一部分提供。您在此处有约束,PRIMARY KEY
值不得为NULL
。
答案 2 :(得分:0)
应该能够使用下面的查询。识别下一个号码
insert into member(memid,......)
values ( 'MEM' + cast((select count(1) from member)+1 as varchar(100)),... )
如果你想从1开始,那么+ 1 否则删除+ 1
insert into member(memid,......)
values ( 'MEM' + cast((select count(1) from member) as varchar(100)),... )