› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
patrickstar
V2EX  ›  MySQL

MySQL 一个表两个 timestamp 字段到底该如何定义才正确啊

  •  
  •   patrickstar · Mar 20, 2016 · 7253 views
    This topic created in 3849 days ago, the information mentioned may be changed or developed.
    CentOS 7 + MySQL 5.7 community

    基本没接触数据库,网上的看了半天也没太看懂
    我需要用别人写的 sql 在 MySQL 中建立一个表,但是这段语句 accessed 字段死活报错

    CREATE TABLE IF NOT EXISTS access_address (
    user varchar(255) default NULL,
    address varchar(255) default NULL,
    netmask varchar(255) default 'FF.FF.FF.FF',
    updated timestamp NOT NULL,
    accessed timestamp NOT NULL default CURRENT_TIMESTAMP
    ) ENGINE=MyISAM;
    12 replies  •  2016-03-20 22:01:03 +08:00
    yemoluo
        1
    yemoluo  
       Mar 20, 2016
    我这里没报错,你把错误贴出来
    kn007
        2
    kn007  
       Mar 20, 2016
    我记得 5.7 的 SQLMODE 默认禁用了不安全的 TIMESTAMP
    kn007
        3
    kn007  
       Mar 20, 2016
    比如 0000-00-00 00:00:00 这种。
    重定义下 sqlmode 就行了
    patrickstar
        4
    patrickstar  
    OP
       Mar 20, 2016
    @GTim 'create_db_tables.sql': Invalid default value for 'accessed'
    pubby
        5
    pubby  
       Mar 20, 2016
    设置 sql_mode NO_ENGINE_SUBSTITUTION 试试

    my.cnf 加上
    sql-mode="NO_ENGINE_SUBSTITUTION"
    patrickstar
        6
    patrickstar  
    OP
       Mar 20, 2016
    @kn007 改成 accessed timestamp NOT NULL default '0000-00-00 00:00:00' 也不行,看来得配置 sql-mode 试一下
    patrickstar
        7
    patrickstar  
    OP
       Mar 20, 2016
    @pubby 谢谢,我晚上回去试一下
    kn007
        8
    kn007  
       Mar 20, 2016   ❤️ 1
    @patrickstar 。。。肯定不是这样啊,我晕。

    禁用了不安全的 TIMESTAMP ,比如 0000-00-00 00:00:00 这种。

    句子要这样看,不好意思。。

    定义下 sqlmode 为: sql_mode="ONLY_FULL_GROUP_BY,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    wingyiu
        9
    wingyiu  
       Mar 20, 2016
    CREATE TABLE IF NOT EXISTS access_address (
    user varchar(255) default NULL,
    address varchar(255) default NULL,
    netmask varchar(255) default 'FF.FF.FF.FF',
    updated int(11) NOT NULL,
    accessed int(11) NOT NULL
    ) ENGINE=MyISAM;

    INSERT ... ... VALUES( ...., UNIX_TIMESTAMP())
    soli
        10
    soli  
       Mar 20, 2016
    好像只能第一个 timestamp 类型是 『 default CURRENT_TIMESTAMP 』。

    不过我这里如下定义是没问题的:

    CREATE TABLE xxx (
    ...

    ctime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    mtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    );
    Schaffer
        11
    Schaffer  
       Mar 20, 2016
    `create_time` timestamp not null default current_timestamp,
    `update_time` timestamp not null default current_timestamp on update current_timestamp

    mysql 版本:
    mysql Ver 14.14 Distrib 5.7.11, for osx10.11 (x86_64) using EditLine wrapper
    patrickstar
        12
    patrickstar  
    OP
       Mar 20, 2016
    @kn007 增加了 sql_mode 就可以了,谢谢
    @soli 明天我再试一下修改字段属性的办法
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   944 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 23:39 · PVG 07:39 · LAX 16:39 · JFK 19:39
    ♥ Do have faith in what you're doing.