mysql - 无论如何,我可以使用单个 MySQL 查询在多个表中插入记录吗?

标签 mysql database

我有一个用户表单,用户可以在其中填写以下详细信息

a) 用户名​​ b) 密码 c) 电子邮件

用户名和密码属于users表,而电子邮件属于contacts表,现在users表有外键contact_id存储主键联系人 ID。每当用户提交表单时,我必须进行两个 MySQL 查询以将记录插入到两个不同的表中。

这是我正在使用的。

第一个查询:

$sth = $this->dbh->prepare("INSERT INTO contacts(email) VALUES(:email)");

第二个查询:

$sth = $this->dbh->prepare("INSERT INTO users(username,password,registerdate,activationString,contact_id) VALUES(:username,:password,NOW(),:activationString,".$this->dbh->lastInsertId().")");

我是否可以将查询变成一个而不是两个?利用MySQL的last_insert_id()函数。 ?

谢谢

最佳答案

INSERT 语句允许插入到一张表中。

但是您可以创建一个存储过程来完成这项工作。

示例:

CREATE TABLE contacts(
  id INT(11) NOT NULL AUTO_INCREMENT,
  email VARCHAR(255) DEFAULT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE users(
  id INT(11) NOT NULL AUTO_INCREMENT,
  username VARCHAR(255) DEFAULT NULL,
  `password` VARCHAR(255) DEFAULT NULL,
  registerdate DATE DEFAULT NULL,
  activationString VARCHAR(255) DEFAULT NULL,
  contact_id VARCHAR(255) DEFAULT NULL,
  PRIMARY KEY (id)
);

DELIMITER $$

CREATE
PROCEDURE add_new_user(IN p_username         VARCHAR(255),
                       IN p_password         VARCHAR(255),
                       IN p_registerdate     DATE,
                       IN p_activationString VARCHAR(255),
                       IN p_email            VARCHAR(255)
                       )
BEGIN
  INSERT INTO contacts (email) VALUES (p_email);
  INSERT INTO users (username, password, registerdate, activationString, contact_id) VALUES (p_username, p_password, p_registerdate, p_activationString, LAST_INSERT_ID ());
END
$$

DELIMITER ;

SET @p_username = 'user1';
SET @p_password = 'pwd';
SET @p_registerdate = now();
SET @p_activationString = 'str';
SET @p_email = 'addr@host.net';
CALL database3.add_new_user(@p_username, @p_password, @p_registerdate, @p_activationString, @p_email);

存储过程是可选的,您可以使用两个插入语句。

关于mysql - 无论如何,我可以使用单个 MySQL 查询在多个表中插入记录吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5832505/

相关文章:

php - MySql PHP 从逗号分隔的数据(标签)中选择不同值的计数

php - 使用MAX选择mysql数据

mysql - 从数据库中删除项目但保留唯一ID

mysql - 关系数据库中自定义字段的设计模式

MySQL 默认数据库以及如何使现有的非 InnoDB 成为 InnoDB

database - 如何在struts2的复选框列表中保留值?

php - 如何在 codeigniter 中使用单个查询将数据插入两个单独的表中?

c# - 如果文本框为空,此代码返回日期 1-1-0001 ...我希望它返回空或空字符串,那么我该怎么办?

Mysql外键,必须与引用表中匹配,否则键被删除?

Php Mysqli 未定义函数