mysql数据库查询序列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql数据库查询序列相关的知识,希望对你有一定的参考价值。

mysql数据库 获取当前序列号 或者插入一条数据怎么得到刚插入数据的自动生成主键ID值。 求完整SQL语句 表为test 在线等。

问题分析:序列=自增ID,是数据库根据数据插入先后顺序自动生成的。

查询方式:

只能再查询自增ID即可

具体操作:MYSQL获取自增ID的四种方法

    select max(id) from tablename

    SELECT LAST_INSERT_ID() 函数

    LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。

    select @@IDENTITY;

    @@identity 是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。

    SHOW TABLE STATUS;

    得出的结果里边对应表名记录中有个Auto_increment字段,里边有下一个自增ID的数值就是当前该表的最大自增ID.

参考技术A 创建一个表, id 列使用 mysql 的自动递增

mysql> CREATE TABLE test_create_tab2 (
-> id INT AUTO_INCREMENT,
-> val VARCHAR(10),
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.09 sec)

-- 插入一行数据
mysql> INSERT INTO test_create_tab2(val) VALUES ('NO id');Query OK, 1 row affected (0.03 sec)

-- 获取刚才插入那行的 自增ID。
mysql> select last_insert_id() as id;
+----+
| id |
+----+
| 1 |
+----+
1 row in set (0.00 sec)

-- 插入一行数据
mysql> INSERT INTO test_create_tab2(val) VALUES ('NO id 2');Query OK, 1 row affected (0.03 sec)

-- 获取刚才插入那行的 自增ID。
mysql> select last_insert_id() as id;
+----+
| id |
+----+
| 2 |
+----+
1 row in set (0.00 sec)

-- 最后核对一下数据。
mysql> select * from test_create_tab2;
+----+---------+
| id | val |
+----+---------+
| 1 | NO id |
| 2 | NO id 2 |
+----+---------+
2 rows in set (0.00 sec)本回答被提问者和网友采纳
参考技术B select last_insert_id(); 其中last_insert_id()为一函数,自动返回最后一个insert或update为auto_increment列设置的第一个发生的值 参考技术C select last_insert_id(); 参考技术D 设计数据库最好是有自动生成主键ID,再加上自己定义的unique的字段吧,这样你插进去,再根据这个unique的字段得到自动生成的Id。。。。追问

mysql不是主键自动序列的么。可以写一个sql语句查询ID例子么

MySQL从查询结果中获取数据

【中文标题】MySQL从查询结果中获取数据【英文标题】:MySQL get data from a query result 【发布时间】:2017-04-25 15:22:15 【问题描述】:

我是 PHP 和 MySQL 开发的新手。我使用 Visual Studio 在 Cordova 中构建了一个应用程序。该应用程序的工作方式如下:

    用户从下拉列表中选择序列号 选择序列号后,数据显示在图表上 应用中有一个拨动开关,通过它我根据serial number在数据库中插入onoff状态

我想做什么?

当用户选择任何序列号时,开关将根据该特定serial numberCommand Name 显示最后一个ONOff 状态。

为此,我生成了一个msql query,这个查询显示了所选序列号的最后一个command name

下面是我的 PHP 代码:

<?php
 require_once('config.php');

 $dsn = $_REQUEST['Device_Serial_Number'];
 $cmd_Name = $_REQUEST['Command_Name'];

 $sqlFet = "select ADC.Server_Device_Command_ID , ADC.Device_ID ,
 ADC.Server_Command_ID as Server_Command_ID, ASD.Command_Name
 from ADS_Server_Device_Command ADC
 inner join ADS_Server_Command ASD on adc.Server_Command_ID = asd.Server_Command_ID
 inner join ADS_Device dsn on adc.Device_ID = dsn.Device_ID
 where dsn.Device_Serial_Number = '$dsn'
 order by adc.Server_Device_Command_ID desc LIMIT 1";

  $result = mysqli_query($con,$sqlFet);

  mysqli_close($con);
  echo $cmd_Name;

?>

下面是我在 JavaScript 中的 AJAX 调用:

 $.ajax(
                method: "GET",
                url: "http://localhost:MyPort/server/toggleFetch.php",

                data:  Command_Name: tData , Device_Serial_Number: selectedVal ,
                success: function (data) 
                    var dt = data;
                    if (dt.Command_Name == "On") 
                        $("#cmn-toggle-7").prop('checked', true);
                    
                    else if (dt.Command_Name == "Off") 
                        console.log('else');

                        $("#cmn-toggle-7").prop('checked', false);
                    

                ,
                error: function (xhr, status, error) 
                   alert(xhr.responseText, status, error);
                    //toastr.success('Data not fetched', '',  timeOut: 2000 )
                    //alert('Error');
                

            );

但它没有显示所需的结果并给出如下图所示的错误:

更新代码:

下面是我的php更新代码

require_once('config.php');

$dsn = $_REQUEST['Device_Serial_Number'];
//$cmd_Name = $_REQUEST['Command_Name'];

$sqlFet = "select ADC.Server_Device_Command_ID , ADC.Device_ID ,
ADC.Server_Command_ID as Server_Command_ID, ASD.Command_Name
from ADS_Server_Device_Command ADC
inner join ADS_Server_Command ASD on adc.Server_Command_ID = asd.Server_Command_ID
inner join ADS_Device dsn on adc.Device_ID = dsn.Device_ID
where dsn.Device_Serial_Number = '$dsn'
order by adc.Server_Device_Command_ID desc LIMIT 1";

$result = mysqli_query($con,$sqlFet);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);


mysqli_close($con);
echo $row["Command_Name"];

下面是ajax

 $.ajax(
                method: "GET",
                url: "http://localhost:MyPort/server/toggleFetch.php",
                //dataType: "json",
                data:  Command_Name: tData , Device_Serial_Number: selectedVal ,
                success: function (data) 

                    var dt = data;

                    if (dt == "On") 
                        $("#cmn-toggle-7").prop('checked', true);
                    
                    else if (dt == "Off") 
                        console.log('else');

                        $("#cmn-toggle-7").prop('checked', false);
                    

                ,
                error: function (xhr, status, error) 
                   alert(xhr.responseText, status, error);
                    //toastr.success('Data not fetched', '',  timeOut: 2000 )
                    //alert('Error');
                

            );

现在在运行代码时我没有收到任何错误,但我仍然没有得到我需要的结果,即切换不会改变它的状态

更多信息请看下图

我不知道是什么问题,任何帮助将不胜感激。

【问题讨论】:

toggleFetch.php中的php代码吗? 好吧,不会有任何 dt.Command_name 因为它不是 json 对象,因此没有什么可以真正得到的。如果你只是简单地将数据放入一个 div 中,你可能只会看到 echo $cmd_Name; 的文本,所以试试 echo json_encode($cmd_Name); 看看它是否出现。否则你可能需要JSON.parse() 好吧,我试试,我告诉你 @A.Lau 尝试使用 JSON.parse() 并没有它,但仍然出现相同的错误 echo $cmd_Name; 应该回显什么? 【参考方案1】:

第一步:不要将带有 AJAX 的 command_name 发送到 PHP 脚本(这会导致第 5 行出现错误!!),这不是必需的。第二步:在 PHP 脚本中,您必须更改 echo $command_name,以根据 $dsn 从 DB 回显结果。所以从 DB 回显结果。

$row = mysqli_fetch_array($result, MYSQLI_BOTH);
echo $row["Command_name"]; //This should show ON/OFF state from DB to AJAX.

【讨论】:

第三步:你有 IF dt.Command_name = "..... 我认为应该有 IF dt = "on" 因为 AJAX 会放入 PHP 脚本的变量 DATA 输出中。例如您的 PHP 脚本将回显 ON(基于 $dsn 的状态),而 AJAX 会将其置于变量 DATA 中。所以这是错误的(dt.Command_name)。您必须更改它。 它仍然在第 5 行出现错误$cmd_Name = $_REQUEST['Command_Name']; 我在不必要的情况下忘记了抱歉这一行。删除它,你不会从 REQUEST 中读取 cmd_name 而是从 DB 中读取。 好的,让我试一试 我在我的服务器上尝试了这个解决方案,它工作!我没有想法,也许检查您的输入是否有 id="cmn-toggle-7"【参考方案2】:

这个错误意味着,AJAX 没有通过 GET 发送 Command_Name。如果变量 tData 包含某个值,则必须检查它。

【讨论】:

当用户选择任何序列号时,开关将根据该特定序列号的命令名称显示最后的 ON 或 Off 状态。为此,我生成了一个 msql 查询,该查询显示了所选序列号的最后一个命令名称下面是我的 PHP 代码:

以上是关于mysql数据库查询序列的主要内容,如果未能解决你的问题,请参考以下文章

MySQL从查询结果中获取数据

如何对分库后的数据进行分页查询

mysql结果集筛选排序

MySQL数据库Query性能定位

node.js 同步 mysql 查询

填补Mysql查询中时间序列空白的最佳方法