我有两个表用户和lead_联系人有相似的数据。当有人买了一个产品,他们就会成为用户。我应该如何修改下面的两个创建语句:
leads表接收一个新的
创建用户时,输入名字、姓氏、公司和电子邮件。
更新用户表中的名字、姓氏、公司和电子邮件
当leads表信息更改时自动
创建表lead_contacts
(contact_id
int(11)非空自动递增,user_id
int(11)unsigned NOT NULL默认值“0”,email
varchar(100)非空默认值',company
varchar(50)非空默认值',first_name
varchar(50)非空默认值',last_name
varchar(50)非空默认值',address
varchar(100)非空默认值',address_2
varchar(100)非空默认值',city
varchar(50)非空默认值',state
varchar(50)非空默认值',country
varchar(50)非空默认值',postal_code
varchar(30)非空默认值',phone
varchar(30)非空默认值',fax
varchar(30)非空默认值',ship_bill_same
枚举('Y','N')不为空默认'Y',notes
文本不为空,admin_notes
文本不为空,list_name
varchar(50)非空默认值',lead_list
int(11)unsigned NOT NULL默认值“0”,is_master_list
枚举('N',Y')不为空默认'N',active_work
枚举('Y','N')不为空默认'Y',parentID
int(11)unsigned NOT NULL默认值“0”,
主键(contact_id
),
键user_id
(user_id
),
键lead_list
(lead_list
),
键is_master_list
(is_master_list
),
键active_work
(active_work
),
键parentID
(parentID
)
)ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=1;
创建表users
(userID
int(11)非空自动递增,access_level
int(11)不为空默认值“0”,username
varchar(100)非空默认值',password
varchar(100)非空默认值',first_name
varchar(50)非空默认值',last_name
varchar(50)非空默认值',company
varchar(100)非空默认值',email
varchar(100)非空默认值',
主键(userID
),
唯一键
)引擎=InnoDB默认字符集=latin1;
最佳答案
我想你误解了外键的工作原理。
从引线到用户的引用意味着在引线中的行可以引用它之前,用户中必须已经存在行。
在SQL中,无法使依赖表根据需要自动在其父表中创建行。
我想你可以用扳机来做。但不是外键约束。此外,要填入父表的值必须来自某个地方。您需要在应用程序的INSERT语句或触发器中指定它们,或者使用为users表中的每一列定义的默认值。考虑到您对users.username
有一个唯一的约束,我认为这不可能通过触发器实现。
回复:你在评论中的后续问题:
不,外键不能像你描述的那样。当您修改leads
表(带有外键的表)中的信息时,如果您试图将leads.user_id
列更改为users
表中找不到的值,外键只能阻止修改。
子表(leads
)中的外键不能更改父表(users
)中的任何内容。
我不知道你误会的原因是什么。你是在什么地方读的还是看到有人做这种事?
关于mysql - 如何将外键添加到两个Innob表中,以便它们彼此自动更新?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1005276/