[ 转 ] mysql修改表结构alter
mysql修改表结构alter
ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...] alter_specification: ALTER TABLE允许你修改一个现有表的结构。例如,你可以增加或删除列、创造或消去索引、改变现有列的类型、或重新命名列或表本身。你也能改变表的注释和表的类型。见7.7 CREATE TABLE句法。 如 果你使用ALTER TABLE修改一个列说明但是DESCRIBE tbl_name显示你的列并没有被修改,这可能是MySQL因为在7.7.1 隐含的列说明改变中描述的原因之一而忽略了你的修改。例如,如果你试图将一个VARCHAR改为CHAR,MySQL将仍然使用VARCHAR,如果表包 含其他变长的列。 ALTER TABLE通过制作原来表的一个临时副本来工作。修改在副本上施行,然后原来的表被删除并且重新命名一个新的。这样做使得所有的修改自动地转向到新表,没 有任何失败的修改。当ALTER TABLE正在执行时,原来的桌可被其他客户读取。更新和写入表被延迟到新表准备好了为止。 为了使用ALTER TABLE,你需要在表上的select、insert、delete、update、create和drop的权限。 如果你想要改变列的类型而非名字,就算他们是一样的,CHANGE语法仍然需要2个列名。例如: mysql> ALTER TABLE t1 CHANGE b b BIGINT NOT NULL; 然而,在MySQL3.22.16a,你也可以使用MODIFY来改变列的类型而不是重命名它: mysql> ALTER TABLE t1 MODIFY b BIGINT NOT NULL; 如果你使用CHANGE或MODIFY缩短一个列,一个索引存在于该列的部分(例如,如果你有一个VARCHAR列的头10个字符的索引),你不能使列短于被索引的字符数目。 mysql> CREATE TABLE t1 (a INTEGER,b CHAR(10)); 重命名表,从t1到t2: mysql> ALTER TABLE t1 RENAME t2; 为了改变列a,从INTEGER改为TINYINT NOT NULL(名字一样),并且改变列b,从CHAR(10)改为CHAR(20),同时重命名它,从b改为c: mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20); 在列d上增加一个索引,并且使列a为主键: mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a); 删出列c: mysql> ALTER TABLE t2 DROP COLUMN c; 增加一个新的AUTO_INCREMENT整数列,命名为c: mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, 注意,我们索引了c,因为AUTO_INCREMENT柱必须被索引,并且另外我们声明c为NOT NULL,因为索引了的列不能是NULL。 当你增加一个AUTO_INCREMENT列时,自动地用顺序数字填入列值。
修改表某字段长度
ALTER
TABLE
writerfloor MODIFY images
varchar
(
240
);
添加 area 表的字段 latitude 类型是 char(20)不为空
ALTER
TABLE
area
ADD
latitude
char
(
20
)
NOT
NULL
;
ALTER
TABLE
kejiyuan CHANGE klongitude longitude
char
(
20
);
|