我有两个表用户和lead_contacts,它们具有相似的数据。当有人购买产品时,他们就会成为用户。我应该如何修改下面的两个创建标记:
更新了users表中的first_name,last_name,company和email 当潜在客户表信息被更改时自动
创建表lead_contacts
(
contact_id
int(11)NOT NULL auto_increment,
user_id
int(11)unsigned NOT NULL默认值'0',
email
varchar(100)NOT NULL默认'',
company
varchar(50)NOT NULL默认'',
first_name
varchar(50)NOT NULL默认'',
last_name
varchar(50)NOT NULL默认'',
address
varchar(100)NOT NULL默认'',
address_2
varchar(100)NOT NULL默认'',
city
varchar(50)NOT NULL默认'',
state
varchar(50)NOT NULL默认'',
country
varchar(50)NOT NULL默认'',
postal_code
varchar(30)NOT NULL默认'',
phone
varchar(30)NOT NULL默认'',
fax
varchar(30)NOT NULL默认'',
ship_bill_same
枚举('Y','N')NOT NULL默认为'Y',
notes
文本NOT NULL,
admin_notes
文本NOT NULL,
list_name
varchar(50)NOT NULL默认'',
lead_list
int(11)unsigned NOT NULL默认值'0',
is_master_list
枚举('N','Y')NOT NULL默认为'N',
active_work
枚举('Y','N')NOT NULL默认为'Y',
parentID
int(11)unsigned NOT NULL默认值'0',
PRIMARY KEY(contact_id
),
KEY user_id
(user_id
),
KEY lead_list
(lead_list
),
KEY is_master_list
(is_master_list
),
KEY active_work
(active_work
),
KEY parentID
(parentID
)
)ENGINE = InnoDB DEFAULT CHARSET = latin1 PACK_KEYS = 1;
创建表users
(
userID
int(11)NOT NULL auto_increment,
access_level
int(11)NOT NULL默认为'0',
username
varchar(100)NOT NULL默认'',
password
varchar(100)NOT NULL默认'',
first_name
varchar(50)NOT NULL默认'',
last_name
varchar(50)NOT NULL默认'',
company
varchar(100)NOT NULL默认'',
email
varchar(100)NOT NULL默认'',
PRIMARY KEY(userID
),
独特的钥匙username
(username
)
)ENGINE = InnoDB DEFAULT CHARSET = latin1;
答案 0 :(得分:3)
我认为你误解了外键是如何工作的。
从潜在客户到用户的引用意味着在潜在客户中的行可以引用用户之前,用户必须已存在行。
SQL中没有办法让依赖表根据需要在其父表中自动创建一行。
我猜你可以用触发器做到这一点。但不是外键限制。此外,填充到父表中的值必须来自某个地方。您需要在应用程序或触发器的INSERT语句中指定它们,或者使用为users表中的每个列定义的默认值。鉴于你对users.username
有一个独特的约束,我认为这不可能来自触发器。
Re:您在评论中的后续问题:
不,外键不能做你所描述的。当您修改leads
表(带有外键的表)中的信息时,如果您尝试更改{{1},则外键可以执行的仅事件会阻止修改}列到leads.user_id
表中找不到的值。
子(users
)表中的外键不能更改父(leads
)表中的任何内容。
我不确定你错误理解的根源是什么。你在某个地方看过它还是看到有人做过这样的事情?