MYSQL 表创建,其中列具有默认值(表达式)
我有一个表 Employee(id,name,dept_name)
。我希望 id 为字母数字 [dddddaaaaa
],前 5 位数字将自动递增 id,其余 4 个字符将是员工姓名的前 4 个字符。
例如,对于第一个员工 name=John Todd ,Id 的自动递增部分将为 00001。因此 Id 将为00001JOHN
。
是否可以为列 Id=(concat(autoincrement,substring(name,4))
设置默认表达式。
我还在想是否可以在插入 Employee 和触发器后创建触发器 MySql 不允许从触发的触发器更新同一个表。
将更新Employee.Id
,但
I have a Table Employee(id,name,dept_name)
.I want the id will alphanumeric [dddddaaaaa
] with first 5 digit will be auto increment id and rest 4 char will be the first 4 char of employee name.
For example , for the first employee name=John Todd ,the auto incremented part of the Id will be 00001. And so the Id will be 00001JOHN
.
Is it possible to set a default expression to the column Id=(concat(autoincrement,substring(name,4))
.
I was also thinking if I Can create a trigger on after insert Employee and the trigger will update the Employee.Id
. But MySql does not allow to update the same table from trigger for which trigger got fired.
Please Help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
像这样的模式怎么样?
这将允许您使用自然主键相当快速地执行查找,同时为您提供人工主键并且不强制非规范化。
当然,由于主键的 0001 部分足够唯一来识别用户,因此您根本不需要查询名称。
如果您坚持预先计算,这应该可以进行
测试:
这是一种黑客攻击,并且 information_schema 在某些权限不受您控制的数据库上将不可用。
What about a schema like
That'll let you perform lookups fairly quickly using your natural primary key, while giving you an artificial primary key and not forcing to denormalize.
Of course since the 0001 part of the primary key is unique enough to identify the user you need not query the name at all.
If you insist on precalculating this should work
Testing it:
This is kind of a hack, and information_schema won't be available on some DBs where permissions aren't under your control.
您可以尝试在 select 语句中连接它,而不是存储自动增量列和 id 列,
这样您就不需要触发器
You could try concatenating it in your select statement instead of storing an auto increment column and an id column,
That way you wouldn't need triggers