全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 12007|回复: 18

[疑问] MYSQL大佬请进,(语句方面的)THANK YOU.

[复制链接]
发表于 2017-12-18 17:14:06 | 显示全部楼层 |阅读模式
100金钱
第一问:

插入数据到A表并获取当条ID(自增)更新到B表?

A表:id,name,age(id自增)
B表:id,aid  (id自增,aid就是要获取A表ID的值)

插入:(用力

INSERT INTO A ('name','age') VALUES ('jake','35');

怎么获取A表当前条ID,并更新到B表呢?

第二问:

插入A表的时候,如果name相同怎么处理?

我是想问,如何判断name存在,如果不存在创建 ,存在就获取。


最佳答案

查看完整内容

首先,你的字段符号搞错了,是` 不是' 第一: INSERT INTO A (`name`,`age`) VALUES ('jake','35'); INSERT INTO B (`aid`) VALUES (LAST_INSERT_ID()); 两条语句一起执行 第二: 你可以在A表建立一个name的唯一索引
发表于 2017-12-18 17:14:07 | 显示全部楼层
首先,你的字段符号搞错了,是` 不是'
第一:
INSERT INTO A (`name`,`age`) VALUES ('jake','35');
INSERT INTO B (`aid`) VALUES (LAST_INSERT_ID());
两条语句一起执行


第二:
你可以在A表建立一个name的唯一索引
发表于 2017-12-18 17:18:33 来自手机 | 显示全部楼层
如果用sql不好实现的可以考虑拆分业务逻辑,分步执行
发表于 2017-12-18 17:24:48 | 显示全部楼层
本帖最后由 cashjay 于 2017-12-18 17:32 编辑

第一问:mybatis insert 返回主键,再用返回主键update
第二问:select name from B where name = '**'  根据返回值,可以判断是否存在
发表于 2017-12-18 17:35:52 | 显示全部楼层
用laravel就方便了。

B::create(['aid'=>A::findOrCreate(['name'=>'aaa'])->id]);

完事。
 楼主| 发表于 2017-12-18 17:36:33 | 显示全部楼层
leassy 发表于 2017-12-18 17:28
首先,你的字段符号搞错了,是` 不是'
第一:
INSERT INTO A (`name`,`age`) VALUES ('jake','35');

厉害,第一条测试成功了,分给你了,第二条我懂,但是在不建立唯一索引的情况下怎么办呢?

点评

单进程操作可以,有并发操作可能还是得代码。  发表于 2017-12-18 17:43
发表于 2017-12-18 17:37:44 | 显示全部楼层
万人迷 发表于 2017-12-18 17:36
厉害,第一条测试成功了,分给你了,第二条我懂,但是在不建立唯一索引的情况下怎么办呢? ...

事物外做查询,没有才执行前两句,一定要在事物中执行前两句
发表于 2017-12-18 17:37:56 来自手机 | 显示全部楼层
1 先插 再读出来。2.你是要不能重名吗?先查,再业务逻辑。然后name设置一个唯一
发表于 2017-12-18 17:38:07 | 显示全部楼层
楼上已说全。
逻辑还是得配合代码。。。。

发表于 2017-12-18 17:42:21 | 显示全部楼层
Eric.c 发表于 2017-12-18 17:38
楼上已说全。
逻辑还是得配合代码。。。。


Yii2

  1. $item = A::findOne(['name'=>'VXXXXXX']);
  2. if(!$item)
  3. {
  4.         $item = New A();
  5.         $item->name='XCccccc';
  6.         if($item-save())
  7.         {
  8.                 $b = new B();
  9.                 $b->aid = $item->id;
  10.                 if($b->save())
  11.                 {
  12.                         //业务结束,全都成功
  13.                 }
  14.                 else
  15.                 {
  16.                         //插A表成功,B表失败,原因print_r($b->errors)                       
  17.                 }

  18.         }
  19.         else
  20.         {
  21.                 //插A表失败,结束
  22.         }
  23. }
复制代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-5-13 10:03 , Processed in 0.067758 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表