我是否正确理解了MySQL的行为?

1aaf6o9v  于 5个月前  发布在  Mysql
关注(0)|答案(1)|浏览(37)

我用这样一个命令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不会被添加。)

rpppsulh

rpppsulh1#

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

相关问题