mysql中对已存在的表做增/删/改列的相关操作_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2326 | 回复: 0   主题: mysql中对已存在的表做增/删/改列的相关操作        下一篇 
kim
注册用户
等级:中校
经验:1729
发帖:222
精华:0
注册:2011-7-21
状态:离线
发送短消息息给kim 加好友    发送短消息息给kim 发消息
发表于: IP:您无权察看 2014-12-10 14:59:48 | [全部帖] [楼主帖] 楼主

1.创建列 

alter table tablename add colname type not null default '0';


    例: 

alter table mmanapp_mmanmedia add appid_id integer not null default 372;


2.删除列 

alter table tablename drop column colname;


    例: 

alter table mmanapp_mmanmedia drop column appid_id;


3.在已经存在的列上创建外键关联 

ALTER TABLE yourtablename ADD [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col_name, ...) [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}] [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]


    例: 

ALTER TABLE mmanapp_mmanmedia ADD CONSTRAINT fk_mdappid FOREIGN KEY(appid_id)


4.删除外键关联: 

ALTER TABLE yourtablename DROP FOREIGN KEY fk_symbol;


    例: 

ALTER TABLE mmanapp_mmanmedia DROP FOREIGN KEY fk_mdappid


附文档两份: 

一.mysql对列和表的相关操作

增加主键 

alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);


增加一个新列 

alter table infos add ex tinyint not null default '0';


删除列 

alter table t2 drop column c;


重命名列/改变列类型 

alter table t1 change a b integer;
alter table t1 change b b bigint not null;
alter table infos change list list tinyint not null default '0';


重命名表 

alter table t1 rename t2;


加索引 

mysql> alter table tablename change depno depno int(5) not null;


mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]); 

mysql> alter table tablename add index emp_name (name);


加主关键字的索引 

mysql> alter table tablename add primary key(id);


加唯一限制条件的索引 

mysql> alter table tablename add unique emp_name2(cardnumber);


删除某个索引 

mysql>alter table tablename drop index emp_name;


二.对表增/删约束关系

InnoDB允许你用ALTER TABLE往一个表中添加一个新的 外键约束: 

ALTER TABLE yourtablename
ADD [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]


记住先创建需要的索引。你也可以用ALTER TABLE往一个表添加一个自引用外键约束。 

InnoDB也支持使用ALTER TABLE来移除 外键: 

ALTER TABLE yourtablename DROP FOREIGN KEY fk_symbol;


当年创建一个外键之时,如果FOREIGN KEY子句包括一个CONSTRAINT名字,你可以引用那个名字来移除 外键。另外,当外键被创建之时,fk_symbol值被InnoDB内部保证。当你想要移除一个外键之时,要找出标记,请使用SHOW CREATE TABLE语句。例子如下: 

mysql> SHOW CREATE TABLE ibtest11c\G
*************************** 1. row ***************************
Table: ibtest11c
Create Table: CREATE TABLE `ibtest11c` (
`A` int(11) NOT NULL auto_increment,
`D` int(11) NOT NULL default '0',
`B` varchar(200) NOT NULL default '',
`C` varchar(175) default NULL,
PRIMARY KEY  (`A`,`D`,`B`),
KEY `B` (`B`,`C`),
KEY `C` (`C`),
CONSTRAINT `0_38775` FOREIGN KEY (`A`, `D`)
REFERENCES `ibtest11a` (`A`, `D`)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `0_38776` FOREIGN KEY (`B`, `C`)
REFERENCES `ibtest11a` (`B`, `C`)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=INNODB CHARSET=latin1
1 row in set (0.01 sec)
mysql> ALTER TABLE ibtest11c DROP FOREIGN KEY 0_38775;


InnoDB解析程序允许你在FOREIGN KEY ... REFERENCES ...子句中用`(backticks)把表和列名名字围起来。InnoDB解析程序也考虑到lower_case_table_names系统变量的设置。 

InnoDB返回一个表的外键定义作为SHOW CREATE TABLE语句输出的一部分: 

SHOW CREATE TABLE tbl_name;


从这个版本起,mysqldump也将表的正确定义生成到转储文件中,且并不忘记 外键。 

你可以如下对一个表显示外键约束: 

SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';


外键约束被列在输出的Comment列。 

当执行外键检查之时,InnoDB对它照看着的子或父记录设置共享的行级锁。InnoDB立即检查外键约束,检查不对事务提交延迟。 

要使得对有外键关系的表重新载入转储文件变得更容易,mysqldump自动在转储输出中包括一个语句设置FOREIGN_KEY_CHECKS为0。这避免在转储被重新装载之时,与不得不被以特别顺序重新装载的表相关的问题。也可以手动设置这个变量: 

mysql> SET FOREIGN_KEY_CHECKS = 0;
mysql> SOURCE dump_file_name;
mysql> SET FOREIGN_KEY_CHECKS = 1;


如果转储文件包含对外键是不正确顺序的表,这就以任何顺序导入该表。这样也加快导入操作。设置FOREIGN_KEY_CHECKS为0,对于在LOAD DATA和ALTER TABLE操作中忽略外键限制也是非常有用的。 

InnoDB不允许你删除一个被FOREIGN KEY表约束 引用的表,除非你做设置SET FOREIGN_KEY_CHECKS=0。当你移除一个表的时候,在它的创建语句里定义的约束也被移除。 

如果你重新创建一个被移除的表,它必须有一个遵从于也引用它的外键约束的定义。它必须有正确的列名和类型,并且如前所述,它必须对被 引用的键有索引。如果这些不被满足,MySQL返回错误号1005 并在错误信息字符串中指向errno 150。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论