日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

禁止修改varchar到int|[运维规范]

發布時間:2024/8/26 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 禁止修改varchar到int|[运维规范] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在MySQL更改數據類型前一定要特別小心,分析一下是不是可行,另外在更改前,需要先進行備份,備份,備份!!!

環境描述

表結構:

CREATE TABLE `t_mobile` (`mobile_no` varchar(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8

寫入數據:

root@zhishutang:mysql3306.sock [zst]>insert into t_mobile(mobile_no) values('13501245755'),('18800108001'),('13996000001');

確認數據無誤:

root@zhishutang:mysql3306.sock [zst]>select * from t_mobile; +-------------+ | mobile_no | +-------------+ | 13501245755 | | 18800108001 | | 13996000001 | +-------------+ 3 rows in set (0.00 sec)

溢出

修改數類型:

root@zhishutang:mysql3306.sock [zst]>alter table t_mobile change mobile_no mobile_no int; Query OK, 3 rows affected, 3 warnings (0.02 sec) Records: 3 Duplicates: 0 Warnings: 3

查看警告:

root@zhishutang:mysql3306.sock [zst]>show warnings; +---------+------+----------------------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------------------+ | Warning | 1264 | Out of range value for column 'mobile_no' at row 1 | | Warning | 1264 | Out of range value for column 'mobile_no' at row 2 | | Warning | 1264 | Out of range value for column 'mobile_no' at row 3 | +---------+------+----------------------------------------------------+ 3 rows in set (0.00 sec)

到這里實質就可以宣布,死定了。數據已溢出。

查看數據:

root@zhishutang:mysql3306.sock [zst]>select * from t_mobile; +------------+ | mobile_no | +------------+ | 2147483647 | | 2147483647 | | 2147483647 | +------------+ 3 rows in set (0.00 sec)

這里真是的男人哭吧,哭吧, … 如果是線上環境,想死的心估計大家都有了,不是簡單的哭了。如果沒有備份,這么重要一例數據沒了,有可能意為著項目也有可能受到嚴重的影響。

這時也不要心存幻想在改回去就好,來看一下操作,請死心!!!

root@zhishutang:mysql3306.sock [zst]>alter table t_mobile change mobile_no mobile_no varchar(11); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0root@zhishutang:mysql3306.sock [zst]>select * from t_mobile; +------------+ | mobile_no | +------------+ | 2147483647 | | 2147483647 | | 2147483647 | +------------+ 3 rows in set (0.00 sec)

結論

  • 生產環境更數據類型明確提出: 不允許varchar 改成int.
  • 更改數據前一定要做好備份,無論是update,delete,或是數據類型更改。

操作Tips: 如保備份一列數據?

select pk , 修改的列 from tb where 條件 ;

用命令行記錄也可以,用outfile處理也行。

恢復可以用awk反向生成update語句:
cat bak.txt |awk ‘{print “update tb set 修改列名=“?1”;”}

大概這樣生成。 在執行恢復即可。

?

作者:吳炳錫 來源:http://wubx.net/ 聯系方式: wubingxi#163.com?


總結

以上是生活随笔為你收集整理的禁止修改varchar到int|[运维规范]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。