alter table add 字段新增字段操作究竟有何影响

SQL ALTER TABLE 语句
ALTER TABLE 语句
ALTER TABLE 语句用于在已有的表中添加、删除或修改列。
SQL ALTER TABLE 语法
如需在表中添加列,请使用下面的语法:
ALTER TABLE table_name
ADD column_name datatype
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
ALTER TABLE table_name
DROP COLUMN column_name
要改变表中列的数据类型,请使用下面的语法:
SQL Server / MS Access:
ALTER TABLE table_name
ALTER COLUMN column_name datatype
My SQL / Oracle:
ALTER TABLE table_name
MODIFY COLUMN column_name datatype
Oracle 10G 之后版本:
ALTER TABLE table_name
MODIFY column_
SQL ALTER TABLE 实例
请看 "Persons" 表:
Timoteivn 10
现在,我们想在 "Persons" 表中添加一个名为 "DateOfBirth" 的列。
我们使用下面的 SQL 语句:
ALTER TABLE Persons
ADD DateOfBirth date
请注意,新列 "DateOfBirth" 的类型是 date,可以存放日期。数据类型规定列中可以存放的数据的类型。如需了解 MS Access、MySQL 和 SQL Server 中可用的数据类型,请访问我们完整的 。
现在,"Persons" 表将如下所示:
DateOfBirth
Timoteivn 10
改变数据类型实例
现在,我们想要改变 "Persons" 表中 "DateOfBirth" 列的数据类型。
我们使用下面的 SQL 语句:
ALTER TABLE Persons
ALTER COLUMN DateOfBirth year
请注意,现在 "DateOfBirth" 列的类型是 year,可以存放 2 位或 4 位格式的年份。
DROP COLUMN 实例
接下来,我们想要删除 "Person" 表中的 "DateOfBirth" 列。
我们使用下面的 SQL 语句:
ALTER TABLE Persons
DROP COLUMN DateOfBirth
现在,"Persons" 表将如下所示:
Timoteivn 10
记住登录状态
重复输入密码MySQL中的alter table命令的基本使用方法及提速优化
投稿:goldensun
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了MySQL中的alter table命令的基本使用方法及提速优化的方法,包括ALTER COLUMN的使用等等,需要的朋友可以参考下
一、基本用法
alter table tbl_name add col_name type
例如,& 给pet的表增加一列 weight,
mysql&alter tabl
alter table tbl_name drop col_name
例如, 删除pet表中的weight这一列
mysql&alter t
分为改变列的属性和改变列的名字
改变列的属性——方法1:
alter table tbl_name modify col_name type
例如,改变weight的类型
mysql&alter table pet modify weight varchar(30);
改变列的属性——方法2:
alter table tbl_name change old_col_name col_name type
例如,改变weight的类型
alter table pet change weight weight varchar(30);
改变列的名字:
alter table tbl_name change old_col_name col_name
例如改变pet表中weight的名字:
mysql&alter table p
4. 改变表的名字
alter table tbl_name rename new_tbl
例如, 把pet表更名为animal
mysql&alter tab
二、对ALTER TABLE的优化
在系统的日常维护中,经常需要对表结构进行更新,例如添加/删除一个字段,改变一个VARCHAR的字段长度等等。MySQL针对这种修改表结构的处理方式是先创建一张新的结构的表,接着会通过执行Insert语句将旧表的内容插入到新表中,最后删除整张旧表。这种处理方式在数据量比较小的时候,不会有什么问题,可是当数据量很大的时候可能需要很多时间来处理该过程。
执行一个更新表结构的操作花费了几个小时的时间,这是无法忍受的。如果你用的是5.1之前的版本的话,还会在执行表结构更新是数据库往往是停止服务的,幸好在最新的版本中这个问题得到了改善
如果在进行表结构更新的时候你采用了恰当的方法,也并不是所有的更新操作会占用你很久的时间。
例如 你想更新用户表的默认密码为“666666”,通常采用的做法是
mysql& ALTER TABLE user
-& MODIFY COLUMN pwd VARCHAR NOT NULL DEFAULT ‘666666';
通过SHOW STATUS你可以发现在执行这个操作的过程中进行了大量的Insert操作,当用户的数量很大时 例如百万,千万条的数据时,必然会消耗很多的时间。
可是如果你采用下边的方式来更新的话,时间会大大的缩短
mysql& ALTER TABLE user
-& ALTER COLUMN pwd varchar not null SETDEFAULT 5;
执行SHOW STATUS操作发现大量的插入操作不存在了,且时间也大大的缩短了(需要先进行FLUSH STATUS)
&之所以可能缩短时间是因为
(1)表字段的默认值是放在表的frm(.frm:表结构文件& .MYD:表数据文件& .MYI:表索引)文件中
(2)ALTER COLUMN会更新frm文件,而不会涉及到表的内容
(3)MODIFY COLUMN会涉及到表数据的内容
&从前面的列子可以看出如果操作的过程中只涉及到frm文件的改动的话,表结构的更新效率会大大的提高,但是很多时候在没有必要的时候mysql也会进行表的重建。如果你愿意承担风险,可以用修改frm文件的方式以达到提速修改表结的目的
并不是所有的表结构改动都可以通过修改frm文件的方式来提高修改的效率,下面的一些改动可以通过修改frm文件的方式达到更新的目的:
(1)&&&&& 更改字段的默认值
(2)&&&&& 增加/删除字段的AUTO_INCREMENT属性
(3)&&&&& 增加/删除/修改 ENUM的常量值。对于删除操作,如果有字段引用了这个常量值,则在删除后查询的结构为空字符串
下面以更新字段的默认值属性为例,分别通过使用ALTER COLUMN和修改frm文件的方式来提高修改表结构的效率
1 执行ALTER COLUMN
1.1&& 首先准备一张字典表
CREATETABLE IF NOT EXISTS dictionary (
id int(10) unsigned NOT NULLAUTO_INCREMENT,
word varchar(100) NOT NULL,
mean varchar(300) NOT NULL,
PRIMARY KEY (`id`)
1.2&&& 插入一些测试数据
mysql&DELIMITER $$
mysql&DROP PROCEDURE IF EXISTS SampleProc$$
Query OK, 0rows affected, 1 warning (0.01 sec)CREATEPROCEDURE SampleProc()BEGINDECLARE xINT;SET x = 1;WHILEx& &= 110000 DOinsert intodictionary (word, mean) values(concat('a',x),concat('a means',x));SET& x = x + 1;END WHILE;ENDmysql&&&& DELIMITER ;mysql&call SampleProc();
1.3&&& SHOW STATUS 观察结果Modify Column 以及Alter Column的区别
首先使用MODIFY COLUMN
Query OK, 0 rows affected (0.00 sec)
mysql& alter table dictionary
-&modify column mean varchar(20) NOT null default 'DEFAULT1';
Query OK, 110002 rows affected (3.07 sec)
Records: 110002 Duplicates: 0 Warnings: 0
mysql& SHOW STATUS WHERE Variable_name LIKE'Handler%'
-&OR Variable_name LIKE 'Created%';
+----------------------------+--------+
| Variable_name
+----------------------------+--------+
| Handler_read_rnd_next
| 110003 |
| Handler_rollback
| Handler_savepoint
| Handler_savepoint_rollback | 0
| Handler_update
| Handler_write
| 110002 |
+----------------------------+--------+
在使用ALTER COLUMN
mysql& alter table dictionary
-& alter column mean set default'DEFAULT2';
Query OK, 0 rowsaffected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql& SHOW STATUSWHERE Variable_name LIKE 'Handler%'
-& OR Variable_name LIKE 'Created%';
+----------------------------+-------+
| Variable_name
+----------------------------+-------+
|Handler_read_rnd_next
|Handler_savepoint_rollback | 0
| Handler_update
| Handler_write
2&&& 修改frm文件
通过修改frm文件的方式来提高修改表结构效率的步骤大概如下
1.&&&&&& 备份相关的数据库文件
2.&&&&&& 创建一张和旧表完全相同的表结构
mysql&create table dictionary_
3.&&&&&& 执行FLUSH TABLES WITH READ LOCK. 所有的表都被关闭
mysql& alter table dictionary_new
-& modify column mean varchar(30)default 'DEFAULR#';
mysql& flush
5.&&&&&& 把dictionary_new.frm文件重名为dictionary.frm
6.&&&&&& 执行UNLOCK TABLES
mysql& insert into dictionary(word) values('Random');
mysql& select * from dictionarywhere word='Random';
从下面的结果可以看出,默认值已经被改掉,且不涉及到内容的改变
+--------+--------+----------+
| word | mean
+--------+--------+----------+
| 110004 |Random | DEFAULR# |
+--------+--------+----------+
7.&&&&&&& Drop dictionary_new
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Oracle中使用alter table来增加,删除,修改列的语法_数据库技术_Linux公社-Linux系统门户网站
你好,游客
Oracle中使用alter table来增加,删除,修改列的语法
来源:Linux社区&
作者:Linux
alter table tablename add (column datatype [default value][null/not null],….);
alter table tablename modify (column datatype [default value][null/not null],….);
alter table tablename drop (column);
这里分别是使用alter table 来增加、删除和修改一个列。
下面是具体的例子:create table test1(id varchar2(20) not null);
alter table test1add (name varchar2(30) default ‘无名氏’ not null);
alter table test1modify (name varchar2(16) default ‘unknown’);
alter table test1
以上分别建立一个表,增加,更改,删除一个列。其中需要注意的是如果某一列中已经存在值,如果你要修改的为比这些值还要窄的列宽这样将会出现一个错误。
例如前面如果我们插入一个值insert into test1values (’1′,’我们很爱你’);
然后曾修改列: alter table test1modify (name varchar2(8));将会得到以下错误:ERROR 位于第 2 行:ORA-01441: 无法减小列长度, 因为一些值过大
PS:改变已存在的表的列名
alter table table_name rename column col_old to col_new
相关资讯 & & &
& (07/22/:41)
& (02/03/:05)
& (07/26/:48)
& (07/12/:30)
& (07/31/:18)
& (07/20/:05)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款1013人阅读
android开发(29)
在android开发过程中,不可避免的遇到sqlite数据库升级,表单的字段变化。
数据库升级最头疼的两种情况是:原表单新增字段和表单数据迁移。
sqlite提供了Alter table命令,允许用户重命名表单或者在已有表单中新增字段。
表单末尾添加新字段
ALTER TABLE sourceTable ADD COLUMN NEW_DATE VARCHAR(60) NOT NULL
复制原有表数据到新表单
需要以下步骤
(1)将表单名修改为临时表
ALTER TABLE sourceTable RENAME TO temp_table
(2)创建新表单
CRAATE TABLE targetTable (_id integer primary key autoincrement, name text, grade text);
(3)导入数据
INSERT INTO targetTable SELECT name FROM temp_table
(4)删除临时表
DELETE TABLE temp_table
以上两者处理方式可以保证数据库升级数据不会丢失。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:28873次
排名:千里之外
原创:22篇
(1)(2)(1)(1)(2)(1)(3)(1)(1)(7)(1)(3)(1)(5)(1)(2)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'添加字段的语法:alter table tablename add (column datatype [default value][null/not null],….);
修改字段的语法:alter table tablename modify (column datatype [default value][null/not null],….);
删除字段的语法:alter table tablename drop (column);
添加、修改、删除多列的话,用逗号隔开。
使用alter table 来增加、删除和修改一个列的例子。
创建表结构:
create table test1
(id varchar2(20) not null);
增加一个字段:
alter table test1
add (name varchar2(30) default ‘无名氏’ not null);
使用一个SQL语句同时添加三个字段:
alter table test1
add (name varchar2(30) default ‘无名氏’ not null,
age integer default 22 not null,
has_money number(9,2)
修改一个字段
alter table test1
modify (name varchar2(16) default ‘unknown’);
另:比较正规的写法是:
-- Add/modify columns&
alter table TABLE_NAME rename column FIELD_NAME to NEW_FIELD_NAME;
删除一个字段
alter table test1
需要注意的是如果某一列中已经存在值,如果你要修改的为比这些值还要小的列宽这样将会出现一个错误。
例如前面如果我们插入一个值
insert into test1
values (’1′,’我们很爱你’);
然后曾修改列: alter table test1
modify (name varchar2(8));
将会得到以下错误:
ERROR 位于第 2 行:
ORA-01441: 无法减小列长度, 因为一些值过大
---------------------------------------------------------------------------------------------------------------
高级用法:
ALTER TABLE&table_name&RENAME TO&new_table_
修改列的名称
ALTER TABLE table_name RENAME COLUMN supplier_
alter table s_dept rename column age to age1;
附:创建带主键的表&&
create table student (
studentid int primary key not null,
studentname varchar(8),
1、创建表的同时创建主键约束
(1)无命名
create table student (
studentid int primary key not null,
studentname varchar(8),
(2)有命名
create table students (
studentid int ,
studentname varchar(8),
constraint yy primary key(studentid));
2、删除表中已有的主键约束
(1)无命名
可用 SELECT * from user_cons_
查找表中主键名称得student表中的主键名为SYS_C002715
alter table student drop constraint SYS_C002715;
(2)有命名
alter table student
3、向表中添加主键约束
alter table student add constraint pk_student primary key(studentid);
本文已收录于以下专栏:
相关文章推荐
ALTER TABLE 语句用于在已有的表中添加、修改或删除列
ADD [COLUMN] column name (column definitions) [FIRST or AFTER colum...
如果sql语句中有''(单引号或者双引号)括的字符串,则需要同表中严格一致,不然会显示“找不到行”这个错误。
alter语句的用法
alter语句的用法
需要修改结构的,就用到alter语句,方...
一、问题现场有一张大数据量的分区表,数据量在10G以上。因某种原因需要删除其中的某些字段。如果直接用alter table1 drop (column1,column2); 或者alter table...
逻辑上删除 为unused,
alter table emp set unused (salary);
设置为unused 的列是不可以恢复的。不存在类似rollback 的方式
物理上删除 drop...
create table student (
                  id int primary key...
——积累工作中用到的SQL1、增加和删除一列写法:      --增加一列      alter table  表名 add  列名 类型;      --删除一列   ...
Nginx安装完毕后,会产生相应的安装目录,根据前面的安装路径,Nginx的配置文件路径为/opt/nginx/conf,其中nginx.conf为Nginx的主配置文件。这里重点介绍下nginx.c...
--1、查看表在那个表空间
  select tablespace_name,table_name from user_talbes where table_name='employ';
修改表名:
ALTER  TABLE admin_user RENAME TO a_use
//增加主键
alter table tabelname add new_field_id int(5...
在表格被建立在资料库中后,我们常常会发现,这个表格的结构需要有所改变。常见的改变如下:
加一个栏位删去一个栏位改变栏位名称改变栏位的资料种类
以上列出的改变并不是所有可能的改变。ALTER T...
他的最新文章
讲师:王哲涵
讲师:王渊命
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 alter table添加字段 的文章

 

随机推荐