我有两个表 users 和 lead_contacts,它们具有相似的数据。当有人购买产品时,他们就成为了用户。我应该如何修改下面的两个创建状态:
- leads 表收到一个新的 创建用户时,包含名字、姓氏、公司和电子邮件的条目。
用户表中的名字、姓氏、公司和电子邮件已更新 当潜在客户表信息更改时自动
创建表
lead_contacts
(
contact_id
int(11) NOT NULL auto_increment,
user_id
int(11) unsigned NOT NULL default '0',
email
varchar(100) NOT NULL default '',
公司
varchar(50) NOT NULL default '',
first_name
varchar(50) NOT NULL 默认 '',
last_name
varchar(50) NOT NULL 默认 '',
地址
varchar(100) NOT NULL default '',
address_2
varchar(100) NOT NULL default '',
城市
varchar(50) NOT NULL default '',
state
varchar(50) NOT NULL 默认 '',
国家
varchar(50) NOT NULL default '',
postal_code
varchar(30) NOT NULL 默认 '',
phone
varchar(30) NOT NULL default '',
fax
varchar(30) NOT NULL default '',
ship_bill_same
enum('Y', 'N') NOT NULL 默认 'Y',
notes
text NOT NULL,
admin_notes
文本不为空,
list_name
varchar(50) NOT NULL 默认 '',
lead_list
int(11) unsigned NOT NULL default '0',
is_master_list
enum('N', 'Y') NOT NULL 默认 'N',
active_work
enum('Y', 'N') NOT NULL 默认 'Y',
parentID
int(11) unsigned NOT NULL default '0',
主键(contact_id
),
KEYuser_id
(user_id
),
KEYlead_list
(lead_list
),
KEYis_master_list
(is_master_list
),
KEYactive_work
(active_work
),
KEYparentID
(parentID
)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=1;创建表
用户
(
userID
int(11) NOT NULL auto_increment,
access_level
int(11) NOT NULL 默认 '0',
用户名
varchar(100) NOT NULL default '',
密码
varchar(100) NOT NULL default '',
first_name
varchar(50) NOT NULL 默认 '',
last_name
varchar(50) NOT NULL 默认 '',
公司
varchar(100) NOT NULL default '',
email
varchar(100) NOT NULL default '',
主键(用户ID
),
唯一键用户名
(用户名
)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;
最佳答案
我认为您误解了外键的工作原理。
从潜在客户到用户的引用意味着在潜在客户中的行可以引用它之前,用户中必须已经存在该行。
SQL 中没有办法让从属表按需自动在其父表中创建一行。
我想你可以用触发器来做到这一点。但不是外键约束。此外,要填充到父表中的值必须来自某个地方。您需要在应用程序或触发器中的 INSERT 语句中指定它们,或者使用为用户表中的每一列定义的默认值。鉴于您对 users.username
有唯一约束,我认为这不可能通过触发器实现。
回复:您在评论中的后续问题:
不,外键不能执行您所描述的操作。当您修改 leads
表(带有外键的表)中的信息时,外键唯一可以做的事情就是在您尝试更改 leads.user_id
列设置为在 users
表中找不到的值。
子表 (leads
) 中的外键无法更改父表 (users
) 中的任何内容。
我不确定您错误理解的根源是什么。您是否在某处读过或看到有人这样做过?
关于mysql - 如何将外键添加到两个 Innodb 表,以便它们自动相互更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1005276/