我们有一个表与订单的客户喜欢:
CREATE TABLE `orders` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`number` varchar(20) NOT NULL,
`ordered` datetime DEFAULT NULL,
`email` varchar(255) NOT NULL,
...
);
表中已填充数据。我需要添加一个字段:
`user` int(10) unsigned NOT NULL,
其中包含每个客户的唯一编号。客户由相同的电子邮件地址定义,因此电子邮件地址为“test@example.com”的所有订单应获得1,电子邮件地址为“something_else@example.com”的所有订单应获得2,依此类推。
对于这个“用户”号码,它是从1开始还是以某种方式递增并不重要,它只是应该对每个电子邮件地址不同。
有没有办法在一个SQL语句中做到这一点?我知道如何用一些PHP代码来做,例如,但我们很好奇,如果只使用SQL是可能的。我们知道,如果有一个表“客户”,这将是一个更好的设计,但这不是我们的设计,我们只是试图修复最坏的事情;)
1条答案
按热度按时间7vhp5slm1#
在一个SQL语句中不可能完成您所描述的操作。
即使您不想让每个电子邮件的用户ID都是唯一的,您的ALTER TABLE也不会起作用。您显示添加了一个NOT NULL列,但没有DEFAULT。那么,如果表中有行,它应该向表中添加什么值呢?它不能使用NULL。并且它没有DEFAULT值。您不能将该列作为AUTO_INCREMENT添加,因为您已经有了一个AUTO_INCREMENT的
id
列,而MySQL不允许一个表有两个这样的列。我会这样做:
在执行下一步之前,请确保
orders.user_id
已经以您认为正确的方式填充。一旦删除了orders.email
列,就无法撤消。最好先进行备份。