我是mySQL的新手,在学习联接时,我尝试使用左联接,右联接和完全外联接进行完全联接。然后我意识到我的原始表之一(表t2)有一个空行。
当尝试将其删除时,我收到错误消息:错误代码:1175。您正在使用安全更新模式,并且尝试更新不带有使用KEY列的WHERE的表。要禁用安全模式,请在“首选项”中切换选项- > SQL编辑器并重新连接。
我运行的代码是:
create table t1( c1 integer, c2 integer, c3 varchar (10));
create table t2( c1 integer, c2 integer, c3 varchar(10));
insert into t1 values ( 1, 2, "foo"), (2,3, "bar"),(3,8,"random");
insert into t2 values ( 1, 4, "jack"), (2,6,"jill"), (4,9,"hill");
alter table t2 add primary key (c1);
update t2 set c1 = 3 where c1 = 4;
delete from t2 where c1 is null;
select * from t1;
select * from t2;
select * from t1 left join t2 on t1.c1=t2.c1
union
select * from t1 right join t2 on t1.c1=t2.c1;
以及不带
的MySQL Workbench v8.0中的输出 delete from t2 where c1 is null;
是这样的:
t1
+------+------+--------+
| c1 | c2 | c3 |
+------+------+--------+
| 1 | 2 | foo |
| 2 | 3 | bar |
| 3 | 8 | random |
+------+------+--------+
t2
+----+------+------+
| c1 | c2 | c3 |
+----+------+------+
| 1 | 4 | jack |
| 2 | 6 | jill |
| 3 | 9 | hill |
|NULL| NULL | NULL |
+----+------+------+
t1 union t2
+------+------+--------+------+------+------+
| c1 | c2 | c3 | c1 | c2 | c3 |
+------+------+--------+------+------+------+
| 1 | 2 | foo | 1 | 4 | jack |
| 2 | 3 | bar | 2 | 6 | jill |
| 3 | 8 | random | 3 | 9 | hill |
+------+------+--------+------+------+------+
这是错误还是我的代码有问题?我该如何解决? 感谢所有输入。谢谢
更新:当我使用MySQL命令行时,没有看到空行,但是在工作台中运行脚本时看到了它。我也根据答案更新了代码,但由于我是新手,所以我现在无法添加图片,因为我是不可以添加图片的:-(,以下是新代码。
create table t1( c1 integer, c2 integer, c3 varchar (10), primary key(c1));
create table t2( c1 integer, c2 integer, c3 varchar(10),primary key (c1));
insert into t1 values ( 1, 2, "foo"), (2,3, "bar"),(3,8,"random");
insert into t2 values ( 1, 4, "jack"), (2,6,"jill"), (4,9,"hill");
/*alter table t2 add primary key (c1);*/
update t2 set c1 = 3 where c1 = 4;
delete from t2 where c1 is null;
select * from t1;
select * from t2;
select * from t1 left join t2 on t1.c1=t2.c1
union
select * from t1 right join t2 on t1.c1=t2.c1;
答案 0 :(得分:0)
在工作台查询编辑器中的代码运行以下查询之前仅使用
SET SQL_SAFE_UPDATES = 0;
答案 1 :(得分:0)
最后找到一个答案,好像当我们为一个表添加主键时,工作台在末尾添加了这个空行,而实际上这并不是表的一部分。但是我们可以双击该NULL来手动将值输入表中。
我不确定为什么会收到错误:错误代码:1175。您正在使用安全更新模式,并且尝试在没有使用KEY列的WHERE的情况下更新表。要禁用安全模式,请在首选项-> SQL编辑器,然后重新连接。
但是我可以删除其他任何行。
就像当我使用delete from t2 where c1 = 3;
时一样。
我的期望是delete from t2 where c1 is null;
也应该工作,除了它不应该对表进行任何更改,但它应该已经执行且没有错误。一旦知道这一点,我就会发布。