我用这样一个命令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
不会被添加。)
1条答案
按热度按时间rpppsulh1#
是的,你有正确的理解你可以把一个表达式放到
DEFAULT
中,它只有一个文字值。如果你使用括号的语法提示,它就算作一个表达式。如果您关心表达式的性能开销,我认为计算这样一个简单的表达式(一个字面值)不太可能是一个重大的性能问题。
请记住,
DEFAULT
表达式仅在您INSERT
时使用,而且仅在您不为该列提供值时使用。在稍后的
SELECT
查询中,没有区别。它读取存储的值,无论您最初是使用DEFAULT
还是通过指定值插入行。