我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数,或者刚插入的数据的ID值。

一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。

但在多线程,高并发的情况下,就不行了。

开始的时候我想的是使用mysql_insert_id(),不知道会不会在并发的时候产生影响,查询了下手册,也是才发现,是根据connection来的,不同用户间不会产生影响。所以也不用去想先把表锁起来,插入取得ID值后再解锁。直接正常插入,然后取值,即可。

int mysql_insert_id ([ resource $link_identifier ] )

mysql_insert_id()返回给定的 link_identifier中上一步 INSERT 查询中产生的 AUTO_INCREMENT 的 ID 号。如果没有指定 link_identifier,则使用上一个打开的连接。

如果上一查询没有产生 AUTO_INCREMENT 的值,则 mysql_insert_id()返回 0。如果需要保存该值以后使用,要确保在产生了值的查询之后立即调用 mysql_insert_id()。

warning: mysql_insert_id() 将 MySQL 内部的 C API 函数 mysql_insert_id()的返回值转换成 long(PHP 中命名为 int)。如果 AUTO_INCREMENT 的列的类型是 BIGINT,则 mysql_insert_id()返回的值将不正确。可以在 SQL 查询中用 MySQL 内部的 SQL 函数 LAST_INSERT_ID() 来替代。

此外,还可以通过QUERY两个SQL语句来执行:

阅读全文

首先说一下mysql的数值类型,MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。

作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

<td>
  <strong>字节</strong>
</td>

<td>
  <strong>最小值</strong>
</td>

<td>
  <strong>最大值</strong>
</td>
<td>
</td>

<td>
  <strong>(带符号的/无符号的)</strong>
</td>

<td>
  <strong>(带符号的/无符号的)</strong>
</td>
<td>
  1
</td>

<td>
  -128
</td>

<td>
  127
</td>
<td>
</td>

<td>
</td>

<td>
  255
</td>
<td>
  2
</td>

<td>
  -32768
</td>

<td>
  32767
</td>
<td>
</td>

<td>
</td>

<td>
  65535
</td>
<td>
  3
</td>

<td>
  -8388608
</td>

<td>
  8388607
</td>
<td>
</td>

<td>
</td>

<td>
  16777215
</td>
<td>
  4
</td>

<td>
  -2147483648
</td>

<td>
  2147483647
</td>
<td>
</td>

<td>
</td>

<td>
  4294967295
</td>
<td>
  8
</td>

<td>
  -9223372036854775808
</td>

<td>
  9223372036854775807
</td>
<td>
</td>

<td>
</td>

<td>
  18446744073709551615
</td>

Mysql类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。

当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。请注意如果在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度。

所有整数类型可以有一个可选(非标准)属性UNSIGNED。当你想要在列内只允许非负数和该列需要较大的上限数值范围时可以使用无符号值。

所以int(10)与int(11)后的括号中的字符表示显示宽度,整数列的显示宽度与mysql需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,int类型的字段能存储的数据上限还是2147483647(有符号型)和4294967295(无符号型)。

阅读全文

由于微博API要求从2011年12月26日起,所有请求必须加入请求者的IP。由于从内网发起请求,最后header中获得的IP为10打头的内网IP,导致认证失败。

修改sae的SaeTClientV2类的http()方法中检测下,如果IP是10打头的内网IP,强制转换header中的saeremoteip为一个外网IP。

阅读全文

mysql命令行中执行多行命令时,如果前边输入的命令发生错误,是无法返回修改的,但是可以通过输入c来取消前边的输入,但是这时如果前边输入的东西很多,直接取消又很可惜的话,可以通过p来打印出前边的命令,复制下来去修改,然后输入c取消来重新输入命令。

阅读全文

Memcache 命令行用法

1、启动Memcache 常用参数

如:

在linux下:./usr/local/bin/memcached -d -u jb-mc -l 192.168.1.197 -m 2048 -p 12121

在window下:d:App_Servmemcachedmemcached.exe -d RunService -l 127.0.0.1 -p 11211 -m 500

在windows下注册为服务后运行:

sc.exe create jb-Memcached binpath= “d:App_Servmemcachedmemcached.exe -d RunService -p 11211 -m 500″ start= auto

net start jb-Memcached

 

阅读全文

mysql的like查询默认是不区分大小写的 如:

效果是一样的。

要让mysql的like查询区分大小写,可以这样:

也可以在建表时,加以标识binary,也可实现like查询时区分大小写:

 

阅读全文

作者的图片

DigDeeply

Technology Stack: Golang/PHP/Openresty, and so on…

Web Development Engineer

Beijing China