This Domain(Admin5.com) is for Sale:

My SQL数据库实用技术(08)

时间:2007-12-23  来源:不详  作者:迈克DB
PHP 脚本中处理具有前导零的序列编号,则必须仔细地将它们只作为串使用;假如将它们转换成数字,前导零将会丢失。下面的短Perl 脚本说明了处理编号时可能会出的问题:

打印时,此脚本给出下列输出:

P e r l’s‘ ’自动增量操作是很灵巧的而且可以利用串或数值建立序列值,但‘ =’操作只应用于数值。在所显示的输出中,可看到‘ =’引起串到数值的转换并且丢失了$s 值中的前导零。
序列不从1开始的另一个原因从技术的角度来说可能不值一提。例如,在分配会员号时,序列号不要从1开始,以免出现关于谁是第一号的政治争论。
(4) 不用A U TO_INCREMENT 生成序列生成序列号的另一个方法根本就不需要使用A U TO_INCREMENT 列。它利用取一个参数的L A S T _ I N S E RT_ID( ) 函数的变量来生成序列号。(这种形式在MySQL 3.22.9. 中引入)假如利用L A S T _ I N S E RT_ID(expr) 来插入或更新一个列, 则下一次不用参数调用L A S T _ I N S E RT_ID( ) 时,将返回expr 的值。换句话说,就像由A U TO_INCREMENT 机制生成的那样对expr 进行处理。这样使得能生成一个序列号,然后可在以后的客户会话中利用它,用不着取受其他客户机影响的值。利用这种策略的一种方法是创建一个包含一个值的单行表,该值在想得到序列中下一个值时进行更新。例如,可创建如下的表:

织梦内容管理系统



上面的语句创建了表seq_table 并用包含seq 值0 的行对其进行初始化。可利用这个表产生下一个序列号,如下所示:

该语句取出seq 列的当前值并对其加1,产生序列中的下一个值。利用L A S T _ I N S E RT _ID(seq 1) 生成新值使它就像一个AUTO_INCREMENT 值一样,而且此值可在以后的语句中通过调用无参数的L A S T _ I N S E RT_ID( ) 来取出。即使某个其他客户机同时生成了另一个序列号,上述作用也不会改变,因为L A S T _ I N S E RT_ID( ) 是客户机专用的。假如希望生成增量不是1 的编号序列或负增量的编号序列,也可以利用这个方法。例如,下面两个语句可以用来分别生成一个增量为100 的编号序列和一个负的编号序列:

通过将seq 列设置为相应的初始值,可利用这个方法生成以任意值开始的序列。关于将此序列生成方法用于多个计数器的应用,可参阅第3章。
2.2.3 串列类型
MySQL 提供了几种存放字符数据的串类型。串经常用于如下这样的值: copyright dedecms

在某种意义上,串实际是一种“通用”类型,因为可用它们来表示任意值。例如,可用串类型来存储二进制数据,如影像或声音,或者存储gzip 的输出结果,即存储压缩数据。对于所有串类型,都要剪裁过长的值使其适合于相应的串类型。但是串类型的取值范围很不同,有的取值范围很小,有的则很大。取值大的串类型能够存储近4GB 的数据。因此,应该使串足够长以免您的信息被切断(由于受客户机/服务器通信协议的最大块尺寸限制,列
值的最大限额为2 4 M B)。
表2 - 8给出了MySQL 定义串值列的类型,以及每种类型的最大尺寸和存储需求。对于可变长的列类型,各行的值所占的存储量是不同的,这取决于实际存放在列中的值的长度。这个长度在表中用L 表示。

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息