本来都不想写这节了,因为很麻烦,例子要多,且要有代表性,而且也知道大家都烦了。可是这节却是我们平时经常使用的,因为MySQL用的最多的就是对数据的操作,包括插入数据,更新数据,修改数据,删除数据。可是表才是存放数据的地方,一个表建的好坏直接影响你操作的性能
,所以我认为有必要来简单介绍一下这节,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.xiaoxiaozi.com/2009/07/16/1191/
分享到:
相关推荐
mysql对表的修改 ,复制与删除.
mysql对表的修改,复制与删除.docx
mysql对表的修改,复制与删除.pdf
mysql对表的修改,复制与删除知识.pdf
198 2、INSERT DELAYED 在客户机方的作用 199 8.4.4 对表进行优化 200 8.4.5 总结 201 8.5 服务器级优化 201 8.5.1 磁盘问题 201 8.5.2硬件问题 202 8.5.3 服务器参数的选择 202 8.5.4编译...
mysql 总结........................................................................................................................................6 1.1 数据库的种类.......................................
198 2、INSERT DELAYED 在客户机方的作用 199 8.4.4 对表进行优化 200 8.4.5 总结 201 8.5 服务器级优化 201 8.5.1 磁盘问题 201 8.5.2硬件问题 202 8.5.3 服务器参数的选择 202 8.5.4编译...
3、通过点击“设计”按钮,将切换到表结构设计页,您可以方便的增加、修改、删除表字段,调整字段顺序,设置主键,设置非空等操作。 4、当你编辑了许多SQL语句后,可点击”SQL保存”按钮,保存自己的劳动成果,通过...
如果MySQL服务器为从复制服务器,则无论选择什么备份方法,当备份从机数据时,还应备份master.info和relay-log.info文件。恢复了从机数据后,需要这些文件来继续复制。如果从机执行复制LOAD DATA INFILE命令,你应还...
6.2.6 复制文件 96 6.3 本地文件的操作实例——小型留言本 96 6.3.1 留言发表模块 96 6.3.2 浏览模块 98 6.4 远程文件的操作实例 99 6.5 文件的上传与下载 99 6.5.1 文件的上传 99 6.5.2 文件的下载 100 6.6 小结 ...
数据操作语言Data Manipulation Language(DML),用来插入、修改、删除、查询,可以修改数据库中的数据。例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句 数据查询语言 (Data Query Language, DQL)...
注:索引是不可更改的,想更改必须删除重新建。 9、说明: 创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 选择:select * from ...