【问题标题】:Create table with some column's type defined as some function's returning type创建表,将某些列类型定义为某个函数的返回类型
【发布时间】: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。

标签: mysql sql mariadb


【解决方案1】:

使用 where 子句创建一个永远不会为真的条件,如下所示:

CREATE TABLE t AS SELECT INET_ATON('0.0.0.0') AS c1 where 1=2;

这将创建表而不向其中添加任何行。

【讨论】:

  • 好点!谢谢!但我仍然想知道是否有一个 dedicated 语法来实现这一点。如果没有其他提供专用语法的答案。我要选这个。
  • 其实我之前没用过这个。在阅读您的问题时,这个想法就来了。它正在工作。非常感谢这个问题。让我们尝试从 google 中找到更好的东西。
猜你喜欢
  • 2019-01-22
  • 1970-01-01
  • 2022-08-19
  • 2016-05-17
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
相关资源
最近更新 更多