网站运营 | 站长学院 | 技术文档 | 成语 | 歇后语 | 桌面壁纸 | 帝国时代 | 代码收藏 | IP地址查询 | 生活百科 | 生日密码 | CSS压缩 | 用户评论

MySQL对表的复制,修改及删除

【 作者:simaopig 更新时间:2011-05-25 | 字体:
[导读]本来都不想写这节了,因为很麻烦,例子要多,且要有代表性,而且也知道大家都烦了

本来都不想写这节了<,因为很麻烦<,例子要多,且要有代表性,而且也知道大家都烦了表才是存放数据的地方,一个表建的好坏直接影响你操作的性能<,所以我认为有必要来简单介绍一下这节<,MySQL对表的复制,修改和删除。包括从复制一个表结构到另一个表,修改表结构(例如:增加删除字段<<,增加索引等),还有,删除没用的表释放硬盘空间。
 

select * from nickname;

/*
id   name      desc
1    simaopig  这本是给丫头起的名字
2    虫zi       不是一条龙就是一条虫,虫子是不用早起的
3    chongpig  这样可以说明虫zi是爱小猪的,呵呵
*/

假设有上面这个昵称表,本篇日志所讲都是以此表为基础,大家直接以此为参考即可。

MySQL表的复制

创建表的副本:

创建一个完全和上表表结构一样,数据也一样的新表,即直接复制原表的表结构可以用如下SQL语句

/*
用子查询,创建表<,表的结构呢完全和nickname一致,并且数据也相同
*/

create table new_nickname select * from nickname;

只创建含有特定字段的表副本:

有的时候呢,我需要一个新表<,只需要有昵称表的name与desc两个字段即可,不需要id字段,同样使用子查询<,不过不再是select * 而是直接select 想要的字段即可

/*
因为只想要name和desc字段,所以我只查询原表的这两个字段即可
*/

create table new_nickname select name, desc from nickname;

只创建含有约束条件的值的表副本:

比如说<,突然间我只想要那个id < 3的昵称表的所有数据咋办呢<?(我不是 矫情啊,是为了举例??<!)这个时候<,我们就需要为子查询加上条件限制,where 语句大家没有忘吧?

/*
限定条件<,只要id<3的数据
*/

create table new_nickname select * from nickname where id < 3;

只复制表结构,咱爷们不要表数据:

有的时候呢<<,我只想复制旧表的表结构,至于里面的数据呢?已经old了,我是不想要的,即我只想复制一个表的表结构,这个时候咋办呢?别怕,我教你三种方法,均可解决此问题。

/*
和上面复制特定数据一样,只不过呢,咱这个条件弄个恶心点的,
当0=1的时候我才要你的数据<,显然不会复制任何数据了
*/

create table new_nickname select * from nickname where 0 = 1;

上面的方法是取巧<,因为没有合格的数据符合限制条件,所以被复制的当然只有表结构了。另外MySQL提供了一个现成的语法<,那就是:create table new_talbe_name like old_table_name;

/*
应用create table like 语法,只复制表结构
*/

create table new_nickname like nickname;

第三种方法就是用咱们之前取过外键key_id的方法,显示创建表时的SQL语句然后复制,显示建表语句的方法为:show create table table_name;

复制旧表部分结构<,同时增加新字段:

人都要创新嘛,社会在进步,如果还停留不前的话是会淘汰的<,所以咱也不能单纯的复制<,也要有点自己的个性<,在我的地盘听我的嘛<。比如说复制昵称表的同时呢,我要创建一个新的字段<,就是昵称创建日期字段。嗯。

/*
咱也个性点<,新字段咋的也得先声明一下,再复制想要的那部分字段,嘿嘿
*/

create table new_nickname (create_time date not null, status enum('1','2')) select name, desc from nickname;

MySQL表的修改

MySQL可以使用ALTER TABLE 语法来更改已存在的表,它允许在不重建整个表的情况下<,添加删除或者修改表字段。其完整结构为:ALTER TABLE table-name (action field-definition, action field-definition, ….);

这里面的action包括关键字:ADD,DROP,ALTER或者是CHANGE中的任何一个,而且后面跟的是与创建表CREATE TABLE命令使用的相同的字段定义。这个定义包含要修改的字段的名字和由新字段名字<<、类型和约束组成的字段定义<。

向表中添加新字段:

这回咱也不复制表了<,搞的那么郁闷干什么?咱直接在昵称表上面更改<,为昵称表添加新的字段创建时间——create_time

/*
我相信不用我说您也知道应该用上面说的action中的ADD<,嗯,都是联明的孩子啊
*/

alter table nickname add create_time date not null ;

为表添加主键:

咱可不是仅能改表的字段描述<,添加新字段啥的。咱还能为表添加主键及索引。不信咱就试一下<<<,将昵称表的id添加为主键<。

/*
主键的描述是PRIMARY KEY
*/

alter table nickname add primary key (id);

修改字段名及类型:

把昵称表的字段name改为nick_name,嗯,说干咱就干。该出手时咱就得出手不是?要不软柿子都让别人捏走了。

alter table nick_name change name nick_name varchar(255);

在修改字段类型时,MySQL允许使用modify关键字来替换change。二者惟一的区别就是change需要同时指定新字段与旧字段的名字,而modify因为只能用在修改字段类型上<,而不能改变字段名字,所以自然就没有新字段名称这一概念

/*
将nick_name表中的id由原来的int(3)改为bigint(18)
*/

alter table nick_name change id id bigint(18) auto_increment unique;

alter table nick_name modify id bigint(18) auto_increment unique;

删除字段:

呃,本来字段就不多,行啊,为了日志,删除id吧。嗯。

/*
聪明 的孩子这回都知道action应该选择DROP 了
*/

alter table nick_name drop id;

给表重命名:

把昵称表的名字改为new_nickname,重命名表的名字,MySQL提供了一个方法RENAME TO<,有两种用法<,注意看示例

alter table nick_name rename to new_nickname;

rename table nick_name to new_nickname;

给表增加外键:

MySQL提供了一种给表增加外键的语法:ADD FOREIGN KEY

/*
把nick_name表中的name添加为外键,外键参照于user表
*/

alter tabgle nick_name add foreign key (name ) references users (user_name) on delete cascade on update cascade;

更改表类型:

前面的日志介绍了MySQL表的不同表类型,并简单谈了一下它们的区别,及何时应用哪种格式,现在让我们来看一下,如果不小心选错了MySQL的表类型<,如何更改

/*
将nick_name表类型由InnoDB改为MyISAM
*/

alter table nick_name type = myisam;

为字段设置或删除默认值:

表字段是可以设置默认值的,那么如何更改呢?假设我要把nick_name的desc设默认值为“丫头,我爱你”咋办呢<<?MySQL提供了设置和删除默认值的方法:SET DEFAULT 和 DROP DEFAULT<,还有在我新增加字段的时候<,比如我增加create_time字段,我想把这个字段放在name字段的后面咋办?MySQL提供给我们FIRST和AFTER子句控制字段的位置。

/*
为表增加默认值
*/

alter table nick_name alter desc set default = '丫头<,我爱你';

/*
为表删除默认值
*/

alter table nick_name alter desc drop default;

/*
将create_time字段放在name后面
*/

alter talbe nick_name add create_time datetime after name;

/*
将create_time字段放在desc前面
*/

alter table nick_name add create_time datetime first desc;

MySQL表的删除

此操作相当简单,但是一定要慎重<<,慎重<,慎重?。?! @_@

DROP TABLE table-name;

/*
删除nick_name表
*/

drop table nick_name;

如果怕表不存在,导致系统报错的话可以用上IF EXISTS就像建表时可以用IF NOT EXISTS一样

/*
如果nick_name表存在就删除它
*/

drop table if exists nick_name;

PS:这篇写完了<,好长啊,好累啊。嗯。<<。

原文:http://www.chinawobo.com/2009/07/16/1191/

友荐云推荐
  • 转载请注明来源:网站运营 网址:http://www.chinawobo.com/ 向您的朋友推荐此文章
  • 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载<,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站<,我们表示深深的谢意。如果本站转载的文章有版权问题请联系我们,我们会尽快予以更正。
RSS订阅
  • QQ邮箱
  • 填写您的邮件地址,订阅我们的精彩内容:
更多
© 2014 网站运营 - T086.com(原itlearner.com)
微商货源 | 冠珠陶瓷 | 迪威乐云商devmsn | 易奇八字 | wwe美国职业摔角 | 八字算命 | 河南旅游景点大全 |
RunTime:6.07ms QueryTime:7