【发布时间】:2021-03-06 06:04:16
【问题描述】:
以下SQL语句将创建一个表t,列c1,其类型定义为bigint(21) unsigned,即函数INET_ATON的返回类型:
CREATE TABLE t AS SELECT INET_ATON('0.0.0.0') AS c1;
但该语句也插入了一行。我想知道是否有一种方法可以创建表并将其列的类型定义为某个函数的返回类型,而无需插入行。
我尝试了以下方法:
CREATE TABLE t LIKE SELECT INET_ATON('0.0.0.0') AS c1;
但这与 SQL 语法不匹配。
关于如何实现这一目标的任何想法?谢谢!
PS:任何标准的 SQL 语句都可以,MariaDB 或 MySQL 支持的语句也可以。
【问题讨论】:
-
你能告诉我这将是一件有用的事情吗?
-
@P.Salmon 这只是一个演示,本身没有用。但是在现实情况下,人们希望将某个函数的返回类型设置为列的类型,因为在设计上,列的值只能设置为函数的返回值。使用不显式声明类型的语句可以避免耦合硬代码。
-
你确定这是返回(数据)类型,而不是mysql根据返回的内容猜测吗?
-
@P.Salmon 对不起,你猜是什么意思?嵌套的selected子句被执行,返回类型为actual。