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

MySQL無法修改主鍵的問題分析及解決方案

 更新時間:2024年01月23日 10:21:59   作者:愛可生開源社區(qū)  
最近同事咨詢了一個問題,TDSQL(for MySQL)中的某張表主鍵需要改為聯(lián)合主鍵,是否必須先刪除現(xiàn)有的主鍵?因為刪除主鍵時,提示這個錯誤,所以本文給大家介紹了MySQL無法修改主鍵的問題分析及解決方案,需要的朋友可以參考下

問題背景

同事咨詢了一個問題,TDSQL(for MySQL)中的某張表主鍵需要改為聯(lián)合主鍵,是否必須先刪除現(xiàn)有的主鍵?因為刪除主鍵時,提示這個錯誤。

[test]> alter table test drop primary key;
ERROR 3750 (HY000): Unable to create or change a table without a primary key, 
when the system variable 'sql_require_primary_key' is set. 
Add a primary key to the table or unset this variable to avoid this message. 
Note that tables without a primary key can cause performance problems in row-based replication, 
so please consult your DBA before changing this setting.

問題分析

從提示上可以看到具體的原因,當設(shè)置了 sql_require_primary_key 參數(shù),不能創(chuàng)建或改變一張沒有主鍵的表。解決方案是增加主鍵或者刪除此參數(shù)避免錯誤,同時提醒了,如果表無主鍵,可能會導致基于行的復制產(chǎn)生性能問題。

sql_require_primary_key 參數(shù)控制的是強制檢查主鍵,可以動態(tài)修改。

參數(shù)名稱:sql_require_primary_key
作用范圍:Global & Session
動態(tài)修改:Yes
默認值:OFF
該參數(shù)設(shè)置為ON時,SQL語句create table創(chuàng)建新表或者alter語句對已存在的表進行修改,將會強制檢查表中是否包含主鍵,如果沒有主鍵,則會報錯。

針對這個場景,是否還可以將主鍵改為聯(lián)合主鍵?

創(chuàng)建一張測試表,主鍵初始是 id。

bisal@mysqldb:  [test]> create table t_primary_key (id int, c1 varchar(1), c2 varchar(1), constraint pk_t_id primary key(id));
Query OK, 0 rows affected (0.07 sec)

解決方案

方案一

既然 sql_require_primary_key 參數(shù)控制了強制檢驗主鍵,而且又是可動態(tài)修改的,臨時關(guān)閉,再打開即可。

bisal@mysqldb:  [test]> alter table t_primary_key drop primary key;
ERROR 3750 (HY000): Unable to create or change a table without a primary key, when the system variable 'sql_require_primary_key' is set. Add a primary key to the table or unset this variable to avo

bisal@mysqldb:  [(none)]> show variables like '%sql_require%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| sql_require_primary_key | OFF   |
+-------------------------+-------+
1 row in set (0.00 sec)

bisal@mysqldb:  [(none)]> set sql_require_primary_key = ON;
Query OK, 0 rows affected (0.02 sec)

bisal@mysqldb:  [(none)]> show variables like '%sql_require%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| sql_require_primary_key | ON    |
+-------------------------+-------+
1 row in set (0.00 sec)

bisal@mysqldb:  [test]> alter table t_primary_key drop primary key;
Query OK, 0 rows affected (0.10 sec)
Records: 0  Duplicates: 0  Warnings: 0

但可能的風險,就是刪除主鍵,再創(chuàng)建主鍵的這段時間內(nèi),如果有主鍵字段的重復數(shù)據(jù)插入,就可能導致創(chuàng)建新的主鍵不成功。另外,鑒于該參數(shù)設(shè)置成為非默認值,創(chuàng)建完主鍵,需要記得改過來。

方案二

如果 sql_require_primary_key 設(shè)置為 ON,意思就是表任何的時刻都需要有主鍵,不能出現(xiàn)真空。變更主鍵的操作,實際包含了刪除原主鍵和創(chuàng)建新的主鍵兩個步驟,因此只需要將兩個步驟合并成一個即可。

MySQL 支持多個語句一次執(zhí)行,因此只需要將 alter table ... drop primary keyadd constraint ... primary key ... 合成一條語句。

bisal@mysqldb:  [test]> alter table t_primary_key drop primary key, add constraint pk_t_01 primary key (id, c1);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

總結(jié)

從這個問題可以看出來,MySQL 的參數(shù)控制粒度很細,但通過各種應(yīng)對方法,可以針對性解決特定的場景問題,但前提還是對參數(shù)的意義,以及場景的需求能充分了解,才能找到合適的解決方案。

關(guān)于 SQLE

SQLE 是一款全方位的 SQL 質(zhì)量管理平臺,覆蓋開發(fā)至生產(chǎn)環(huán)境的 SQL 審核和管理。支持主流的開源、商業(yè)、國產(chǎn)數(shù)據(jù)庫,為開發(fā)和運維提供流程自動化能力,提升上線效率,提高數(shù)據(jù)質(zhì)量。

以上就是MySQL無法修改主鍵的問題分析及解決方案的詳細內(nèi)容,更多關(guān)于MySQL無法修改主鍵的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mysql查詢上下級機構(gòu)的方法實例

    mysql查詢上下級機構(gòu)的方法實例

    大家應(yīng)該都知道表里有上下級機構(gòu)的,下面這篇文章主要給大家介紹了關(guān)于mysql查詢上下級機構(gòu)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • 為什么MySQL分頁用limit會越來越慢

    為什么MySQL分頁用limit會越來越慢

    在mysql中l(wèi)imit可以實現(xiàn)快速分頁,但是如果數(shù)據(jù)到了幾百萬時我們的limit必須優(yōu)化才能有效的合理的實現(xiàn)分頁了,否則可能卡死你的服務(wù)器
    2021-07-07
  • MySQL回表查詢與索引覆蓋的區(qū)別

    MySQL回表查詢與索引覆蓋的區(qū)別

    本文主要介紹了MySQL回表查詢與索引覆蓋的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • 獲取MySQL表中字段的最長長度方式

    獲取MySQL表中字段的最長長度方式

    文章介紹了如何在MySQL中獲取表字段的最大長度,分為字段定義的最大允許長度和字段中已存儲數(shù)據(jù)的實際最大長度兩種場景,通過查詢系統(tǒng)信息表和使用字符串長度計算函數(shù),可以準確獲取字段的最大長度,同時提供了具體的SQL示例和注意事項
    2026-02-02
  • MySQL高性能實現(xiàn)Canal數(shù)據(jù)同步神器

    MySQL高性能實現(xiàn)Canal數(shù)據(jù)同步神器

    本文主要介紹了MySQL高性能實現(xiàn)Canal數(shù)據(jù)同步神器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • 詳解MySQL主從復制及讀寫分離

    詳解MySQL主從復制及讀寫分離

    這篇文章主要介紹了詳解MySQL主從復制及讀寫分離,文中有非常詳細的代碼示例,對正在學習mysql的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • mysql 5.7.17 安裝圖文教程(windows)

    mysql 5.7.17 安裝圖文教程(windows)

    這篇文章主要介紹了windows下mysql 5.7.17 安裝圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 對MySQL日志操作的一些基本命令總結(jié)

    對MySQL日志操作的一些基本命令總結(jié)

    這篇文章主要介紹了對MySQL日志操作的一些基本命令總結(jié),其中重點講述了二進制日志文件的相關(guān)方面,需要的朋友可以參考下
    2015-11-11
  • mysql 卡死 大部分線程長時間處于sending data的狀態(tài)

    mysql 卡死 大部分線程長時間處于sending data的狀態(tài)

    首先說明一下,這是個無頭的案子,雖然問題貌似解決了,不過到現(xiàn)在我也沒有答案,只是把這個問題拿出來晾晾
    2008-11-11
  • mysql如何配置secure_file_priv

    mysql如何配置secure_file_priv

    這篇文章主要介紹了mysql如何配置secure_file_priv問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論

绩溪县| 磴口县| 逊克县| 富顺县| 图木舒克市| 南郑县| 五指山市| 延寿县| 油尖旺区| 庆安县| 阳曲县| 隆尧县| 南涧| 朔州市| 陕西省| 正镶白旗| 洪江市| 崇信县| 阿拉善左旗| 玉屏| 区。| 陇西县| 同仁县| 孝义市| 仁寿县| 林州市| 阜宁县| 南和县| 孝感市| 繁昌县| 灵石县| 黄冈市| 砀山县| 通城县| 大渡口区| 黔江区| 南召县| 镇巴县| 桦甸市| 定州市| 永德县|