全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 11999|回复: 18
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 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的唯一索引
2#
发表于 2017-12-18 17:14:07 | 只看该作者
首先,你的字段符号搞错了,是` 不是'
第一:
INSERT INTO A (`name`,`age`) VALUES ('jake','35');
INSERT INTO B (`aid`) VALUES (LAST_INSERT_ID());
两条语句一起执行


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

第一问:mybatis insert 返回主键,再用返回主键update
第二问:select name from B where name = '**'  根据返回值,可以判断是否存在
5#
发表于 2017-12-18 17:35:52 | 只看该作者
用laravel就方便了。

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

完事。
6#
 楼主| 发表于 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
7#
发表于 2017-12-18 17:37:44 | 只看该作者
万人迷 发表于 2017-12-18 17:36
厉害,第一条测试成功了,分给你了,第二条我懂,但是在不建立唯一索引的情况下怎么办呢? ...

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

10#
发表于 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-10 15:29 , Processed in 0.065405 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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