真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQL中怎么修改數(shù)據(jù)類型

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)MySQL中怎么修改數(shù)據(jù)類型,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

成都創(chuàng)新互聯(lián)公司專注于措勤網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供措勤營銷型網(wǎng)站建設(shè),措勤網(wǎng)站制作、措勤網(wǎng)頁設(shè)計(jì)、措勤網(wǎng)站官網(wǎng)定制、小程序設(shè)計(jì)服務(wù),打造措勤網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供措勤網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

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

所以現(xiàn)在的int數(shù)據(jù)類型已經(jīng)達(dá)到了最大值2 147 483 647。
修改數(shù)據(jù)類型,擴(kuò)展一般是可行的,但是這個(gè)環(huán)境MySQL版本還比較低,所以pt-osc的工具是別想了,而且20億的數(shù)據(jù)就算處理也得耗上不少的時(shí)間。
簡答了解了下問題,我一直糾結(jié)這個(gè)修改數(shù)據(jù)類型的操作影響時(shí)長。
20億的數(shù)據(jù)做這樣的操作,想必經(jīng)歷的人也不會(huì)太多,偏偏當(dāng)了友情支持,我登錄到指定的環(huán)境,仔細(xì)一看,這個(gè)表原來沒有20億的數(shù)據(jù),只是id遞增到了20億的級(jí)別,表里有幾百萬的數(shù)據(jù),對(duì)應(yīng)的數(shù)據(jù)文件看有500M左右,所以這個(gè)問題讓我懸著的心終于踏實(shí)了一些。
# 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
這個(gè)修改數(shù)據(jù)類型的操作持續(xù)了大概1分多鐘就結(jié)束了。
提供的語句如下:
> 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
查看線程的情況,可以看到存在這么一個(gè)copy to tmp table的操作,證明在后臺(tái)重建表數(shù)據(jù)。
MySQL中怎么修改數(shù)據(jù)類型
修改完成之后查看,發(fā)現(xiàn)有個(gè)地方不對(duì)勁,怎么沒有了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遞增,竟然拋出了錯(cuò)誤。
> 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'
就是這個(gè)錯(cuò)誤讓我糾結(jié)了半天。
而且稍后繼續(xù)嘗試,修改auto_increment的值,竟然沒有反應(yīng)。
> 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
這問題就很糾結(jié)了,修改成功,但是查看表定義沒有生效,查看數(shù)據(jù)字典里的遞增序列值還是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)
在經(jīng)過幾次嘗試之后,最后是采用下面的方式才修復(fù)了這個(gè)問題。
> 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
和開發(fā)的同事簡單溝通之后,沒過一會(huì)查看就發(fā)現(xiàn)數(shù)值是遞增了。
> select max(id) from activity_dj_actor_info_log;
+------------+
| max(id)    |
+------------+
| 2150195418 |
+------------+
而對(duì)于這個(gè)問題,自己也簡單總結(jié)了下,其實(shí)最開始處理的時(shí)候就不嚴(yán)謹(jǐn),導(dǎo)致了后面的不斷修復(fù),如果一步到位就不會(huì)有這么多的麻煩了。
所以在本地有簡單測試了下。

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;
插入一部分測試數(shù)據(jù)。
> 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
修改表字段數(shù)據(jù)類型
> 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中怎么修改數(shù)據(jù)類型了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)頁標(biāo)題:MySQL中怎么修改數(shù)據(jù)類型
文章URL:http://weahome.cn/article/jehpos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部