【问题标题】:Infinidb-" `CREATE_TIMESTAMP` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" giving errorInfinidb-" `CREATE_TIMESTAMP` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" 给出错误
【发布时间】:2014-03-16 18:14:50
【问题描述】:

我正在尝试将数据库从 mysql 移植到 infinidb。但在移植时出现错误(标题中描述)。

`CREATE_TIMESTAMP` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

在 mysql 中有效,但在 infinidb 中无效。错误是:错误代码:138。 infinidb 不支持语法或数据类型。任何帮助将不胜感激。

【问题讨论】:

    标签: mysql database database-design sqldatatypes infinidb


    【解决方案1】:

    这是您尝试的完整 SQL 语句吗?我能够使用:

    create table test (`CREATE_TIMESTAMP` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
    

    这是控制台输出

    [root@centos6 bin]# idbmysql 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 12
    Server version: 5.1.73 Calpont InfiniDB 4.5 Alpha
    
    Copyright (c) 2014, InfiniDB, Inc. and/or its affiliates. All rights reserved.
    Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
    
    InfiniDB is a registered trademark of InfiniDB, Inc. and/or its affiliates.
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> use test;
    Database changed
    mysql> create table test (`CREATE_TIMESTAMP` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> describe test;
    +------------------+-----------+------+-----+-------------------+-----------------------------+
    | Field            | Type      | Null | Key | Default           | Extra                       |
    +------------------+-----------+------+-----+-------------------+-----------------------------+
    | CREATE_TIMESTAMP | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
    +------------------+-----------+------+-----+-------------------+-----------------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    

    如果这不起作用,或者您正在以不同的方式尝试语法,请告诉我。还有你在尝试什么版本的 InfiniDB?

    谢谢!

    【讨论】:

      【解决方案2】:

      您似乎无法在 InfiniDB 中使用时间戳数据类型。我的版本与@mhoglan 相同,但该查询似乎有一点错误:

      mysql> create table test (`CREATE_TIMESTAMP` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
      Query OK, 0 rows affected (0.00 sec) 
      

      最后缺少 "engine=infinidb;",这将在 infinidb 中创建表。 相反,该表是使用 MySQL 的默认引擎(MyISAM 或其他)创建的。

      mysql> create table test (`CREATE_TIMESTAMP` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) engine=infinidb;
      ERROR 138 (HY000): The syntax or the data type(s) is not supported by InfiniDB. Please check the InfiniDB syntax guide for supported syntax or data types.
      

      如您所见,添加 engine=infinidb 失败。

      如果您可以使用 datetime 代替,那可能是可行的方法;现在似乎不支持时间戳:(

      【讨论】:

        【解决方案3】:

        我猜这是 InfiniDB 中不允许的 NOT NULL 约束。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-26
          • 2016-10-23
          • 1970-01-01
          • 1970-01-01
          • 2016-05-30
          • 2011-09-29
          • 2023-03-22
          • 2019-12-09
          相关资源
          最近更新 更多