我编写了一个python脚本,一次一个地将学生数据(名称和类)添加到表中。该表的结构使得有一个主键列,一个学生名称列,然后是每个类的列。该脚本检查它所添加的类是否已作为列存在,如果不存在则创建它。然后它为当前学生在该列下写“真”。
这是我的问题:从日志文件中我可以看到每个查询都正确地发送到数据库,但有些查询没有显示在表中。当我运行这些查询时:
CREATE TABLE Students (idStudents INT NOT NULL, Name VARCHAR(255) NOT NULL, PRIMARY KEY (idStudents)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8
SET NAMES 'utf8'
INSERT INTO Students (idStudents, Name) VALUES ('1', 'Bror Tao Sjørslev Bojlen')
SELECT column_name FROM information_schema.columns WHERE table_name='Students'
ALTER TABLE Students ADD 3ubmSL5 VARCHAR(20)
UPDATE Students SET 3ubmSL5='true' WHERE idStudents='1'
ALTER TABLE Students ADD 3uchSL3 VARCHAR(20)
UPDATE Students SET 3uchSL3='true' WHERE idStudents='1'
ALTER TABLE Students ADD 3udaBH3 VARCHAR(20)
UPDATE Students SET 3udaBH3='true' WHERE idStudents='1'
ALTER TABLE Students ADD 3uenA1H1 VARCHAR(20)
UPDATE Students SET 3uenA1H1='true' WHERE idStudents='1'
ALTER TABLE Students ADD 3umaHL4 VARCHAR(20)
UPDATE Students SET 3umaHL4='true' WHERE idStudents='1'
ALTER TABLE Students ADD 3uphH2 VARCHAR(20)
UPDATE Students SET 3uphH2='true' WHERE idStudents='1'
ALTER TABLE Students ADD 3uth1 VARCHAR(20)
UPDATE Students SET 3uth1='true' WHERE idStudents='1'
该表格看起来像this。
即最终查询
UPDATE Students SET 3uth1='true' WHERE idStudents='1'
没有通过。
我希望这是有道理的,有人可以对这个问题有所了解 - 这让我发疯了。
答案 0 :(得分:1)
我怀疑最后的声明正在回滚。我猜你的客户端在事务中隐式包装语句。我特别看到了包含未明确提交的插入或更新的Navicat回滚事务,除非它们附带另一个语句。这是奇怪的行为,但我已经通过追踪看了它。
顺便说一下,你的桌子设计是非常规的。学生和班级是不同的实体,不应存储在同一个表格中。你在这里至少结合了三个不同的表格;这不会很好地扩展。
编辑:
事实上,我在这里发布的第一个问题涉及到这个问题: Unable to insert record from stored procedure called from web service
我记得那个。 :)
答案 1 :(得分:0)
提交数据库更新是否有问题?我似乎记得我曾经使用的几个数据库提交了来自上一个查询的更改,无论是有显式COMMIT还是进行新查询时,所以在这种情况下,最终更新不会在提交时提交脚本终止,更改将被回滚。