Я новичок в mySQL, узнав о присоединениях, я попытался сделать полное соединение, используя левое соединение, правое соединение и полное внешнее соединение. то я понял, что одна из моих исходных таблиц (таблица t2) имеет нулевую строку.
Когда вы пытаетесь удалить его, я получаю сообщение об ошибке: Код ошибки: 1175. Вы используете безопасный режим обновления, и вы попытались обновить таблицу без WHERE, которая использует столбец KEY. Чтобы отключить безопасный режим, переключите параметр в Preferences → SQL Editor и снова подключиться.
коды, которыми я управлял, это:
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, я не вижу нулевую строку, но я вижу это, когда запускаю скрипт в workbench. Также я обновил свои коды на основе ответов, но на данный момент я не могу добавлять фотографии, так как я новичок, мне не разрешают добавлять фотографии :-(, ниже приведены новые коды.
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;
Наконец, нашел ответ, похоже, когда мы добавляем первичный ключ для таблицы, workbench добавляет эту нулевую строку в конец, которая на самом деле не является частью таблиц. Но мы можем дважды щелкнуть по этому NULL, чтобы ввести значения в таблицу вручную.
Я не уверен, почему я получаю сообщение об ошибке: Код ошибки: 1175. Вы используете безопасный режим обновления, и вы пытались обновить таблицу без WHERE, которая использует столбец KEY. Чтобы отключить безопасный режим, переключите опцию в Preferences → Редактор SQL и снова подключитесь.
Но я могу удалить любую другую строку, если захочу. например, когда я использую delete from t2 where c1 = 3;
оно работает.
Мое ожидание заключается в том, что delete from t2 where c1 is null;
также должен работать, за исключением того, что он не должен вносить какие-либо изменения в таблицу, но все равно должен выполняться без ошибок. Я сообщу об этом, как только узнаю об этом.
NULL
в конце не является частью таблицы. Но мне любопытно узнать, каков реальный ответ здесь.
просто используйте перед запуском запроса под кодом в редакторе запросов workbench
SET SQL_SAFE_UPDATES = 0;