shell脚本获取mysql插入数据自增长id的值

在shell脚本中我们可以通过last_insert_id()获取id值,但是,需要注意的是,该函数必须在执行插入操作的sql语句之后,立即调用,否则获取的值就为0,LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,在向表b插入数据,LAST_INSERT_ID会改变。当然还有其他方法:

1. select max(id) from tablename;
2. select @@IDENTITY;
3. SHOW TABLE STATUS;
具体的差别和各自具体的特征,本文不再叙述,自行百度即可.

本文主要以LAST_INSERT_ID()为例:

错误代码示例如下:

echo
$($MYSQL -e "INSERT INTO problem_logger VALUES (null,$REPORT_DATE,$FIXED_DATE,'$PROB_SYMPTOMS','$PROB_SOLUTIONS');")
id=$($MYSQL -e "SELECT LAST_INSERT_ID() id")
id=`echo $id | gawk '{print $2}'`
$MYSQL <<EOF
SELECT * FROM problem_logger where id_number=$id\G
EOF

#######上述代码获取到的id值就为0,而不是我们期望的值

正确的代码如下:
echo
$($MYSQL -e "INSERT INTO problem_logger VALUES (null,$REPORT_DATE,$FIXED_DATE,'$PROB_SYMPTOMS','$PROB_SOLUTIONS');")
id=$($MYSQL -e "SELECT LAST_INSERT_ID() id")
id=`echo $id | gawk '{print $2}'`
$MYSQL <<EOF
SELECT * FROM problem_logger where id_number=$id\G
EOF

完整的访问数据库,插入数据,并获取自增id值的shell脚本如下:

########备注:1. 数据库名称:Problem_Trek      操作的表名称:problem_logger

#!/bin/bash

#

# Record_Problem - records system problems in database

#

###########################################################

#

# Determine mysql location & put into variable

#

MYSQL=which mysql" Problem_Trek -u root"

#

###########################################################

#

# Create Record Id & Report_Date

#

#ID_NUMBER=date +%y%m%d%H%M

#

REPORT_DATE=date +%y%m%d

#

############################################################

#

# Acquire information to put into table

#

echo

echo -e "Birefly describe the problem & its symptoms: \c"

#

read ANSWER

PROB_SYMPTOMS=$ANSWER

#

# Set Fixed Date & Problem Solution to null for now

#

FIXED_DATE=0

PROB_SOLUTIONS=""

#

#############################################################

#

# Insert acquired information into table

#

echo

echo "Problem recorded as follows:"

echo

id=$($MYSQL -e "INSERT INTO problem_logger VALUES (null,$REPORT_DATE,$FIXED_DATE,'$PROB_SYMPTOMS','$PROB_SOLUTIONS');SELECT LAST_INSERT_ID() id")

id=echo $id | gawk '{print $2}'

$MYSQL <<EOF

SELECT * FROM problem_logger where id_number=$id\G

EOF

#

#############################################################

#

# Check if want to enter a solution now

#

echo

echo -e "Do you have a solution yet?(y/n) \c"

read ANSWER

#

case $ANSWER in

y|Y|YES|yes|Yes|yEs|yeS|YEs|yES)

./Update_Problem.sh $id

#

;;

*)

# if answer is anything but yes, just exit script

;;

esac

#

############################################################

shell脚本获取mysql插入数据自增长id的值的更多相关文章

  1. Mysql 中获取刚插入的自增长id的值

    insert into user (username,password) VALUES ('); //获取刚插入的自增长id的值 select last_insert_id(); 在MySQL中,使用 ...

  2. zabbix3.0.4-agent通过shell脚本获取mysql数据库登陆用户

    zabbix3.0.4获取数据库登陆用户趋势详解 主要思路: 通过zabbix客户端shell脚本mysql命令取出用户表中的数据将结果反馈给zabbix,画出趋势图 1.修改zabbix-agent ...

  3. mysql 插入数据失败防止自增长主键增长的方法

    mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的? 或者说 ...

  4. SQLite数据库中获取新插入数据的自增长ID

    SQLite数据库中有一有列名为ID的自增列,项目需求要在向数据库在插入新数据的同时返回新插入数据行的ID. 我这里用事务,把插入和查询语句通过ExecuteReader一起提交,返回DbDataRe ...

  5. shell脚本操作mysql数据库

    shell脚本操作mysql数据库,使用mysql的-e参数可以执行各种sql的(创建,删除,增,删,改.查)等各种操作 mysql  -hhostname -Pport -uusername -pp ...

  6. shell脚本操作mysql库

    shell脚本操作mysql数据库-e参数执行各种sql(指定到处编码--default-character-set=utf8 -s,去掉第一行的字段名称信息-N) 2011-05-11 18:18: ...

  7. mysql插入数据后返回自增ID的方法,last_insert_id(),selectkey

    mysql插入数据后返回自增ID的方法 mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得 ...

  8. mysql函数之六:mysql插入数据后返回自增ID的方法,last_insert_id(),selectkey

    mysql插入数据后返回自增ID的方法 mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得 ...

  9. shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)

    shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查) Shell脚本与MySQL数据库交互(增删改查) # 环境准备:安装mariadb 数据库 [ro ...

随机推荐

  1. JavaScript高级程序设计15.pdf

    组合继承的问题是会调用2次超类型构造函数 寄生组合式继承 即通过借用构造函数来继承属性,通过原型链的形式来继承方法,思路:不必为了指定子类型的原型而调用超类型的原型,我们所需要的无非是超类型原型的一个 ...

  2. Google文档

    本博文的主要内容有 .Google文档的介绍 1.Google文档的介绍 https://zh.wikipedia.org/wiki/Google%E6%96%87%E4%BB%B6 http://d ...

  3. intellij安装 配置 创建项目

    使用intellij创建项目的整个过程如下: 首先,点击intllij的.exe文件,如果是第一次安装,选择第二个选项即可 Intellij需要license key,可以使用注册机生成相应的name ...

  4. oracle空表导不出来

    在oracle 11g r2中,使用exp有时候会导不出空的表,原因是这些表没有分配空间,手工分配空间即可导出. ----查询当前用户下的所有空表: select table_name from us ...

  5. 【基础】多线程更新窗体UI的若干方法

    一.前言 在单线程中设置窗体某个控件的值很简单的事,只需要设置控件文本的值就可以了,但是有的业务场景很是复杂,界面上的控件也很多,这种情况下当数据量比较多的时候,在单线程中更新UI不可避免地会发生假死 ...

  6. 移动开发框架,第【一】弹:QuoJs 官方文档(汉化版)

    作者:一只猿 原文地址: http://www.92ez.com 转载请注明出处,谢谢 帮助说明 如果您认为QuoJS只是一个触摸事件管理器,那你就错了,它是一个功能丰富的类库,无需第三方JavaSc ...

  7. javascript中的稀疏数组(sparse array)和密集数组

    学习underscore.js数组相关API的时候.遇到了sparse array这个东西,曾经没有接触过. 这里学习下什么是稀疏数组和密集数组. 什么是密集数组呢?在java和C语言中,数组是一片连 ...

  8. Linq中Union与Contact方法用法对比

    文章一开始,我们来看看下面这个简单的实例. 代码片段1: int[] ints1 = { 2, 4, 9, 3, 0, 5, 1, 7 }; int[] ints2 = { 1, 3, 6, 4, 4 ...

  9. [React] React Fundamentals: with-addons - ReactLink

    It can be tedious to type out all the boilerplate needed to get the DOM and states in React to synch ...

  10. 移动前端之 zepto

    移动前端之 zepto http://qtown.corp.qunar.com/media/video/detail?id=1084&type=1&title=%E5%86%AF%E5 ...