来源:Discuz!论坛数据库升级代码
按情况, 数据库的升级代码可以分三个类别:
1. 建立一个或多个数据表;
2. 建立一个或多个字段;
3. 添加一个或多个字段的值;
针对以上情况,我们应该怎么判断我们升级的数据库代码属于哪一种类型的呢?
好让我们拿我的作品<鲜花鸡蛋送给作者>来说吧, 这个插件就要用到上面的前两个类别,让我们先来看看第一类:
一、 建立一个表:
- CreateTABLE`cdb_felog`(
- `id`mediumint(20)unsignedNOTNULLAUTO_INCREMENT,
- `fromuser`varchar(15)NOTNULLdefault“”,
- `touser`varchar(15)NOTNULLdefault“”,
- `asfe`varchar(8)NOTNULLdefault“”,
- `score`int(10)NOTNULLdefault“0”,
- `tid`varchar(15)NOTNULLdefault“”,
- `aswhat`varchar(100)NOTNULLdefault“”,
- PRIMARYKEY(`id`)
- )TYPE=MYISAM
判断依据: 以 Create TABLE 开头,后面跟数据表的名字:CDB_XXX
结束标致: TYPE = ……
这类就属于上述的第一个类别:添加一个数据表!
反安装方法:
- DropTABLECDB_XXX
方法简述:这类升级代码的反安装方法很简单,不管这个表有多大,你可需要用Drop TABLE后跟数据表的名字即可,例如我的鲜花鸡蛋插件以上的升级代码,反安装的代码如下:
- DropTABLEcdb_felog
二、建立一个或多个字段:
(1)
- AlterTABLE`cdb_posts`ADD`flower`INT(10)DEFAULT“0”NOTNULL;
- AlterTABLE`cdb_posts`ADD`egg`INT(10)DEFAULT“0”NOTNULL;
- AlterTABLE`cdb_threads`ADD`flower`INT(10)DEFAULT“0”NOTNULL;
- AlterTABLE`cdb_threads`ADD`egg`INT(10)DEFAULT“0”NOTNULL;
或:
(2)
- AlterTABLE`cdb_members`ADD`putsum`INT(8)NOTNULL,
- ADD`audsum`INT(8)NOTNULL,
- ADD`groomsum`INT(8)NOTNULL,
- ADD`delesum`INT(8)NOTNULL,
- ADD`audit`VARCHAR(1)NOTNULL;
判断依据: 以 Alter TABLE 开头,后面跟数据表的名字:CDB_XXX,再跟 ADD,再跟字段的名称!
注意事项: 这类升级代码有种简写的方式,如果升级一个表内的字段多于一个,就可以用简化方式写
以上1)升级代码是完整的写法,2)最简写;
两者的区别就在于不用多写Alter TABLE `数据表`
在同一个数据表里升级两个或以上的字段,就可以使用这种升级方式了。
反安装方法:
1)
- AlterTABLE`数据表1`Drop`字段名1`;
- AlterTABLE`数据表2`Drop`字段名1`;
2)
- AlterTABLE`数据表`
- Drop`字段名1`,
- Drop`字段名1`,
- Drop`字段名1`;
方法简述:不管是第一个方法还是第二种方法,都可以完成对添加字段的反安装
只要把数据表1"的名字替换成添加字段的表CDB_XXX",再把字段名1替换成添加的字段名(ADD后的名字)。
例子:
以上1)的反安装代码为:
- AlterTABLE`cdb_posts`Drop`flower;
- AlterTABLE`cdb_posts`Drop`egg`;
- AlterTABLE`cdb_threads`Drop`flower`;
- AlterTABLE`cdb_threads`Drop`egg`;
2)的反安装代码为:
- AlterTABLE`cdb_members`Drop`,
- Drop`audsum`,
- Drop`groomsum`,
- Drop`delesum`,
- Drop`audit`;
其实大家仔细观察一下就可以看出来,这类反安装代码其实就是把升级代码中的ADD改为Drop,并把字段名后的部分代码删除即可。
三、添加一个或多个字段的值:
- InsertINTO`cdb_settings`(`variable`,`value`)VALUES(“attaopen”,“1”);
- InsertINTO`cdb_settings`(`variable`,`value`)VALUES(“attacoun”,“15”);
这类升级代码很少用,一段是用在SETTINGS表里。
其标致为:以Insert INTO开头,后面是数据表的名字,第一个括号里面的是要加给值的字段名,第二个括号里的值是与第一个括号里对应的,分别是加到第一个括号里字段里的。
反安装代码:
- DeleteFROM`cdb_settings`Where`variable`=“attaopen”AND`value`=“1”;
- DeleteFROM`cdb_settings`Where`variable`=“attacoun”AND`value`=“15”;
方法简述:
先将升级代码中的Insert INTO改为Delete FROM, 在第一个括号前加个 Where ,然后是第一个括号里的值variable,再加=号,再加第二个括号里的第一个值attaopen,如果括号里的值不止一个,那再加 ADD ,再加第一个括号里的第二个值value,再加=号,再另第二个括号里的第二个值1,如果还有更多那就再加ADD再加第一个括号里的第三个……