对于存储用户名和其他数据的用户,我有这个表,就像这样(删除):
CREATE TABLE `prod_users` (
`p_user_id` INT(11) NOT NULL AUTO_INCREMENT,
`p_user_name` VARCHAR(200) NOT NULL DEFAULT ''
`p_comp_name` VARCHAR(300) NOT NULL DEFAULT '',
PRIMARY KEY (`p_user_id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
每次用户注册时,他都会提供公司名称。
还有另一个名为prod_profiles的表,它存储配置文件详细信息,如phone nos。传真号码等
CREATE TABLE `prod_profiles` (
`pf_gen_id` INT(11) NOT NULL AUTO_INCREMENT,
`pf_user_id` INT(11) NOT NULL DEFAULT '0',
`pf_user_name` VARCHAR(200) NOT NULL DEFAULT ''
`pf_comp_name` VARCHAR(300) NOT NULL DEFAULT '',
PRIMARY KEY (`pf_gen_id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
当新用户注册并将其详细信息添加到prod_users时,是否可以使用MySql本身自动将新的user_id,user_name和comp_name详细信息添加到prod_profile?由于每个用户都有一个新的p_user_id而且我们不会知道它,因此使用php会很困难。这可以在MySql本身内实现而没有任何问题吗?
答案 0 :(得分:1)
您可以使用下一个mysql函数:LAST_INSERT_ID();
,它返回上次自动增加的id。
因此,添加用户然后添加prod_profile
,而pf_user_id
值将是last_insert_id()
的返回值。
INSERT INTO `prod_users`(`p_user_name`,`p_comp_name`) VALUES('Dan' , 'Stackover')
INSERT INTO `prod_profiles`(`pf_user_id`,`pf_user_name`,`pf_comp_name`) VALUES(LAST_INSERT_ID(),'Dan','Stackover')
请注意:我必须说,在两个不同的表中为同一个用户存储两次用户名和company_name是一种浪费...
考虑重新考虑一下你的数据库结构和逻辑。
答案 1 :(得分:1)
使用PHP并不困难,因为您可以使用LAST_INSERT_ID()
,可以通过mysql_insert_id()
或mysqli::$insert_id
,PDO::lastInsertId()
或您提供的API提供。只要您在同一个脚本上立即连续调用两个INSERT
语句(它取决于连接),MySQL将提供正确的p_user_id
。
但是,您可以使用AFTER INSERT
触发器强制MySQL自动创建新行:
CREATE TRIGGER build_profile AFTER INSERT ON prod_users
FOR EACH ROW
BEGIN
INSERT INTO prod_profiles
(pf_user_id, pf_user_name, pf_comp_name)
VALUES (NEW.p_user_id, NEW.p_user_name, NEW.p_comp_name)
END
查看MySQL CREATE TRIGGER
syntax reference以获取完整的详细信息和选项。