Mysql插入,更新,删除多个表

时间:2016-03-15 21:22:19

标签: mysql

我是Mysql和PHP的新手,必须承认我的大脑会延迟ms访问。我正在尝试使用mysql数据库将旧的ms访问应用程序更新为Web应用程序。很多事情进展顺利,我在学习上享受着学习曲线。

除了: -

在msaccess应用程序中,我可以将表单基于包含多个表的查询,从而在一个或多个表中插入,更新和删除信息。 msaccess query

SELECT 
    merlinuc_ucd.tblsuppliers.SupplierID,
    merlinuc_ucd.tblsuppliers.PurchasedFrom,
    merlinuc_ucd.tblsuppliers.Street,
    merlinuc_ucd.tblsuppliers.City,
    merlinuc_ucd.tblsuppliers.State,
    merlinuc_ucd.tblsuppliers.Zip,
    merlinuc_ucd.tblsuppliers.Telephone,
    merlinuc_ucd.tblvehicles.ID,
    merlinuc_ucd.tblvehicles.LienHolderName,
    merlinuc_ucd.tblvehicles.Stock,
    merlinuc_ucd.tblvehicles.DateOfPurchase,
    merlinuc_ucd.tblvehicles.SupplierID,
    merlinuc_ucd.tblvehicles.Year,
    merlinuc_ucd.tblvehicles.Make,
    merlinuc_ucd.tblvehicles.Model,
    merlinuc_ucd.tblvehicles.Mileage,
    merlinuc_ucd.tblvehicles.BodyType,
    merlinuc_ucd.tblvehicles.Color,
    merlinuc_ucd.tblvehicles.Transmission,
    merlinuc_ucd.tblvehicles.StateOfOrigin,
    merlinuc_ucd.tblvehicles.PreviousOwnersName,
    merlinuc_ucd.tblvehicles.PreviousOwnersAddress,
    merlinuc_ucd.tblvehicles.PreviousOwnerCity,
    merlinuc_ucd.tblvehicles.PreviousOwnersState,
    merlinuc_ucd.tblvehicles.PreviousOwnersZip,
    merlinuc_ucd.tblvehicles.PreviousOwnersPrincipalUse,
    merlinuc_ucd.tblvehicles.PreviousOwnersBodyDamage,
    merlinuc_ucd.tblvehicles.PreviousOwnersMechanicalDefects,
    merlinuc_ucd.tblvehicles.MSRP,
    merlinuc_ucd.tblvehicles.RetailPrice,
    merlinuc_ucd.tblvehicles.Notes,
    merlinuc_ucd.tblvehicles.PurchasePrice,
    merlinuc_ucd.tblvehicles.Transportation,
    merlinuc_ucd.tblvehicles.Cleaning,
    merlinuc_ucd.tblvehicles.TotalRO,
    merlinuc_ucd.tblvehicles.EngineType
FROM
    merlinuc_ucd.tblsuppliers
        INNER JOIN
    merlinuc_ucd.tblvehicles ON merlinuc_ucd.tblsuppliers.SupplierID = merlinuc_ucd.tblvehicles.SupplierID
ORDER BY merlinuc_ucd.tblvehicles.Make;

我在MySQL Workbench中尝试了这个查询,它给了我只读结果(查询包含两个表中的PK)。我已经搜索了几个月,但如果我找到任何信息(我不确定我是),它就在我的头上。我一直在使用的解决方法是将我的php表单一次放在一个表上,这样就可以了,但这不是我最喜欢的解决方案,因为它会让最终用户更加困惑。

1 个答案:

答案 0 :(得分:0)

MS Access和MySQL是两个完全不同的产品。我想你想要使用与MS Access表单相似的东西,如果你将表连接到表单,你可以更新插入等等。

这不是MySQL和Workbench的工作方式。特别是工作台不是MS Access的前端工具(部分)。在Access中,您有很多自动化,当您将表连接到表单时,它会在后台创建插入和更新例程。

在MySQL中你需要自己做,你应该开发一个可以帮助你的前端。 MySQL是一个强大的工具,如果你需要一个更快更大的数据库,你需要将Access留在后面。

在这里,您可以找到所需的所有操作语句:http://dev.mysql.com/doc/refman/5.7/en/sql-syntax-data-manipulation.html

你也可以使用phpmyadmin: https://www.phpmyadmin.net/

<强>更新

你可以用交易来做。进一步阅读:SQL Update,Delete And Insert In Same Time

我在存储过程中使用其他方法完成所有操作。我只是将所有数据加载到一个表中(我称之为write_table),然后让数据库决定如何将数据传输到另一个表(称为read_table)

以下是代码:

CREATE DEFINER=`user`@`%` PROCEDURE `validateData`()
BEGIN

CREATE TEMPORARY TABLE IF NOT EXISTS temp_write_data AS (SELECT * FROM write_data);

UPDATE read_data AS r
    LEFT JOIN
    temp_write_data as w
    ON (r.id = w.id)
    Set r.somecolumn = w.somecolumn
    WHERE w.othercolumn is not null;

INSERT INTO read_data
    SELECT *
    FROM temp_write_data AS w
        LEFT JOIN read_data AS r
        ON (r.id = w.id)
    WHERE r.othercolumn IS NULL;

DELETE write_data.* FROM write_data
    LEFT JOIN temp_write_data
    using(guid)
    WHERE temp_write_data.date is not null;

DROP TEMPORARY TABLE temp_write_data;
END

这肯定有点复杂,但它适用于我,我可以让我的前面非常苗条。我不得不说,我的解决方案是一个直接连接到mysql服务器的excel电子表格,因此中间没有脚本。数据库或电子表格都必须执行逻辑。我决定让前端只是一个前端,让数据库完成工作。专家是,我不需要在两者之间交换这么多数据。问题是,我认为将逻辑存储到数据库中并不是最好的想法。

但是使用脚本你肯定能找到第三种(更好)的方式。

最诚挚的问候 马丁