我用这样的命令创建了表
CREATE TABLE sometable (number INT DEFAULT (300));
+--------+------+------+-----+---------+-------------------+
| Field | Type | Null | Key | Default | Extra |
+--------+------+------+-----+---------+-------------------+
| number | int | YES | | 300 | DEFAULT_GENERATED |
+--------+------+------+-----+---------+-------------------+
而且因为表达式(300)而不是简单的300,MySQL认为它是一个表达式,每次你向表添加默认值时他都会计算它,所以MySQL添加了一个
DEFAULT_GENERATED
。正确的?
(当我创建相同的表格但没有 300 左右的括号时,不会添加 DEFAULT_GENERATED
。)
是的,您的理解是正确的您可以将一个表达式放入
DEFAULT
中,它只是一个单一的文字值。如果您使用括号的语法提示,那么这将被视为一个表达式。
如果您担心表达式的性能开销,我认为计算这样一个简单的表达式(单个文字)不太可能是一个重大的性能问题。
请记住,仅当您
DEFAULT
并且仅当您不为该列提供值时才使用 INSERT
表达式。
在后面的
SELECT
查询中,没有什么区别。无论您最初是使用 DEFAULT
还是通过指定值插入行,它都会读取存储的值。