mysql - 创建表并将查询指定为字段的默认值

标签 mysql sql database

CREATE TABLE `williamhill` (
    `id` VARCHAR(50) NULL,
    `nick` VARCHAR(50) NULL,
    `password` VARCHAR(50) NULL DEFAULT (SELECT default_password FROM person p WHERE p.id = id),
    `Colonna 4` VARCHAR(50) NULL
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB

我怎样才能在 MYSQL 中做类似的事情?如果在创建新行期间未指定任何值,我将尝试从另一个表分配默认值。

是否有可能这样或者我应该使用触发器/程序?

最佳答案

MySQL 非常明确地表明这是不可能完成的。首先,default 的语法称为default value。需要一个值。

以下是documentation的方法描述如下:

The DEFAULT value clause in a data type specification indicates a default value for a column. With one exception, the default value must be a constant; it cannot be a function or an expression.

(唯一的异常(exception)是 CURRENT_TIME,大多数人可能甚至没有意识到它是一个函数。)

许多数据库确实允许在此处进行函数调用。据我所知,没有一个允许查询表达式。但是,这通常可以在用户定义的函数中进行模拟。

解决方法是使用触发器。在另一个表中查找值是触发器的一种相当常见的用法。

关于mysql - 创建表并将查询指定为字段的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43282742/

相关文章:

sql - 向 PostgreSQL 上的用户授予对表子集的访问权限

mysql - 理解 RAM 中 POSTGRES 和 MYSQL 的数据库级缓存

mysql - ORDER BY 随机子级别的 SQL 语法?

java - 如何通过URL向MySQL插入数据?

sql - 与 VARCHAR() 相比,BLOB 或 TEXT 有多大区别?

mysql - 游标在触发器内并更新表列

database - 通过互联网保护与 firebird 的连接的最佳方法

php - 在 Laravel 和 Eloquent 中获取 2 个以上联接表的数据

php - 使用正确的ID将评论插入数据库以匹配和广告(php,mysql)

c# - 如何将此sql语句转换为linq表达式