在mysql56中,当数据类型为date且非空时,是否可以设置默认约束为当前日期?如果可以又怎么设置?

1. 课本给的表分析

img

img

2. 在执行表2.3.4(订单表)的创建时

  • 原sql语句

-- 创建订单表
CREATE TABLE Orders(
    OrderID INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT'订单ID',
    ReceiptsCode VARCHAR(14) NOT NULL COMMENT'流水号',
    CONSTRAINT uk_index1 UNIQUE KEY(ReceiptsCode), 
    OrdersDate DATE NOT NULL DEFAULT SELECT CURRENT_DATE() COMMENT'订单日期',
    Amount DECIMAL(8,2) COMMENT'用户ID',
    UserID INT COMMENT'用户ID',
    CONSTRAINT fk_Orders_User FOREIGN KEY(UserID) REFERENCES `user`(UserID)
)
  • 报错语句
> 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT CURRENT_DATE() COMMENT'订单日期',
    Amount DECIMAL(8,2) COMMENT'用' at line 5
> 时间: 0s

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/760553
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:由前台向mysql数据库添加数据时,date类型传递的字段值为空,查询时报错
  • 除此之外, 这篇博客: 加密解密,MySQL单行函数,数学函数字符串日期时间,流程控制,完整详细可收藏查询SQL中的 2.2 角度与弧度 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 函数用法
    RADIANS(x)将角度转化为弧度,参数x为角度值
    DEGREES(x)将弧度转化为角度,参数x为弧度值
    SELECT RADIANS(180),DEGREES(PI())
    FROM DUAL;
    

    在这里插入图片描述

  • 您还可以看一下 李强老师的MySQL数据库优化实践课程中的 课时7 慢查询开启-慢查询日志查看-慢查询分析命令小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    可以为非空 date 数据类型设置默认约束为当前日期。可以使用 DEFAULT 子句来设置默认约束,例如:

    CREATE TABLE mytable (
       mydate DATE NOT NULL DEFAULT CURRENT_DATE()
    );
    

    其中,CURRENT_DATE() 函数返回当前日期,只包含年月日。

    以下是课本中用于分析表的相关信息:

    • DESCRIBE tablename;:显示表的结构。
    • SHOW INDEX FROM tablename;:显示索引信息。
    • EXPLAIN SELECT * FROM tablename WHERE ...;:分析 SELECT 语句的执行过程。

    以下是创建订单表(表2.3.4)时使用的原 SQL 语句:

    CREATE TABLE orders (
       order_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
       customer_id INT NOT NULL,
       order_date DATE NOT NULL DEFAULT CURRENT_DATE(),
       amount FLOAT DEFAULT NULL,
       FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
    );
    

    其中,order_date 列的默认值为当前日期,使用了 CURRENT_DATE() 函数。报错语句没有提供,如果出现报错可以查看 MySQL 的错误日志或者慢查询日志来进行排查。

可以看下这个问题的回答https://ask.csdn.net/questions/760553

DEFAULT CURRENT_DATE(),不要SELECT