Kode kesalahan MySQL: 1175 selama UPDATE di MySQL Workbench

817

Saya mencoba memperbarui kolom visiteduntuk memberikan nilai 1. Saya menggunakan workbench MySQL, dan saya menulis pernyataan di editor SQL dari dalam workbench. Saya menulis perintah berikut:

UPDATE tablename SET columnname=1;

Ini memberi saya kesalahan berikut:

Anda menggunakan mode pembaruan aman dan Anda mencoba memperbarui tabel tanpa WHERE yang menggunakan kolom KUNCI Untuk menonaktifkan mode aman, aktifkan opsi ....

Saya mengikuti instruksi, dan saya hapus centang safe updateopsi dari Editmenu Preferenceskemudian SQL Editor. Kesalahan yang sama masih muncul & saya tidak dapat memperbarui nilai ini. Tolong, beri tahu saya apa yang salah?

Juri A
sumber
4
Apakah Anda sadar bahwa ini akan memperbarui semua baris dalam tabel Anda di mana dikunjungi = 0 menjadi dikunjungi = 1? Apa ini yang kau inginkan?
Mark Byers
23
Setelah menghapus centang "Pembaruan Aman" ikuti langkah di bawah ini: Permintaan -> Hubungkan kembali ke Server. Sekarang jalankan permintaan Anda
Ripon Al Wasim
5
Anda harus terhubung kembali ke Server MySQL (mulai ulang koneksi MySQL) sebelum perubahan ini terjadi.
Philip Olson

Jawaban:

1613

Sepertinya sesi MySql Anda telah menetapkan opsi pembaruan aman . Ini berarti bahwa Anda tidak dapat memperbarui atau menghapus rekaman tanpa menentukan kunci (mis. primary key) Dalam klausa where.

Mencoba:

SET SQL_SAFE_UPDATES = 0;

Atau Anda dapat mengubah kueri Anda untuk mengikuti aturan (gunakan primary keydalam where clause).

Habibillah
sumber
Saya menyebutkan bahwa saya sudah menonaktifkan opsi pembaruan aman dari GUI yang memiliki efek yang sama dengan id saya mengetik perintah. Namun, terima kasih atas jawaban Anda, tetapi saya sudah menjawab pertanyaan saya. Periksa jawaban saya untuk mengetahui apa masalahnya.
Juri A
8
Setelah Anda mengubah opsi di GUI, Anda harus menyambung kembali ke database agar pengaturannya diatur dengan benar.
Tim Koscielski
31
Pastikan untuk mengatur kembali ini SET SQL_SAFE_UPDATES = 1ketika Anda selesai, karena ini adalah fitur keselamatan yang bermanfaat.
StockB
4
Saya tidak setuju dengan StockB ... Anda mungkin ingin tetap menggunakannya saat Anda lebih baik dalam menggunakan SQL ... tapi begitu Anda tahu apa yang Anda lakukan ... hal itu sama sekali tidak berguna. Anda seharusnya tidak mengembangkan barang-barang Anda di server produksi, jadi bahkan jika Anda mengacaukan, satu-satunya hal yang Anda harus hancurkan adalah server dev Anda .. yang toh tidak ada yang peduli.
Mathieu Turcotte
3
saya hanya datang untuk mengatakan bahwa saya mencari posting ini seperti 20 kali dalam 6 bulan terakhir karena saya selalu pilihan ini salah selama 11 tahun, tetapi sekarang saya sedang mengerjakan sebuah perusahaan dengan set ini benar pada pengembangan dan produksi. Ada banyak alasan untuk menetapkannya ke 0 secara default, misalnya ketika Anda mengembangkan fitur yang berdiri sendiri yang mungkin ingin Anda ekspor ke csv secara langsung dan kemudian menandainya sebagai diekspor atau yang serupa. Lain kali itu menjengkelkan karena pembaruan global yang jelas tidak memiliki filter pk. Saya melihatnya lebih sebagai perlindungan noob daripada fitur yang sangat berguna.
JoelBonetR
455

Ikuti langkah-langkah berikut sebelum menjalankan perintah UPDATE: Di MySQL Workbench

  1. Pergi ke Edit->Preferences
  2. Klik "SQL Editor"tab dan uncheck"Pembaruan Aman"check box
  3. Query-> Reconnect to Server // logout lalu login
  4. Sekarang jalankan query SQL Anda

ps, Tidak perlu me-restart daemon MySQL!

Ripon Al Wasim
sumber
20
Untuk versi 6.3 langkah 2 seharusnya "Sql Editor"bukan "Sql Queries"dan kemudian ada kotak centang di bagian bawah untuk"Safe Updates"
meconroy
1
jika ini adalah satu hal yang saya sarankan Anda hidupkan kembali karena ini membuatnya sangat mudah untuk secara meriah membersihkan data Anda jika Anda tidak hati
Frankenmint
2
terima kasih Conroy. Untuk sementara saya tidak bisa melihat kotak itu. Saya hanya perlu memperbesar jendela.
arn-arn
Mungkin mereka memindahkannya, tetapi di MySQL Workbench 6.0, ini berada di bawah "SQL Queries", bukan "SQL Editor"
MPelletier
1
ya sama di sini, harus gulir ke bawah sedikit untuk melihatnya.
Elon Zito
167
SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;
pengguna2531028
sumber
4
sayangnya solusi berbasis permintaan lainnya tidak berfungsi untuk saya. Tapi yang ini berhasil! Saya menghargai Anda menambahkan baris untuk menghidupkan kembali pembaruan yang aman.
SherylHohman
1
Saya sangat suka yang ini karena mungkin yang paling umum dari semua sambil tetap aman.
Nae
117

Tidak perlu mengatur SQL_SAFE_UPDATES ke 0 , saya akan benar-benar mencegahnya untuk melakukannya dengan cara itu. SAFE_UPDATES secara default aktif untuk REASON. Anda dapat mengendarai mobil tanpa sabuk pengaman dan hal-hal lain jika Anda tahu apa yang saya maksud;) Tambahkan saja di WHERE klausa nilai-KUNCI yang cocok dengan segala sesuatu seperti kunci primer dibandingkan dengan 0, jadi alih-alih menulis:

UPDATE customers SET countryCode = 'USA'
    WHERE country = 'USA';               -- which gives the error, you just write:

UPDATE customers SET countryCode = 'USA'
    WHERE (country = 'USA' AND customerNumber <> 0); -- Because customerNumber is a primary key you got no error 1175 any more.

Sekarang Anda dapat yakin bahwa setiap record (SELALU) diperbarui seperti yang Anda harapkan.

Rudy De Volder
sumber
3
Ini jenius!
Amos Long
dihargai jawaban: +1
Asif Raza
2
Haha, itu trik yang bagus. Saya menggunakan WHERE id > 0sebagai tipuan di sepanjang garis ini.
Csaba Toth
Itu tidak berfungsi untuk saya, itu terus menunjukkan kepada saya Pesan yang sama. Saya mengatasinya Dengan menonaktifkan mode pembaruan aman dengan: -Edit -> Preferences -> Sql Editor kemudian hapus centang pembaruan Aman.
Abdelhadi Lahlou
2
Bagaimana ini sebenarnya membuatnya lebih aman?
Matt Messersmith
107

Semua yang diperlukan adalah: Mulai kueri baru dan jalankan:

SET SQL_SAFE_UPDATES = 0;

Lalu: Jalankan kueri yang Anda coba jalankan yang sebelumnya tidak berfungsi.

Quagmire12
sumber
7
Selamat datang di SO, pastikan untuk membaca halaman tur dan halaman bantuan , dan hindari memposting jawaban seperti ini karena banyak jawaban di bawah ini mengatakan hal yang sama persis dan telah diposting bulan lalu
WOUNDEDStevenJones
1
Anda juga dapat mengaktifkan opsi ini lagi setelah menjalankan kueri.
kta
Apa yang ditambahkan jawaban ini? Anda baru saja memposting hal yang sama dengan Habibillah, lebih dari dua tahun kemudian. Mencoba menuai karma?
Luc
71

SET SQL_SAFE_UPDATES = 0;

kode SQL Anda di sini

SET SQL_SAFE_UPDATES = 1;

Carlos Henrique Moreira Dos S.
sumber
66

Kode Kesalahan: 1175. Anda menggunakan mode pembaruan aman dan Anda mencoba memperbarui tabel tanpa WHERE yang menggunakan kolom KUNCI Untuk menonaktifkan mode aman, aktifkan opsi di Preferensi -> SQL Editor dan hubungkan kembali.

Matikan "Safe Update Mode" sementara

SET SQL_SAFE_UPDATES = 0;
UPDATE options SET title= 'kiemvieclam24h' WHERE url = 'http://kiemvieclam24h.net';
SET SQL_SAFE_UPDATES = 1;

Matikan "Mode Pembaruan Aman" selamanya

Meja kerja Mysql 8.0:

MySQL Workbench => [ Edit ] => [ Preferences ] -> [ SQL Editor ] -> Uncheck "Safe Updates"

masukkan deskripsi gambar di sini Versi lama dapat:

MySQL Workbench => [Edit] => [Preferences] => [SQL Queries]
Tính Ngô Quang
sumber
41
  1. Preferensi ...
  2. "Pembaruan Aman" ...
  3. Mulai ulang server

Preferensi ...

Pembaruan Aman Mulai ulang server

andrew
sumber
Ini seharusnya jawaban yang diterima. Sayang sekali belum
ErrorrrDetector
1
Anda tidak harus me-restart server. Itu harus cukup dengan hanya menutup dan membuka kembali koneksi.
Marc L.
1
Di MAC, preferensi ada di bawah menu teratas MySQLWorkbench.
zwitterion
36
SET SQL_SAFE_UPDATES=0;

ATAU

Pergi ke Edit --> Preferences

Klik SQL Queries tab dan hapus Safe Updates centang pada kotak centang

Query --> Reconnect to Server

Sekarang jalankan query sql Anda

Balu
sumber
26

Jika Anda berada dalam mode aman, Anda harus memberikan id di mana klausa. Jadi sesuatu seperti ini seharusnya bekerja!

UPDATE tablename SET columnname=1 where id>0
Tomislav
sumber
1
Halaman ini mengkonfirmasikan fakta ini: bennadel.com/blog/...
DivDiff
20

Pada WorkBench saya menyelesaikannya Dengan menonaktifkan mode pembaruan aman:

-Edit -> Preferensi -> Sql Editor kemudian hapus centang pembaruan Aman.

Abdelhadi Lahlou
sumber
7
Ini berfungsi tetapi, saya harus me-restart MySQL Workbench.
Lanil Marasinghe
17

Saya menemukan jawabannya. Masalahnya adalah bahwa saya harus mendahului nama tabel dengan nama skema. yaitu, perintahnya harus:

UPDATE schemaname.tablename SET columnname=1;

Terima kasih semuanya.

Juri A
sumber
5
Anda dapat menghindari menyebutkan nama skema dengan memilih skema di panel kiri. Memilih skema di panel kiri berarti Anda menggunakan skema / database yang dipilih
Ripon Al Wasim
10
Ini bukan jawaban untuk menyelesaikan masalah yang dijelaskan dalam pertanyaan (dan judul). Anda harus menandai yang lain sebagai diterima.
T30
Saya mencoba dengan schemaname tetapi mendapatkan kesalahan yang sama, perbarui qms-active-db.gh_table set bookmark = '1660_207100000001000'
Code_Mode
3
Ini bukan jawabannya!
Yehezkiel Victor
1
jawaban yang salah, jawaban yang benar dijawab oleh Habibillah (di bawah)
hariharan s
14

Dalam MySQL Workbech versi 6.2 tidak keluar dari PreferensiSQLQueries opsi .

Dalam hal ini mungkin digunakan: SET SQL_SAFE_UPDATES=0;

ferdiado
sumber
1
Itu ada, tetapi opsi ada di bawah "SQL Editor" sekarang.
Philip Olson
Saya tidak melihat opsi ini. Tolong, Anda bisa mendapatkan tangkapan layar. Terima kasih
ferdiado
Buka Preferensi -> tab Editor SQL -> Di bagian bawah. Rilis 6,2-beta tidak memiliki opsi ini, jadi mungkin Anda harus meningkatkan ke 6.2.3+.
Philip Olson
versi saya 6.3, Ada di bawah -> SQL Editor -> Lainnya
tyan
12

Solusi paling sederhana adalah dengan menentukan batas baris dan mengeksekusi. Ini dilakukan untuk tujuan keamanan.

Ruwantha
sumber
2
Beri +1 pada solusi ini. Hapus dari TABEL di mana batas kolom = 'xyz' 9999999999
FlyingZebra1
2
Jawaban ini harus menjadi jawaban yang diterima karena itu adalah cara yang paling tidak aman.
Julian
7

Karena pertanyaan itu dijawab dan tidak ada hubungannya dengan pembaruan yang aman, ini mungkin tempat yang salah; Saya akan memposting hanya untuk menambahkan informasi.

Saya mencoba menjadi warga negara yang baik dan memodifikasi kueri untuk menggunakan tabel temp id yang akan diperbarui:

create temporary table ids ( id int )
    select id from prime_table where condition = true;
update prime_table set field1 = '' where id in (select id from ids);

Kegagalan. Mengubah pembaruan menjadi:

update prime_table set field1 = '' where id <> 0 and id in (select id from ids);

Itu berhasil. Ya ampun - jika saya selalu menambahkan di mana kunci <> 0 untuk menyiasati pemeriksaan pembaruan yang aman, atau bahkan mengatur SQL_SAFE_UPDATE = 0, maka saya telah kehilangan 'centang' pada permintaan saya. Saya mungkin juga hanya mematikan opsi secara permanen. Saya kira itu membuat menghapus dan memperbarui proses dua langkah, bukan satu .. tetapi jika Anda mengetik cukup cepat dan berhenti berpikir tentang kunci yang menjadi istimewa tetapi lebih sebagai hanya gangguan ..

Gerard ONeill
sumber
4

Benar, ini tidak ada gunanya untuk sebagian besar contoh. Tapi akhirnya, saya sampai pada pernyataan berikut dan itu berfungsi dengan baik:

update tablename  set column1 = '' where tablename .id = (select id from tablename2 where tablename2.column2 = 'xyz');
Sonic-Mayhem
sumber
3

Ini untuk Mac, tetapi harus sama untuk OS lain kecuali lokasi preferensi.

Kesalahan kami dapatkan ketika kami mencoba DELETEoperasi yang tidak aman

Klik pada preferensi ketika Anda mendapatkan kesalahan ini

Di jendela baru, hapus centang opsi Safe updates

Hapus centang pembaruan aman

Kemudian tutup dan buka kembali koneksi. Tidak perlu memulai ulang layanan.

Sekarang kita akan mencoba DELETElagi dengan hasil yang sukses.

masukkan deskripsi gambar di sini

Jadi apa semua tentang pembaruan yang aman ini? Itu bukan hal yang jahat. Inilah yang dikatakan MySql tentang hal itu.

Menggunakan --safe-updatesOpsi

Untuk pemula, opsi startup yang bermanfaat adalah --safe-updates(atau --i-am-a-dummy, yang memiliki efek yang sama). Sangat membantu untuk kasus-kasus ketika Anda mungkin telah mengeluarkan DELETE FROM tbl_namepernyataan tetapi melupakan WHEREklausa tersebut. Biasanya, pernyataan seperti itu menghapus semua baris dari tabel. Dengan --safe-updates, Anda dapat menghapus baris hanya dengan menentukan nilai kunci yang mengidentifikasinya. Ini membantu mencegah kecelakaan.

Ketika Anda menggunakan --safe-updatesopsi, mysql mengeluarkan pernyataan berikut ketika terhubung ke server MySQL:

SET sql_safe_updates=1, sql_select_limit=1000, sql_max_join_size=1000000;

Aman untuk mengaktifkan opsi ini saat Anda berurusan dengan basis data produksi. Jika tidak, Anda harus sangat berhati-hati agar tidak secara tidak sengaja menghapus data penting.

Krishnadas PC
sumber