【问题标题】:MariaDB / MYSql non-descript syntax error with update on duplicate keyMariaDB / MYSql 非描述语法错误,重复键更新
【发布时间】:2013-02-25 18:54:21
【问题描述】:

我收到一个非常非描述性的错误:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'VALUES (order_site_id, order_id, business_email, business_domain, sm_type, activ' at line 1

这是插入/更新

INSERT INTO table 
(
    id,
    order_site_id,
    order_id,
    business_email,
    business_domain,
    sm_type,
    active,
    code,
    sm_auth,
    installed,
    created,
    cancelled,
    uninstalled,
    updated
) VALUES (
        1,
        2,
        1,
        'jd.daniel@domain.com',
        'domain.com',
        'farce',
        'N',
        'a3yhegy',
        '55f933dad8a389cf760d39df01df923e',
        '0000-00-00 00:00:00',
        '2013-02-20 11:21:00',
        '0000-00-00 00:00:00',
        '0000-00-00 00:00:00',
        '2013-02-20 11:21:00'
    ), (
        2,
        2,
        2,
        'bob.allen@domain.com',
        'domain.com',
        'farce',
        'N',
        'e4eqere',
        '08d2ab294466864d3453201be3e4a391',
        '0000-00-00 00:00:00',
        '2013-02-20 11:37:45',
        '0000-00-00 00:00:00',
        '0000-00-00 00:00:00',
        '2013-02-20 11:37:45'
    ), (
        3,
        2,
        3,
        'william.grey@domain.com',
        'domain.com',
        'farce',
        'N',
        '8yme3ud',
        'c52b2cf4a6a5ceab503fe71c45d9e5da',
        '0000-00-00 00:00:00',
        '2013-02-20 11:38:28',
        '0000-00-00 00:00:00',
        '0000-00-00 00:00:00',
        '2013-02-20 11:38:28'
    ), (
        4,
        2,
        4,
        'jane.doe@domain.com',
        'domain.com',
        'farce',
        'N',
        'zuzuquz',
        'c30dbfda67a0016d810b774e08e077c8',
        '0000-00-00 00:00:00',
        '2013-02-20 11:42:31',
        '0000-00-00 00:00:00',
        '0000-00-00 00:00:00',
        '2013-02-20 11:42:31'
    ), (
        5,
        2,
        5,
        'john.smith@domain.com',
        'domain.com',
        'farce',
        'N',
        'nyruqu4',
        'c376194d36d5706a6ca343dc3a06248d',
        '0000-00-0000:00:00',
        '2013-02-20 11:43:29',
        '0000-00-00 00:00:00',
        '0000-00-00 00:00:00',
        '2013-02-20 11:43:29'
) ON DUPLICATE KEY UPDATE VALUES (
    order_site_id,
    order_id,
    business_email,
    business_domain,
    sm_type,
    active,
    code,
    sm_auth,
    installed,
    created,
    cancelled,
    uninstalled,
    updated
);

【问题讨论】:

    标签: mysql sql-update mariadb on-duplicate-key


    【解决方案1】:

    您不要在 ON DUPLICATE KEY UPDATE 中使用 VALUES 子句。

    语法应该更像UPDATE语法:

    INSERT INTO table (id, order_site_id, order_id, ...) 
    VALUES (1, 2, 1, ...), (2, 2, 2, ...), ...more tuples...
    ON DUPLICATE KEY UPDATE 
    SET order_site_id = <expr>,
        order_id = <expr>,
        ...other column assignments...
    

    http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html

    如果您只想在重复键的情况下保留现有的列值,则应考虑使用 INSERT IGNORE 而不是 ON DUPLICATE KEY UPDATE 和无操作更新。

    【讨论】:

    猜你喜欢
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    相关资源
    最近更新 更多