Discuz!X 后台增加或删除数据表及字段常用SQL语句

很多朋友经常问到discuz后台数据库升级的问题,按情况, 数据库的升级代码可以分三个类别:

1. 建立一个或多个数据表;

2. 建立一个或多个字段(及如何更改字段长度);

3. 添加一个或多个字段的值;



针对以上情况,我们应该怎么判断我们升级的数据库代码属于哪一种类型的呢?

让我们拿作品<鲜花鸡蛋送给作者>来说吧, 这个插件就要用到上面的前两个类别,让我们先来看看第一类:

一、 建立一个表:

CREATE TABLE `cdb_felog` (

`id` mediumint( 20 ) unsigned NOT NULL AUTO_INCREMENT ,

`fromuser` varchar( 15 ) NOT NULL default '',

`touser` varchar( 15 ) NOT NULL default '',

`asfe` varchar( 8 ) NOT NULL default '',

`score` int( 10 ) NOT NULL default '0',

`tid` varchar( 15 ) NOT NULL default '',

`aswhat` varchar( 100 ) NOT NULL default '',

PRIMARY KEY ( `id` )

) TYPE = MYISAM



判断依据: 以   CREATE TABLE   开头,后面跟数据表的名字:  CDB_XXX
结束标致: TYPE = ……

这类就属于上述的第一个类别:添加一个数据表!

反安装方法:
DROP TABLE CDB_XXX

方法简述:这类升级代码的反安装方法很简单,不管这个表有多大,你可需要用DROP TABLE后跟数据表的名字即可,例如我的鲜花鸡蛋插件以上的升级代码,反安装的代码如下:
DROP TABLE cdb_felog


二、建立一个或多个字段:
ALTER TABLE `cdb_posts` ADD `flower` INT(10) DEFAULT '0' NOT NULL;

ALTER TABLE `cdb_posts` ADD `egg` INT(10) DEFAULT '0' NOT NULL;

ALTER TABLE `cdb_threads` ADD `flower` INT(10) DEFAULT '0' NOT NULL;

ALTER TABLE `cdb_threads` ADD `egg` INT(10) DEFAULT '0' NOT NULL;

或:

ALTER TABLE `cdb_members` ADD `putsum` INT( 8 ) NOT NULL ,

ADD `audsum` INT( 8 ) NOT NULL ,

ADD `groomsum` INT( 8 ) NOT NULL ,

ADD `delesum` INT( 8 ) NOT NULL ,

ADD `audit` VARCHAR( 1 ) NOT NULL ;


判断依据: 以   ALTER TABLE   开头,后面跟数据表的名字:  CDB_XXX,再跟 ADD,再跟字段的名称!
注意事项: 这类升级代码有种简写的方式,如果升级一个表内的字段多于一个,就可以用简化方式写

上面第一个升级代码是完整的写法,第二个写法最简写;

两者的区别就在于不用多写  ALTER TABLE `数据表`
在同一个数据表里升级两个或以上的字段,就可以使用这种升级方式了。

反安装方法:
ALTER TABLE `数据表1` DROP `字段名1`;

ALTER TABLE `数据表2` DROP `字段名1`;



ALTER TABLE `数据表`

DROP `字段名1`,

DROP `字段名1`,

DROP `字段名1`;


方法简述:不管是第一个方法还是第二种方法,都可以完成对添加字段的反安装

只要把“数据表1"的名字替换成添加字段的表“CDB_XXX",再把“字段名1”替换成添加的字段名(ADD后的名字)。

例子:
上面第一个代码写法的反安装代码为:

ALTER TABLE `cdb_posts` DROP `flower;

ALTER TABLE `cdb_posts` DROP `egg`;

ALTER TABLE `cdb_threads` DROP `flower`;

ALTER TABLE `cdb_threads` DROP `egg`;

上面第二个代码写法的反安装代码为:

ALTER TABLE `cdb_members` DROP `,

DROP `audsum`,

DROP `groomsum` ,

DROP `delesum` ,

DROP `audit` ;


其实大家仔细观察一下就可以看出来,这类反安装代码其实就是把升级代码中的ADD改为DROP,并把字段名后的部分代码删除即可。


清空字段信息:
例如:把pre_ucenter_member表中的secques字段清空
update pre_ucenter_member set secques='';



SQL更改字段长度:
alter table 表名 modify column 字段名 类型;

例如:修改数据库中pre_forum_thread表的secondsubject字段,将其长度更改为char(85)
可以用:alter table pre_forum_thread modify column secondsubject char(85) ;



三、添加一个或多个字段的值:
INSERT INTO `cdb_settings` (`variable`, `value`) VALUES ('attaopen', '1');

INSERT INTO `cdb_settings` (`variable`, `value`) VALUES ('attacoun', '15');


这类升级代码很少用,一段是用在SETTINGS表里。

其标致为:以INSERT INTO开头,后面是数据表的名字,第一个括号里面的是要加给值的字段名,第二个括号里的值是与第一个括号里对应的,分别是加到第一个括号里字段里的。

反安装代码:
DELETE FROM `cdb_settings` WHERE `variable` = 'attaopen' AND `value` = '1' ;

DELETE FROM `cdb_settings` WHERE `variable` = 'attacoun' AND `value` = '15' ;


方法简述:
先将升级代码中的INSERT INTO改为DELETE FROM, 在第一个括号前加个“ WHERE ”,然后是第一个括号里的值“variable”,再加“=”号,再加第二个括号里的第一个值“attaopen”,如果括号里的值不止一个,那再加“ ADD ”,再加第一个括号里的第二个值“value”,再加“=”号,再另第二个括号里的第二个值“1”,如果还有更多那就再加“ADD”再加第一个括号里的第三个……

这就是数据库反安装的基本方法。希望大家认真掌握自己动手进行数据库信息的增加与删除!

相关文章

此处评论已关闭