【问题标题】:Mysql copying from varchar column to a decimal coulmnMysql从varchar列复制到十进制列
【发布时间】:2015-04-27 05:54:32
【问题描述】:

我在 MySQL 表(第一个表)中有一个列具有 varchar 数据类型,我使用 JDBC 驱动程序在提到的列上插入数值数据类型的数据。

为什么我选择这个类型的varchar数据类型? 因为我未能使用 JDBC 在数值列中插入值。

但是我决定创建另一个具有十进制数据类型列的表(第二个表)。

第一个表 varchar 列中插入的每个值都应该直接插入 进入第二个表格小数列。

我有两个问题:-

使用触发器从varchar列复制到decimal列是最好的解决方案吗?

如果我这样做,十进制列中的值是否可以正确升序排列?

请给点建议?

【问题讨论】:

    标签: mysql database-design triggers varchar decimal


    【解决方案1】:

    简单地复制它。

    tbl1 有 x VARCHAR(...)
    tbl2 有 x DECIMAL(...) (或 INT 或 FLOAT 或 ...)

    INSERT INTO tbl2 (..., x, ...)
        SELECT ..., x, ... FROM tbl1;
    

    字符串(例如,VARCHAR)会自动转换为数值,反之亦然。有很多警告:

    • '123.456' --> DECIMAL(9,2) 将存储 123.46
    • '123abc' --> 123 (decimal/int/float)
    • 'abc' --> 0
    • '$123' --> 0
    • '123,456' --> 123
    • '1e3' --> 1000(我认为)

    您甚至可以执行ALTER TABLE tbl MODIFY COLUMN x DECIMAL(11,2) NOT NULL; 或类似的操作来将其转换到位。 (在实际桌子上尝试之前请先试验一下。)

    【讨论】:

    • 将来是否需要触发才能将插入到表 1 中的复制值转换为表 2?在这种情况下使用触发器是最好的主意吗?
    • 也许我遗漏了一些东西,但我认为不需要触发器,也不需要两个表。首先修复现有表以使用 int/decimal/whatever。然后只需直接插入即可。上面的示例显示了如果您尝试插入格式错误的数字字符串会发生什么。你有什么调皮的弦吗?
    • 如果您要从表 1 转换到表 2,表 1 触发器是一个好主意,可以在转换期间使表 2 保持最新。转换完成后,触发器将不再需要。由于它将是表 1 上的触发器,因此它将与表一起被淘汰。
    • 表一用于接受通过JDBC插入的数据,表二用于显示按升序排列的数据,我对触发器的想法是将插入表一的值直接复制到表二,无需最终用户手动操作,为什么我不需要在插入触发器之后?
    • 如果您更改表一的数据类型,数字将转换为您INSERT 它们。而且您不需要触发器或表二。 (除非我仍然缺少某些东西。)
    猜你喜欢
    • 1970-01-01
    • 2020-12-14
    • 2021-03-14
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多