国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL分區表的局限和限制詳解

2024-07-24 12:52:20
字體:
來源:轉載
供稿:網友

禁止構建

分區表達式不支持以下幾種構建:

存儲過程,存儲函數,UDFS或者插件

聲明變量或者用戶變量

可以參考分區不支持的SQL函數

算術和邏輯運算符

分區表達式支持+,-,*算術運算,但是不支持DIV和/運算(還存在,可以查看Bug #30188, Bug #33182)。但是,結果必須是整形或者NULL(線性分區鍵除外,想了解更多信息,可以查看分區類型)。

分區表達式不支持位運算:|,&,^,<<,>>,~ .

HANDLER語句

在MySQL 5.7.1之前的分區表不支持HANDLER語句,以后的版本取消了這一限制。

服務器SQL模式

如果要用用戶自定義分區的表的話,需要注意的是,在創建分區表時的SQL模式是不保留的。在服務器SQL模式一章中已經討論過,大多數MySQL函數和運算符的結果可能會根據服務器SQL模式而改變。所以,一旦SQL模式在創建分區表后改變,可能導致這些表的行為發生重大變化,很容易導致數據丟失或者損壞。基于以上原因,強烈建議你在創建分區表后千萬不要修改服務器的SQL模式。

舉個例子來說明下上述情況:

1.錯誤處理

mysql> CREATE TABLE tn (c1 INT) -> PARTITION BY LIST(1 DIV c1) ( -> PARTITION p0 VALUES IN (NULL), -> PARTITION p1 VALUES IN (1) -> ); Query OK, 0 rows affected (0.05 sec)

MySQL默認除以0的結果是NULL,而不是報錯:

mysql> SELECT @@sql_mode;+------------+| @@sql_mode |+------------+| |+------------+1 row in set (0.00 sec) mysql> INSERT INTO tn VALUES (NULL), (0), (1);Query OK, 3 rows affected (0.00 sec)Records: 3 Duplicates: 0 Warnings: 0

然而如果我們修改SQL模式的話,就會報錯:

mysql> SET sql_mode='STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO';Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO tn VALUES (NULL), (0), (1);ERROR 1365 (22012): Division by 0

2.表輔助功能

有時候修改SQL模式可能會導致分區表不可用。比如有些表只有在SQL模式為NO_UNSIGNED_SUBTRACTION才發揮作用,比如:

mysql> SELECT @@sql_mode;+------------+| @@sql_mode |+------------+| |+------------+1 row in set (0.00 sec) mysql> CREATE TABLE tu (c1 BIGINT UNSIGNED) -> PARTITION BY RANGE(c1 - 10) ( -> PARTITION p0 VALUES LESS THAN (-5), -> PARTITION p1 VALUES LESS THAN (0), -> PARTITION p2 VALUES LESS THAN (5), -> PARTITION p3 VALUES LESS THAN (10), -> PARTITION p4 VALUES LESS THAN (MAXVALUE) -> );ERROR 1563 (HY000): Partition constant is out of partition function domain mysql> SET sql_mode='NO_UNSIGNED_SUBTRACTION';Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@sql_mode;+-------------------------+| @@sql_mode |+-------------------------+| NO_UNSIGNED_SUBTRACTION |+-------------------------+1 row in set (0.00 sec) mysql> CREATE TABLE tu (c1 BIGINT UNSIGNED) -> PARTITION BY RANGE(c1 - 10) ( -> PARTITION p0 VALUES LESS THAN (-5), -> PARTITION p1 VALUES LESS THAN (0), -> PARTITION p2 VALUES LESS THAN (5), -> PARTITION p3 VALUES LESS THAN (10), -> PARTITION p4 VALUES LESS THAN (MAXVALUE) -> ); Query OK, 0 rows affected (0.05 sec)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 仙居县| 陇西县| 华宁县| 肃北| 明星| 仁化县| 建德市| 镇原县| 福贡县| 巴里| 亚东县| 金坛市| 三明市| 玉林市| 德格县| 宜章县| 峨眉山市| 革吉县| 宜昌市| 延安市| 丹寨县| 汤原县| 游戏| 泾川县| 新蔡县| 原平市| 乳山市| 庆城县| 简阳市| 信宜市| 宁陕县| 大关县| 梧州市| 闽侯县| 鄂托克旗| 马公市| 正镶白旗| 永兴县| 丹阳市| 涡阳县| 抚远县|