位置于:书籍教程首页>>数据库类>>mysql>>正文

MySQL数据库技术(18)

http://www.xp163.com/制作:

    3.8.5 对某个已有的列进行排序
    如果有一个数值列,可对其按如下进行排序(或对其重排序,如果已对其排过序,但删除了行并且想要对值重新排序使其连续):
    ALTER TABLE t MODIFY i INT NULL
    UPDATE t SET i = NULL
    ALTER TABLE t MODIFY i INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY
    但是有一种更容易的方法,那就是删除该列,然后再作为一个A U TO_INCREMENT 列追加它。A LTER TABLE 允许指定多个活动,因此,上述工作可在单个语句中完成:
    ALTER TABLE t
    DROP i,
    ADD i INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY
    3.8.6 非正常次序的串
    假如有一个表示体育机构人员的表,如橄榄球队,如果按人员职位进行排序,以便以特殊的顺序表示它,如:教练、教练助理、四分卫、流动后卫、接球员、巡逻员等。可将列定义为ENUM 并按希望出现的顺序定义枚举元素。对该列的排序将会以所指定的顺序自动进行。
    3.8.7 建立计数表
    在第2章的“使用序列”小节中,我们介绍了怎样利用L A S T _ I N S E RT_ID(expr) 生成一个序列。那个例子说明了怎样利用单列的表进行计数。那样做对于只需要单个计数器的情形能够满足需要,但是,如果需要几个计数器,该方法将会引起不必要的表重复。假如有一个Web 站点并且想要在几个页面上放置“此页面已经被访问nnn 次”这样的计数器。那么为每个具有一个计数器的页面建立一个单独的表就有些多余了。避免创建多个计数器表的一种方法是建立一个两列的表。其中一列存放计数值;另一列存放计数器名。这时仍然可以使用LAST _ INSERT_ID( ) 函数,但可用计数器名来决定用哪一行。这个表如下所示:
    CREATE TABLE counter
    (
    count INT UNSIGNED,
    name varchar(255) NOT NULL PRIMARY KEY
    )
    其中计数器名为一个串,从而可以调用任何想要的计数器,我们将其定义为PRIMARY KEY 以免名称重复。这里假定使用这个表的应用程序知道他们将使用的名称。对于前面所说的Web 计数器,可通过利用文件树中每个页面的路径名作为其计数器名的方法,保证计数器名的唯一性。例如,要为站点的主页建立一个新计数器,可执行下列语句:
    INSERT INTO counter(name) VALUES("index.html")
    它用零值初始化称为“ index.html”的计数器。为了生成序列中的下一个值,增加表中相应行的计数值,然后用LAST _ INSERT_ID( ) 检索它:
    UPDATE counter
    SET count = LAST_INSERT_ID(count+1)
    WHERE name = "index.html"
    SELECT LAST_INSERT_ID()
    另一种方法是不用LAST _ INSERT_ID( ) 增加计数器的值,如下所示:
    UPDATE counter SET count = count+1 WHERE name = "index.html"
    SELECT count FROM counter WHERE name = "index.html"
    然而,如果另一个客户在您发布U P D ATE 语句与SELECT 语句之间增加了该计数器的值,则这种方法工作不正常。不过可在此两条语句的前后分别放置LOCK TABLES 和U N L O C KTABLES,在您使用该计数器时阻塞其他客户,以解决上述问题。但用L A S T _ I N S E RT_ID( )方法完成同样的工作更为容易一些。因为它的值是客户专用的,您总能得到自己插入的值,而不是其他客户插入的值,而且不必阻塞其他客户使代码复杂化。
    3.8.8 检查表是否存在
    在应用程序内部知道一个表是否存在有时很有用。为了做到这一点,可使用下列任一条语句:
    SELECT COUNT(*) FROM tb1_name
    SELECT * FROM tb1_name WHERE 1=0
    如果指定的表存在,则上述两条语句都将执行成功,如果不存在,则都失败。它们是这种测试的很好的查询。它们执行速度快,所以不会费太多的时间。这种方法最适合您自己编写的应用程序,因为您可以测试查询的成功与失败并采取相应的措施。但在从mysql 运行的批量脚本中不特别有用,因为发生错误时除了终止运行外不可能做任何事(或者可以忽略相应的错误,但是显然无法再运行该查询了)。


 最新网站更新
 网站MySQL数据库技术(18)说明

 

 书籍教程站内推荐信息
 书籍教程网站地图