数据库学习笔记(3)

第五章 ALTER 改写历史
回想以前,当我们的表设计有问题时,我们总是重新创建一个表,然后把数据都移过去,这得有多烦人啊!
在这一章,你将学会如何在不改变现有记录情况下,修改表的结构,使用ALTER,准备好就开始吧。

回忆一下,我们学过UPDATE 与 SET,它可以让我们修改记录中的值,但却不能对表项进行改变,ALTER可以!

1.ALTER TABLE  为我们的表增加新的列,如下:

ALTER TABLE my_contacts
ADD COLUMN t_call VARCHAR(11);

这将会在我们的my_contacts的最后加入一列:t_call,试试看~

还记得上一章中添加主键列不?没错,这里只不过是普通的列!

2.那么如何放置我们新增的列呢?默认情况下是放在最后的,但如果我想放在last_name列后面呢,怎么办??

ALTER TABLE my_contacts
ADD COLUMN t_call VARCHAR(11) AFTER last_name;

没错,就是使用AFTER关键字,很简单吧~

更多关于位置的关键字:
1.FIRST :放在最开始
2.AFTER your_column:在your_column后面
3.BEFORE your_column:在your_column前面
4.LAST:放在最后
5.SECOND,THIRD依次类推,相信大家都懂的~


3.修改表
小心地雷:
你可以通过ALTER改变表里的一切,而且不用重新插入数据,但也要小心,如果改变列的类型,你可能会有遗失数据的风险!
下面列如不同命令的情况:

CHANGE 可同时改变现有列的名称和数据类型  *
MODIFY 修改现有列的数据类型或位置        *
ADD    在当前表中添加一列,可自选类型   
DROP   从表中删除某列(它也可以删除表)  *

注:* 表示可能导致数据遗失
 
下面是一个例子: 
                       projekts
number       descriptionofproj           contractoronjob
1             outside house painting     Murphy
2             kitchen remodel            Valdez
3             wood floor installation    Keller
4             roofing                    Jackson

建立这张表!
CREATE TABLE projekts
(
    number INT,
    descriptionofproj VARCHAR(30),
    contractoronjob VARCHAR(30)
);

插入数据:
insert into projekts
(
    number,
    descriptionofproj,
    contractoronjob
)
VALUES
(
    1,
    'outside house painting',
    'Murphy'
);
insert into projekts
(
    number,
    descriptionofproj,
    contractoronjob
)
VALUES
(
    2,
    'kitchen remodel',
    'Valdez'
);

insert into projekts
(
    number,
    descriptionofproj,
    contractoronjob
)
VALUES
(
    3,
    'wood floor installation',
    'Keller'
);
insert into projekts
(
    number,
    descriptionofproj,
    contractoronjob
)
VALUES
(
    4,
    'roofing',
    'Jackson'
);

select * from projekts;
好了,表已经建好

但这张表很糟糕!从列名看出来,你都看不出是什么东西。。。。。。。那么下面,我们就要改变它,同时保留我们的数据,这正是我们想要的!

在修改表时,我们很查看一下这个表的情况,用什么命令?

DESC projekts;
或者
show columns from projekts;

情况如下:
Filed                      Type          Null      Key     Default       Extra
number	                   int(11)	     YES			    (NULL)
descriptionofproj	      varchar(30)	 YES		        (NULL)
contractoronjob	          varchar(30)	 YES		 	    (NULL)

4.表的改名换姓

ALTER TABLE projekts
RENAME TO project_list;

我们要改变一下上面的表的情况,加入下面的列项:
proj_id proj_desc start_dese est_date con_name con_phone

有些内容上面表中已经有了,我们烦不着去新建一个表,把数据导进去,我们要在原表基础上修改,如何做呢?表名已经被我们改过了,这是一个很好的开始。

修改列名(也可以修改类型哦,只不过这样会有数据丢失危险,请确认你现在头脑很清醒-.-)
ALTER TABLE project_list
CHANGE COLUMN number proj_id INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (proj_id);


一次修改多个列名与类型:

ALTER TABLE project_list
CHANGE COLUMN descriptionofproj proj_desc VARCHAR(100),
CHANGE COLUMN contractoronjob con_name VARCHAR(30);

下面插入几个新的项到表中,使它形成下面的形式:

proj_id proj_desc start_dese est_date con_name con_phone

原来是这样的:
proj_id proj_desc con_name

开始工作,我们一次性完成这个工作,添加新的列,用ADD:

ALTER TABLE project_list
ADD COLUMN start_dese VARCHAR(30) AFTER proj_desc,
ADD COLUMN est_date DATE AFTER start_dese,
ADD COLUMN con_nTame VARCHAR(50) AFTER est_date,
ADD COLUMN con_phone VARCHAR(10) ;


很多时候我们不想改变列名而只是想改变类型,可以用MODIFY

ALTER TABLE project_list
MODIFY COLUMN proj_desc VARCHAR(150);



有时候,我们会想删除某一列,用DROP吧!

ALTER TABLE project_list
DROP COLUMN start_dese;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值