Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 基于从另一个表中插入值向一个表中插入值_Mysql - Fatal编程技术网

Mysql 基于从另一个表中插入值向一个表中插入值

Mysql 基于从另一个表中插入值向一个表中插入值,mysql,Mysql,我有一个用于存储用户名和其他数据的用户的表,它是这样做的(精简): 每次用户注册时,他也会提供一个公司名称 还有另一个名为prod_profiles的表,它存储诸如电话号码、传真号码等个人资料的详细信息 CREATE TABLE `prod_profiles` ( `pf_gen_id` INT(11) NOT NULL AUTO_INCREMENT, `pf_user_id` INT(11) NOT NULL DEFAULT '0', `

我有一个用于存储用户名和其他数据的用户的表,它是这样做的(精简):

每次用户注册时,他也会提供一个公司名称

还有另一个名为prod_profiles的表,它存储诸如电话号码、传真号码等个人资料的详细信息

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_用户时,是否可以使用MySql自动将其新用户id、用户名和公司名称详细信息添加到prod_配置文件中?因为每个用户都会有一个新的p_user_id,我们不知道它,所以使用php会很困难。这可以在MySql本身内部实现吗?您可以使用下一个MySql函数:
LAST\u INSERT\u ID()返回最后一个自动增加的id

因此,添加一个用户,然后添加一个
prod\u profile
,而
pf\u user\u id
值将是
last\u insert\u id()
的返回值

请注意:我不得不说,将同一用户的用户名和公司名称存储在两个不同的表中两次是一种真正的浪费


考虑重新考虑您的数据库结构和逻辑。

使用PHP并不困难,因为您可以通过
mysql\u insert\u id()
mysqli::$insert\u id
PDO::lastInsertId()
或您的API提供的任何方式使用PHP。只要在同一个脚本上立即连续调用两个
INSERT
语句(它依赖于连接),MySQL将提供正确的
p\u用户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')
但是,您可以使用插入后的
触发器强制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

查看完整的详细信息和选项。

似乎不需要整个prod\U profiles表。如果每个用户只有一个配置文件,那么第二个表的大多数字段都应该移动到第一个表中。如果每个用户可以有多个配置文件,则不需要存储pf_user_name和pf_comp_name字段;只需将pf_user_id字段保留为外键即可。这就是当前的方式。但后来有人认为,将个人资料数据与登录数据分开是一个“好主意”。:(目前,这是一个表中的所有内容。但他们希望这样做:(我们决定这样做。
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