2015-05-04 61 views
-1

目前MySQL中的balance_amount列使用的是double类型,它包含的值如11.28839999999999。 我想将这些值舍入到2个小数位成为11.29,并且我想要对系统中的所有其他80个表执行批量更新,以便它仅显示2个小数位。之后,我想将其从double更改为decimal (10,2)类型。批量更新mysql表十进制值和更改列字段类型

CREATE TABLE IF NOT EXISTS `account` (
    `account_id` varchar(15) NOT NULL, 
    `description` varchar(100) DEFAULT NULL, 
    `balance_amount` double DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

那么我该如何实现呢?

+0

80桌? Crikey。将你的DDL导出到一个文本文件。运行查找并替换双重默认空值,然后重新导入。保持备份。 – Strawberry

+0

这不起作用,因为值将被截断。导出到DDL并从那里运行更改,我之前做过。 11.2883999999999的值变为11.28 –

+0

你说你想要(10,2)。你认为会发生什么? – Strawberry

回答

0

您可以使用每个圆桌相应栏目为2位小数:

Update <table-name> SET <column-name> = ROUND(<column-name>, 2); 

每个表然后改变相应的列是一个DECIMAL(10, 2)

ALTER TABLE `<table-name>` CHANGE COLUMN `<column-name>` `<column-name>` DECIMAL(10,2) NULL DEFAULT NULL ; 

不过这是后话你应该在你的维护窗口中进行操作,而不是在现场工作,你应该在备份你的数据库作为灾难管理措施之前这样做。

+0

第一步是多余的。祝你好运重复这80次:-( – Strawberry

+0

@Strawberry冗余在? –

+0

如在不必要的。 – Strawberry