DEFAULT
MySQL直到 8.0.13 版本才支持将表达式作为列。见https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html
mysql> create table mytable ( n varchar(6) default (lpad(rand() * 1000000, 6, '0')));
mysql> insert into mytable () values ();
Query OK, 1 row affected (0.00 sec)
mysql> select * from mytable;
+--------+
| n |
+--------+
| 573663 |
+--------+
MariaDB 在版本 10.2.1 中支持类似的表达式默认值。请参阅https://mariadb.com/kb/en/create-table/#default-column-option
应该在两个数据库的早期版本中工作的替代方法是定义一个触发器,如果列的值为 NULL,则默认设置随机值。
mysql> create table mytable ( n varchar(6) );
mysql> create trigger rand_lpad_ins before insert on mytable
for each row set NEW.n = COALESCE(NEW.n, lpad(rand() * 1000000, 6, '0'));
mysql> insert into mytable () values ();
mysql> select * from mytable;
+--------+
| n |
+--------+
| 422870 |
+--------+
PS:在开发和生产中使用不同的数据库产品是个坏主意。在开发过程中,您可能会在 MariaDB 中使用与 MySQL 不同的功能。在部署到生产环境之前,您无法测试它们。这是一种代价高昂的惊喜,因为当您发现它时,您可能不得不重新修改您在开发中所做的很多工作。MariaDB 和 MySQL 从 2010 年开始使用通用代码,但从那时起它们就开始出现分歧。您应该使用将在生产中使用的相同品牌和版本的数据库(以及任何其他软件)。