Удалить не удалось, даже если есть предложение where, в котором используется ключевой столбец

0

Я новичок в 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;
  • 0
    Возможно, дубликат: stackoverflow.com/questions/11448068/…
  • 0
    Я не думаю, что это воспроизводимо.
Показать ещё 1 комментарий
Теги:
mysql-workbench

2 ответа

0

Наконец, нашел ответ, похоже, когда мы добавляем первичный ключ для таблицы, workbench добавляет эту нулевую строку в конец, которая на самом деле не является частью таблиц. Но мы можем дважды щелкнуть по этому NULL, чтобы ввести значения в таблицу вручную.

Я не уверен, почему я получаю сообщение об ошибке: Код ошибки: 1175. Вы используете безопасный режим обновления, и вы пытались обновить таблицу без WHERE, которая использует столбец KEY. Чтобы отключить безопасный режим, переключите опцию в Preferences → Редактор SQL и снова подключитесь.

Но я могу удалить любую другую строку, если захочу. например, когда я использую delete from t2 where c1 = 3; оно работает.

Мое ожидание заключается в том, что delete from t2 where c1 is null; также должен работать, за исключением того, что он не должен вносить какие-либо изменения в таблицу, но все равно должен выполняться без ошибок. Я сообщу об этом, как только узнаю об этом.

  • 0
    Это значение NULL в конце не является частью таблицы. Но мне любопытно узнать, каков реальный ответ здесь.
0

просто используйте перед запуском запроса под кодом в редакторе запросов workbench

SET SQL_SAFE_UPDATES = 0;
  • 0
    Ты прав. Я могу это сделать. Но ошибка гласит, что я не использую условие where с ключевым столбцом. Хотя я использую столбец C1 в таблице t2 в качестве первичного ключа. Я сделал это с помощью изменения строки таблицы. Так разве это не делает запрос безопасным?
  • 0
    @VKishore Подробнее о, пожалуйста, прочитайте эту документацию bugs.mysql.com/bug.php?id=56351
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню