亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中怎么修改數據類型

發布時間:2021-08-05 15:29:11 來源:億速云 閱讀:471 作者:Leah 欄目:MySQL數據庫

這期內容當中小編將會給大家帶來有關MySQL中怎么修改數據類型,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

類型 大小 范圍(有符號) 范圍(無符號) 用途
TINYINT 1 字節 (-128,127) (0,255) 小整數值
SMALLINT 2 字節 (-32 768,32 767) (0,65 535) 大整數值
MEDIUMINT 3 字節 (-8 388 608,8 388 607) (0,16 777 215) 大整數值
INT或INTEGER 4 字節 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整數值
BIGINT 8 字節 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 極大整數值

所以現在的int數據類型已經達到了最大值2 147 483 647。
修改數據類型,擴展一般是可行的,但是這個環境MySQL版本還比較低,所以pt-osc的工具是別想了,而且20億的數據就算處理也得耗上不少的時間。
簡答了解了下問題,我一直糾結這個修改數據類型的操作影響時長。
20億的數據做這樣的操作,想必經歷的人也不會太多,偏偏當了友情支持,我登錄到指定的環境,仔細一看,這個表原來沒有20億的數據,只是id遞增到了20億的級別,表里有幾百萬的數據,對應的數據文件看有500M左右,所以這個問題讓我懸著的心終于踏實了一些。
# ll -h activity_dj_actor_info_log*
-rw-rw---- 1 mysql mysql 8.7K Sep 29  2014 activity_dj_actor_info_log.frm
-rw-rw---- 1 mysql mysql 560M Nov  4 19:05 activity_dj_actor_info_log.ibd
這個修改數據類型的操作持續了大概1分多鐘就結束了。
提供的語句如下:
> ALTER TABLE activity_dj_actor_info_log modify id  BIGINT;
Query OK, 3144626 rows affected (1 min 22.64 sec)
Records: 3144626  Duplicates: 0  Warnings: 0
查看線程的情況,可以看到存在這么一個copy to tmp table的操作,證明在后臺重建表數據。
MySQL中怎么修改數據類型
修改完成之后查看,發現有個地方不對勁,怎么沒有了auto_increment的屬性。
> show create table activity_dj_actor_info_log\G
*************************** 1. row ***************************
       Table: activity_dj_actor_info_log
Create Table: CREATE TABLE `activity_dj_actor_info_log` (
  `id` bigint(20) NOT NULL DEFAULT '0',
  `cnMaster` varchar(50) NOT NULL,
。。。
  PRIMARY KEY (`id`),
  UNIQUE KEY `dss_cnMaster` (`cnMaster`,`serverId`,`guid`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

使用下面的方式修改,讓字段id遞增,竟然拋出了錯誤。
> ALTER TABLE activity_dj_actor_info_log modify id  BIGINT AUTO_INCREMENT;
ERROR 1062 (23000): ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1' for key 'PRIMARY'
就是這個錯誤讓我糾結了半天。
而且稍后繼續嘗試,修改auto_increment的值,竟然沒有反應。
> ALTER TABLE activity_dj_actor_info_log AUTO_INCREMENT=2147483649;
Query OK, 3144627 rows affected (1 min 20.65 sec)
Records: 3144627  Duplicates: 0  Warnings: 0

> show create table activity_dj_actor_info_log\G
*************************** 1. row ***************************
       Table: activity_dj_actor_info_log
Create Table: CREATE TABLE `activity_dj_actor_info_log` (
  `id` bigint(20) NOT NULL DEFAULT '0',
  `cnMaster` varchar(50) NOT NULL,
 。。。
  PRIMARY KEY (`id`),
  UNIQUE KEY `dss_cnMaster` (`cnMaster`,`serverId`,`guid`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
這問題就很糾結了,修改成功,但是查看表定義沒有生效,查看數據字典里的遞增序列值還是NULL,證明自增序列沒有生效。
> SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name="activity_dj_actor_info_log";
+----------------+
| AUTO_INCREMENT |
+----------------+
|           NULL |
+----------------+
2 rows in set (0.00 sec)
在經過幾次嘗試之后,最后是采用下面的方式才修復了這個問題。
> alter table `activity_dj_actor_info_log` change `id` `id` bigint  NOT NULL AUTO_INCREMENT , drop primary key,add primary key(id);
ERROR 1062 (23000): ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1' for key 'PRIMARY'
> alter table `activity_dj_actor_info_log`  drop primary key;
Query OK, 3144627 rows affected (1 min 13.75 sec)
Records: 3144627  Duplicates: 0  Warnings: 0

> alter table `activity_dj_actor_info_log` change `id` `id` bigint  NOT NULL AUTO_INCREMENT , add primary key(id);
Query OK, 3144627 rows affected (1 min 32.32 sec)
Records: 3144627  Duplicates: 0  Warnings: 0

> show create table activity_dj_actor_info_log\G
*************************** 1. row ***************************
       Table: activity_dj_actor_info_log
Create Table: CREATE TABLE `activity_dj_actor_info_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `cnMaster` varchar(50) NOT NULL,
  。。。
  PRIMARY KEY (`id`),
  UNIQUE KEY `dss_cnMaster` (`cnMaster`,`serverId`,`guid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2150192178 DEFAULT CHARSET=utf8
和開發的同事簡單溝通之后,沒過一會查看就發現數值是遞增了。
> select max(id) from activity_dj_actor_info_log;
+------------+
| max(id)    |
+------------+
| 2150195418 |
+------------+
而對于這個問題,自己也簡單總結了下,其實最開始處理的時候就不嚴謹,導致了后面的不斷修復,如果一步到位就不會有這么多的麻煩了。
所以在本地有簡單測試了下。

CREATE TABLE `activity_dj_actor_info_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cnMaster` varchar(50) NOT NULL,
。。。
  PRIMARY KEY (`id`),
  UNIQUE KEY `dss_cnMaster` (`cnMaster`,`serverId`,`guid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2147483647 DEFAULT CHARSET=utf8;
插入一部分測試數據。
> insert into activity_dj_actor_info_log select *from activity_log.activity_dj_actor_info_log limit 1,1000;
Query OK, 1000 rows affected (0.07 sec)
Records: 1000  Duplicates: 0  Warnings: 0
修改表字段數據類型
> alter table activity_dj_actor_info_log modify  `id` bigint  NOT NULL AUTO_INCREMENT;
Query OK, 1000 rows affected (0.43 sec)
Records: 1000  Duplicates: 0  Warnings: 0
再次查看遞增序列就修改完善了。
> show create table activity_dj_actor_info_log;
| Table                      | Create Table      
| activity_dj_actor_info_log | CREATE TABLE `activity_dj_actor_info_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `cnMaster` varchar(50) NOT NULL,
  。。。
  PRIMARY KEY (`id`),
  UNIQUE KEY `dss_cnMaster` (`cnMaster`,`serverId`,`guid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2147483647 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)


上述就是小編為大家分享的MySQL中怎么修改數據類型了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巫溪县| 时尚| 轮台县| 衡水市| 邹平县| 登封市| 澄迈县| 余干县| 确山县| 沧州市| 许昌市| 靖边县| 嘉兴市| 新丰县| 武邑县| 苏尼特右旗| 德兴市| 永登县| 佛教| 正镶白旗| 新建县| 竹溪县| 胶州市| 扶余县| 明溪县| 彰化县| 临潭县| 会昌县| 高邑县| 韩城市| 青岛市| 通海县| 新巴尔虎左旗| 盘锦市| 深泽县| 芒康县| 无为县| 淳化县| 宜黄县| 云浮市| 肥乡县|