Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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 触发器插入SQL多个数据_Mysql_Sql_Triggers_Sql Insert - Fatal编程技术网

Mysql 触发器插入SQL多个数据

Mysql 触发器插入SQL多个数据,mysql,sql,triggers,sql-insert,Mysql,Sql,Triggers,Sql Insert,我试图用sql创建一个触发器,这样当我在Point中插入一行时,我会在它前面插入PointAbs中的一行 CREATE TABLE PointAbs ( ID INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, X INTEGER NOT NULL, Y INTEGER NOT NULL ); CREATE TABLE Point( ID INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT

我试图用sql创建一个触发器,这样当我在Point中插入一行时,我会在它前面插入PointAbs中的一行

CREATE TABLE PointAbs (
    ID INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
    X INTEGER NOT NULL,
    Y INTEGER NOT NULL
);

CREATE TABLE Point(
    ID INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
    Name VARCHAR(50) ,
    IDPointAbs INTEGER NOT NULL,
    FOREIGN KEY (IDPointAbs) REFERENCES PointAbs(ID) ON DELETE CASCADE
);
问题是我需要同时为点abs提供“X”和“Y”,为点提供“Name”。我能做到吗?
我可以使用JDBC的功能来获取最后一个插入器,但我不喜欢这种方式。

关系似乎是1:1,因为您必须为每个点创建一个新的PointAbs。除非您有另一个与PintAbs相关的表,否则每个点将有一个pointab。如果不需要两个分开的对象,可以将X和Y表示为点的索引:

CREATE TABLE Point(
    ID INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
    Name VARCHAR(50) ,
    IDPointAbs INTEGER NOT NULL,
    X INTEGER NOT NULL,
    Y INTEGER NOT NULL,
    INDEX INDEX_X_Y ON Point(X,Y)
);
当然,这在您的设计中可能既不可能也不可取。 由于不能像X和Y值那样向触发器发送参数,因此最好的选择是对两个插入使用单个事务

BEGIN;
    INSERT INTO PointAbs(X,Y) VALUES (10,15);
    INSERT INTO Point(Name, IDPointAbs) VALUES ('Fancy Name', LAST_INSERT_ID(PointAbs));
COMMIT;

您可以使用系统后端的编程语言来控制插入,但由于除了mysql之外没有提到其他特定语言,因此我不会详细说明。

您不能这样做,IDPointAbs将插入点,它引用点Abs ID列中的自动递增值!!!!此外,我建议您阅读@nikhilsugandh是正确的,但您可以通过在PointAbs中添加0 id并在Point insert查询中使用0作为IDPointAbs来“欺骗”您的方法。。但是使用id 0在中有点反作用SQL@RaymondNijland它是如何自动递增的???默认值0??true@nikhilsugandh“cheat”再次锁定表点AB进行读写,从information_schema.TABLES视图中获取当前自动增量值,更改列id以删除自动增量,添加带id的插入,再次更改列以使其具有自动增量,用最后一个值更改表格的自动增量值并解锁表格..我理解你说的@Beto Raposa,但不幸的是我与PointAbs有其他关系,这就是我将两个表格分开的原因。