mysql修改表结构

时间:2022-07-04 14:56:59

以下内容转自:http://www.jb51.net/article/58079.htm

表的结构如下:

 

复制代码代码如下:

mysql> show create table person;
| person | CREATE TABLE `person` (
  `number` int(11) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `birthday` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |

 

删除列:

 

复制代码代码如下:

ALTER TABLE person DROP COLUMN birthday; 

 

添加列:

 

复制代码代码如下:

ALTER TABLE person ADD COLUMN birthday datetime;

 

修改列,把number修改为bigint:

 

复制代码代码如下:

ALTER TABLE person MODIFY number BIGINT NOT NULL;

 

或者是把number修改为id,类型为bigint:

 

复制代码代码如下:

ALTER TABLE person CHANGE number id BIGINT;

 

添加主键:

 

复制代码代码如下:

ALTER TABLE person ADD PRIMARY KEY (id);

 

删除主键:

 

复制代码代码如下:

ALTER TABLE person DROP PRIMARY KEY;

 

添加唯一索引:

 

复制代码代码如下:

ALTER TABLE person ADD UNIQUE name_unique_index (`name`);

 

为name这一列创建了唯一索引,索引的名字是name_unique_index.

添加普通索引:

 

复制代码代码如下:

ALTER TABLE person ADD INDEX birthday_index (`birthday`);

 

删除索引:

 

复制代码代码如下:

ALTER TABLE person DROP INDEX birthday_index;
ALTER TABLE person DROP INDEX name_unique_index;

 

禁用非唯一索引

 

复制代码代码如下:

ALTER TABLE person DISABLE KEYS;


ALTER TABLE...DISABLE KEYS让MySQL停止更新MyISAM表中的非唯一索引。

 

激活非唯一索引

 

复制代码代码如下:

ALTER TABLE person ENABLE KEYS;


ALTER TABLE ... ENABLE KEYS重新创建丢失的索引。

 

把表默认的字符集和所有字符列(CHAR, VARCHAR, TEXT)改为新的字符集:

 

复制代码代码如下:

ALTER TABLE person CONVERT TO CHARACTER SET utf8;

 

修改表某一列的编码

 

复制代码代码如下:

ALTER TABLE person CHANGE name name varchar(255) CHARACTER SET utf8;

 

仅仅改变一个表的默认字符集

 

复制代码代码如下:

ALTER TABLE person DEFAULT CHARACTER SET utf8;

 

修改表名

 

复制代码代码如下:

RENAME TABLE person TO person_other;

 

移动表到其他数据库

 

复制代码代码如下:

RENAME TABLE current_db.tbl_name TO other_db.tbl_name;

 

 

以下内容转自:http://www.cnblogs.com/FranklinD/p/4320155.html

MySql数据库在表中添加新字段,设置主键,设置外键,字段移动位置,以及修改数据库后如何进行部署和维护的总结

 

1,为当前已有的表添加新的字段

alter table student add studentName varchar(20) not null;

2,为当前已有的表中的字段设置为主键自增

alter table student add constraint PK_studentId primaryKey(studentId);

3,为当前已有的表中的字段设置为外键

alter table student add constraint FK_teacherId_studentInfo foreign key (teacherId) references teacherInfo(teacherId)

alter table 表名 add constraint 键名 foreign key (外键字段名) references 主表名(主表主键名)

4,字段移动位置

alter table student modify studentId varchar(20) first

将student表中的studentId字段的位置移动到第一位

 

5,关于修改数据库结构后,如何部署,以及操作过程的总结

 

在项目开发过程中补课避免的需要修改数据库的表结构,经过这几天的操作总结的操作流程是

1,将远程服务器上的数据库复制到本地

2,在本地将数据库的结构进行修改,并研发新的项目功能

3,功能研发完毕,对比之前的数据库看修改了哪些结构,然后统一将这些操作利用脚本的方式写出来

4,将本地的数据库恢复成未修改之前的,然后运行脚本,为当前本地的数据库修改结构

5,然后查看新增的功能是否能够正常运行

6,如果出错则重复3,4步,直至利用脚本能够直接完美的修改数据库结构,并再次测试新的功能是否能够正常运行

7,如果功能能够正常运行则进行下一步部署服务器

8,首先将远程服务器中的数据库进行备份

9,部署新增的功能

10,利用脚本修改服务器中的数据库

11,修改完毕后查看新功能是否能够正常运行,如果能够正常运行并且日志文件中没有出错,则表明部署成功!

12,如果有出错的话,则先恢复数据库并且重复8,9,10,11步

 

以下内容转自:http://www.cnblogs.com/mfryf/p/3457481.html

在我们使用mysql的时候,有时会遇到须要更改或者删除mysql的主键,我们能够简单的使用alter table table_name drop primary key;来完成。以下我使用数据表table_test来作了样例。
1、首先创建一个数据表table_test:
create table table_test(
`id` varchar(100) NOT NULL,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`name`)
)ENGINE=MyISAM DEFAULT CHARSET=gb2312;
2、如果发现主键设置错了,应该是id是主键,但如今表里已经有好多数据了,不能删除表再重建了,仅仅能在这基础上改动表结构。
先删除主键
alter table table_test drop primary key;
然后再增加主键
alter table table_test add primary key(id);
注:在增加主键之前,必须先把反复的id删除掉。

 

以下内容转自:http://www.cnblogs.com/suiy-160428/p/5649911.html

MySQL修改主键属性:

前言:在学习MySQL的过程中,对于主键的属性以及操作理解较模糊,在输入多条修改主键属性的语句后经常报错,所以想整理一下这个过程中遇到的问题,作为自己的学习记录,可能都是基础知识,但也希望提高自己对数据库的理解,同时也能帮助到其他人。


  主键约束在数据表中可以定义一个主键值,唯一确定表中的每一条记录。每张表中只能有一个primary key,并且primary key不能为空。如果主键约束定义在不止一列,则一列的值可以重复,但是主键约束定义中的所有列组合必须唯一。

1. 添加主键约束:

alter table tbl_name add primary key (index_col_name,…);
#括号中为字段名,可以为一个或者多个

2. 在数据表已存在的情况下,且无主键,添加新的字段作为主键,并将该字段移到表格的第一列

alter table tbl_name add col_name col_definition (data type, null, default...) primary key first current_first_col_name;
# current_first_col_name表示当前数据表的第一列  

Notes:关键字first表示位于某一列的前面,如果加入的字段需要位于某一列的后面,可以使用after

 3. 数据表已存在,且有主键,修改主键的定义

关键字modify

alter table tbl_name modify col_name col_definition [first|after col_name]
#在col_definition 声明要修改的属性,如要添加自动编号auto_increment 

Notes:

1)  此时不需要重新声明主键属性primary key,如果添加了则会报错:主键重复;

2)  如果原有属性中存在auto_increment,修改时需要加上auto_increment,否则auto_increment属性被删除

关键字change

alter table tbl_name change col_name col_name col_definition [first|after col_name]
#与modify的区别在于列表需要写两次列名,相当于原列名和新列名,所以change也可以用来修改列名