我有两个表用户和lead_联系人有相似的数据。当有人买了一个产品,他们就会成为用户。我应该如何修改下面的两个创建语句:
leads表接收一个新的
创建用户时,输入名字、姓氏、公司和电子邮件。
更新用户表中的名字、姓氏、公司和电子邮件
当leads表信息更改时自动
创建表lead_contacts(
contact_idint(11)非空自动递增,
user_idint(11)unsigned NOT NULL默认值“0”,
emailvarchar(100)非空默认值',
companyvarchar(50)非空默认值',
first_namevarchar(50)非空默认值',
last_namevarchar(50)非空默认值',
addressvarchar(100)非空默认值',
address_2varchar(100)非空默认值',
cityvarchar(50)非空默认值',
statevarchar(50)非空默认值',
countryvarchar(50)非空默认值',
postal_codevarchar(30)非空默认值',
phonevarchar(30)非空默认值',
faxvarchar(30)非空默认值',
ship_bill_same枚举('Y','N')不为空默认'Y',
notes文本不为空,
admin_notes文本不为空,
list_namevarchar(50)非空默认值',
lead_listint(11)unsigned NOT NULL默认值“0”,
is_master_list枚举('N',Y')不为空默认'N',
active_work枚举('Y','N')不为空默认'Y',
parentIDint(11)unsigned NOT NULL默认值“0”,
主键(contact_id),
user_iduser_id),
lead_listlead_list),
is_master_listis_master_list),
active_workactive_work),
parentIDparentID
)ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=1;
创建表users(
userIDint(11)非空自动递增,
access_levelint(11)不为空默认值“0”,
usernamevarchar(100)非空默认值',
passwordvarchar(100)非空默认值',
first_namevarchar(50)非空默认值',
last_namevarchar(50)非空默认值',
companyvarchar(100)非空默认值',
emailvarchar(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/

10-16 21:47