Mysql 是否在创建ID之前使用它?
嗨,我有一个关于mysql的问题 这是我的疑问:Mysql 是否在创建ID之前使用它?,mysql,sql,Mysql,Sql,嗨,我有一个关于mysql的问题 这是我的疑问: $geboortedatum = $_POST['dag'].'-'.$_POST['maand'].'-'.$_POST['jaar']; $geboortedatum1 = $_POST['dag1'].'-'.$_POST['maand1'].'-'.$_POST['jaar1']; try{ $d
$geboortedatum = $_POST['dag'].'-'.$_POST['maand'].'-'.$_POST['jaar'];
$geboortedatum1 = $_POST['dag1'].'-'.$_POST['maand1'].'-'.$_POST['jaar1'];
try{
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "
INSERT INTO clienten
(client_voornaam,
client_achternaam,
client_geboortedatum,
client_geslacht,
client_adres,
client_postcode,
client_woonplaats,
client_contactpersoon,
client_diagnose,
datun_aanmaak)
VALUES (:voornaam,
:achternaam.
:geboortedatum,
:geslacht,
:adres,
:postcode,
:woonplaats,
:contactpersoon,
:diagnose,
:datumaanmaak)
INSERT INTO verzorgers(
wat_is_verzorger,
voornaam_verzorger,
achternaam_verzorger,
geboortedatum_verzorger,
email_verzorger,
geslacht_verzorger,
adres_verzorger,
postcode_verzorger,
woontplaats_verzorger,
tel1_verzorger,
tel2_verzorger,
datum_aanmaak
)
VALUES(
:watisverz
:voornaamverz,
:achternaamverz,
:geboortedatumverz,
:emailverz,
:geslachtverz:
:adresverz,
:postcodeverz,
:woonplaatsverz,
:tel1verz,
:tel2verz,
:datumaanmaak
)
";
$stmt = $db->prepare($sql);
$stmt->bindParam(':voornaam', $_POST['voornaam'], PDO::PARAM_STR);
$stmt->bindParam(':achternaam', $_POST['achternaam'], PDO::PARAM_STR);
$stmt->bindParam(':geboortedatum', $geboortedatum, PDO::PARAM_INT);
$stmt->bindParam(':geslacht', $_POST['geslacht'], PDO::PARAM_STR);
$stmt->bindParam(':adres', $_POST['adres'], PDO::PARAM_STR);
$stmt->bindParam(':postcode', $_POST['postcode'], PDO::PARAM_INT);
$stmt->bindParam(':woonplaats', $_POST['woonplaats'], PDO::PARAM_STR);
$stmt->bindParam(':contactpersoon', $_POST['contactpersoon'], PDO::PARAM_STR);
$stmt->bindParam(':diagnose', $_POST['diagnose'], PDO::PARAM_INT);
$stmt->bindParam(':datumaanmaak', $_POST['datum_toetreding'], PDO::PARAM_INT);
$stmt->execute();
}
catch(PDOException $e)
{
echo '<pre>';
echo 'Regel: '.$e->getLine().'<br>';
echo 'Bestand: '.$e->getFile().'<br>';
echo 'Foutmelding: '.$e->getMessage();
echo '</pre>';
} ?>
$geboortedatam=$\u POST['dag'].-'.$\u POST['maand'.-'.$\u POST['jaar'];
$geboortedatum1=$U POST['dag1'].-'.$U POST['maand1'.-'.$U POST['jaar1'];
试试{
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
$sql=”
插入客户
(客户_voornaam,
客户_achternaam,
客户_Geboortedatam,
客户,
客户地址:,
客户的邮政编码,
客户_Woonpaats,
客户联系人:,
客户诊断,
datun_Aanmak)
值(:voornaam,
:achternaam。
:Geboortedatam,
:geslacht,
地址:,
:邮政编码,
:Woonpaats,
:contactpersoon,
:诊断,
:Datumanmaak)
插入verzorgers(
瓦特·维佐格,
沃尔纳姆·维尔佐格,
阿切特纳姆·维佐格,
Geboorteatum_verzorger,
电子邮件_verzorger,
geslacht_verzorger,
阿得里斯·沃佐格,
邮政编码_verzorger,
伍特普拉茨·沃尔佐格,
tel1_verzorger,
tel2_verzorger,
达姆阿纳马克酒店
)
价值观(
:瓦蒂斯维兹
:voornaamverz,
:achternaamverz,
:geboortedatumverz,
:emailverz,
:geslachtverz:
:adresverz,
:邮政编码,
:woonplaatsverz,
:tel1verz,
:tel2verz,
:Datumanmaak
)
";
$stmt=$db->prepare($sql);
$stmt->bindParam(':voornaam',$u POST['voornaam',PDO::PARAM_STR);
$stmt->bindParam(':achternaam',$u POST['achternaam'],PDO::PARAM_STR);
$stmt->bindParam(':geboortedatam',$geboortedatam,PDO::PARAM_INT);
$stmt->bindParam(':geslacht',$u POST['geslacht',PDO::PARAM_STR);
$stmt->bindParam(':adres',$\u POST['adres',PDO::PARAM_STR);
$stmt->bindParam(':postcode',$\u POST['postcode',PDO::PARAM_INT);
$stmt->bindParam(':woonplaats',$u POST['woonplaats',PDO::PARAM_STR);
$stmt->bindParam(':contactpersoon',$\u POST['contactpersoon',PDO::PARAM_STR);
$stmt->bindParam(':diagnose',$\u POST['diagnose'],PDO::PARAM\u INT);
$stmt->bindParam(':datumanmaak',$\u POST['datum\u toetreeding',PDO::PARAM\u INT);
$stmt->execute();
}
捕获(PDO$e)
{
回声';
create function foo returns int
Begin
Declare nextValue int
Set nextValue = SELECT NEXT VALUE FOR mySequence;
End
return (nextValue);
回显“Regel:”。$e->getLine()。
;
create function foo returns int
Begin
Declare nextValue int
Set nextValue = SELECT NEXT VALUE FOR mySequence;
End
return (nextValue);
回显“Bestand:”。$e->getFile()。
;
create function foo returns int
Begin
Declare nextValue int
Set nextValue = SELECT NEXT VALUE FOR mySequence;
End
return (nextValue);
回显“Foutmelding:”。$e->getMessage();
create function foo returns int
Begin
Declare nextValue int
Set nextValue = SELECT NEXT VALUE FOR mySequence;
End
return (nextValue);
回声';
create function foo returns int
Begin
Declare nextValue int
Set nextValue = SELECT NEXT VALUE FOR mySequence;
End
return (nextValue);
} ?>
现在,当创建客户机和verzorger时,它们都会获得一个唯一的ID。
客户机有一列存储相关的verzorger ID,反之亦然。
是否可以进行也直接存储创建的ID的查询
编辑:
好的,也许有点困难,也许是一个答案,在verzorger中只获取客户机id:)您可以创建一个函数来查询序列生成器:
INSERT INTO TableA
(SomeColumn)
VALUES
('Blah');
SET @TableAID = LAST_INSERT_ID();
INSERT INTO TableB
(TableAID, AnotherColumn)
VALUES
(@TableAID,'Foobar');
SET @TableBID = LAST_INSERT_ID();
UPDATE TableA
SET TableBID = @TableBID
WHERE TableAID = @TableAID;
这将允许您传递从这个序列返回的值,并且您可以“提前”知道这些值将是什么
编辑
请理解并发是如何工作的,并使用悲观锁定或乐观锁定。虽然这应该是显而易见的,但有些人觉得有必要包括在内。类似的内容如何(TableAID和TableBID都是自动增量列):
这不会给比赛条件带来问题吗?MySQL必须有更好的方法。@GordonLinoff这是什么竞争条件?我目前使用这种方法,并且在数以万亿计的持久化之后从未失败过。如果两个线程试图同时插入到表中。@GordonLinoff这就是悲观锁定与乐观锁定的作用所在。@tadman编辑添加了一行关于锁定的内容,因此我不会压垮运行十亿美元系统的初级DBA=p