最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL sql_safe_updates參數詳解

 更新時間:2024年07月11日 11:18:02   作者:zxrhhm  
sql_safe_updates 是 MySQL 中的一個系統(tǒng)變量,用于控制 MySQL 服務器是否允許在沒有使用 KEY 或 LIMIT 子句的 UPDATE 或 DELETE 語句上執(zhí)行更新或刪除操作,這篇文章主要介紹了MySQL sql_safe_updates參數,需要的朋友可以參考下

sql_safe_updates 是 MySQL 中的一個系統(tǒng)變量,用于控制 MySQL 服務器是否允許在沒有使用 KEY 或 LIMIT 子句的 UPDATE 或 DELETE 語句上執(zhí)行更新或刪除操作。當這個變量被設置為 ON 時,MySQL 會拒絕那些可能影響到表中大量行的 UPDATE 或 DELETE 語句,除非這些語句明確使用了 WHERE 子句中的 KEY(如主鍵或唯一索引)或者 LIMIT 子句來限制影響的行數。

這樣做的目的是為了防止由于疏忽或錯誤編寫的 SQL 語句而導致大量數據的意外丟失或修改。

如何設置 sql_safe_updates

你可以通過幾種方式設置 sql_safe_updates:

全局級別:

你可以通過修改 MySQL 的配置文件(如 my.cnf 或 my.ini,取決于你的操作系統(tǒng)和 MySQL 版本)來永久設置這個變量。但是,請注意,直接在配置文件中設置 sql_safe_updates 可能不被所有 MySQL 版本支持,或者可能需要以不同的方式配置(如通過插件或其他系統(tǒng)變量)。
一種更常見的方法是使用 MySQL 的 SET GLOBAL 語句在運行時設置它,但這只會影響新的連接。例如:

SET GLOBAL sql_safe_updates = 1;

但是,請注意,直接設置全局變量可能需要管理員權限,并且這個更改不會影響已經存在的會話。

會話級別:

你可以通過在你的 MySQL 會話中執(zhí)行以下 SQL 語句來設置 sql_safe_updates:

SET SESSION sql_safe_updates = 1;
或者登錄時加上--safe-updates 
mysql -uroot -p --safe-updates 

這會影響當前會話中的后續(xù)操作,但不會影響到其他會話或全局設置。

注意事項

在啟用 sql_safe_updates 后,如果你嘗試執(zhí)行一個沒有 KEY 或 LIMIT 的 UPDATE 或 DELETE 語句,MySQL 將拒絕該操作并返回錯誤。

(root@localhost)[superdb]> show index from dept;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| dept  |          0 | PRIMARY  |            1 | deptno      | A         |           4 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
1 row in set (0.13 sec)
(root@localhost)[superdb]> update dept set loc='sz';
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. 
  • 并非所有 MySQL 部署都會默認啟用 sql_safe_updates。它通常是由數據庫管理員或開發(fā)者根據特定的安全要求來配置的。
  • 在某些情況下,你可能需要臨時禁用 sql_safe_updates 以執(zhí)行特定的批量更新或刪除操作。在這種情況下,你可以在會話級別設置 sql_safe_updates = 0,但請務必小心,確保你的 SQL 語句是安全的,不會意外地影響大量數據。

總之,sql_safe_updates 是一個有用的安全特性,可以幫助防止由于疏忽或錯誤導致的數據丟失。然而,它也要求開發(fā)者和數據庫管理員更加注意他們的 SQL 語句,以確保它們的安全性和準確性。

官方解釋

If set to 1, MySQL aborts UPDATE or DELETE statements that do not use a key in the WHERE clause or a LIMIT clause. (Specifically, UPDATE statements must have a WHERE clause that uses a key or a LIMIT clause, or both. DELETE statements must have both.) This makes it possible to catch UPDATE or DELETE statements where keys are not used properly and that would probably change or delete a large number of rows. The default value is 0.

當 sql_safe_updates 設置為 1 時。

  • update 語句必須滿足如下條件之一才能執(zhí)行成功:
    • update 語句使用 where,并且 where 條件中必須有索引列;
    • update 語句使用 limit;
    • update 語句同時使用 where 和 limit,此時 where 條件中可以不帶有索引列;
(root@localhost)[superdb]> update dept set loc='sz' limit 1;
Query OK, 1 row affected (0.10 sec)
Rows matched: 1  Changed: 1  Warnings: 0
(root@localhost)[superdb]> select * from dept;
+--------+------------+---------+
| deptno | dname      | loc     |
+--------+------------+---------+
|     10 | ACCOUNTING | sz      |
|     20 | RESEARCH   | DALLAS  |
|     30 | SALES      | CHICAGO |
|     40 | OPERATIONS | BOSTON  |
+--------+------------+---------+
4 rows in set (0.00 sec)
(root@localhost)[superdb]> update dept set loc='NEW YORK' limit 1;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0
(root@localhost)[superdb]> update dept set loc='NEW YORK' where deptno=10;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0
(root@localhost)[superdb]> select * from dept;
+--------+------------+----------+
| deptno | dname      | loc      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
4 rows in set (0.00 sec)
(root@localhost)[superdb]> update dept set loc='NEW YORK' where deptno=10 limit 2;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0
(root@localhost)[superdb]> select * from dept;
+--------+------------+----------+
| deptno | dname      | loc      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
4 rows in set (0.00 sec)
  • delete 語句必須滿足以下條件能執(zhí)行成功:
  • delete 語句同時使用 where 條件中帶有索引列
  • delete 語句同時使用 where 條件中帶有索引列 及 limit
  • delete 語句同時使用 where 和 limit,此時 where 條件中可以不帶有索引列;
(root@localhost)[superdb]> insert into dept values(50,'sz','hk');
Query OK, 1 row affected (0.01 sec)
-- 同時使用 where 和 limit,此時 where 條件中可以有索引列
(root@localhost)[superdb]> delete from dept where deptno=50 limit 1;
Query OK, 1 row affected (0.00 sec)
(root@localhost)[superdb]> insert into dept values(50,'sz','hk');
Query OK, 1 row affected (0.00 sec)
-- 僅使用 where條件中是索引列
(root@localhost)[superdb]> delete from dept where deptno=50;
Query OK, 1 row affected (0.01 sec)
(root@localhost)[superdb]> insert into dept values(50,'sz','hk');
Query OK, 1 row affected (0.00 sec)
-- dname不是索引列,因此無法刪除操作
(root@localhost)[superdb]> delete from dept where dname='sz';
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. 
-- 同時使用 where 和 limit,此時 where 條件中沒有索引列
(root@localhost)[superdb]> delete from dept where dname='sz' limit 1;
Query OK, 1 row affected (0.05 sec)
(root@localhost)[superdb]> select * from dept;
+--------+------------+----------+
| deptno | dname      | loc      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
4 rows in set (0.00 sec)
(root@localhost)[superdb]> show index from dept;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| dept  |          0 | PRIMARY  |            1 | deptno      | A         |           4 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
1 row in set (0.13 sec)

如果 where 條件帶上了索引列,但是優(yōu)化器最終掃描選擇的是全表,而不是索引的話,我們可以使用 force index([index_name]) 可以告訴優(yōu)化器使用哪個索引,以此避免有幾率鎖全表帶來的隱患。

到此這篇關于MySQL sql_safe_updates參數的文章就介紹到這了,更多相關mysql sql_safe_updates參數內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • mysql?timestamp字段規(guī)范使用詳情

    mysql?timestamp字段規(guī)范使用詳情

    這篇文章主要介紹了mysql?timestamp字段規(guī)范使用詳情,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • MySql中怎樣查詢表是否被鎖

    MySql中怎樣查詢表是否被鎖

    這篇文章主要介紹了MySql中怎樣查詢表是否被鎖問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • mysql設置默認值無效問題及解決

    mysql設置默認值無效問題及解決

    這篇文章主要介紹了mysql設置默認值無效問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • MYSQL 修改root密碼命令小結

    MYSQL 修改root密碼命令小結

    MYSQL 修改root密碼命令小結,需要的朋友可以參考下。
    2011-10-10
  • Mysql事務與存儲引擎全解(概念、原理、代碼示例)

    Mysql事務與存儲引擎全解(概念、原理、代碼示例)

    本文講解了MySQL事務與存儲引擎的相關知識點,圍繞圖片中的知識點,從概念、原理、代碼示例三個維度,帶你徹底掌握 MySQL 事務與存儲引擎,感興趣的朋友跟隨小編一起看看吧
    2026-04-04
  • MySQL通透詳解架構設計

    MySQL通透詳解架構設計

    這篇文章主要介紹了MySQL架構設計相關基礎與原則,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2022-02-02
  • MyISAM和InnoDB引擎優(yōu)化分析

    MyISAM和InnoDB引擎優(yōu)化分析

    這幾天在學習mysql數據庫的優(yōu)化并在自己的服務器上進行設置,喻名堂主要學習了MyISAM和InnoDB兩種引擎的優(yōu)化方法,需要了解跟多的朋友可以參考下
    2012-11-11
  • 手把手帶你徹底卸載MySQL數據庫

    手把手帶你徹底卸載MySQL數據庫

    相信大家都因為各種各樣的原因可能需要卸載MySQL或者卸載重裝,但是如果MySQL不能清理干凈的話是很容易出現問題的,這篇文章主要給大家介紹了關于如何徹底卸載MySQL數據庫的相關資料,需要的朋友可以參考下
    2022-06-06
  • Mysql優(yōu)化技巧之Limit查詢的優(yōu)化分析

    Mysql優(yōu)化技巧之Limit查詢的優(yōu)化分析

    這篇文章主要給大家介紹了關于Mysql優(yōu)化技巧之Limit查詢的優(yōu)化分析,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Mysql具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-07-07
  • Mysql中mvcc各場景理解應用

    Mysql中mvcc各場景理解應用

    這篇文章主要為大家介紹了Mysql中mvcc各場景理解應用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08

最新評論

象山县| 永康市| 龙山县| 西丰县| 巫溪县| 德昌县| 云南省| 宣威市| 宁陵县| 青岛市| 余江县| 当涂县| 阿拉善左旗| 景宁| 泾源县| 博客| 定西市| 广安市| 邵阳市| 岳西县| 咸阳市| 株洲市| 林西县| 宽城| 九寨沟县| 竹山县| 孟连| 保山市| 德安县| 宁蒗| 东阳市| 平塘县| 芷江| 滨海县| 治多县| 尤溪县| 隆德县| 津南区| 永兴县| 伽师县| 三河市|