mysql-修改表结构

表的结构如下:

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,关于修改数据库结构后,如何部署,以及操作过程的总结

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

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

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

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

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

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

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

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

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

  • 部署新增的功能

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

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

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


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

mysql 如何修改、添加、删除表主键

在我们使用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,…);
    #括号中为字段名,可以为一个或者多个
  1. 在数据表已存在的情况下,且无主键,添加新的字段作为主键,并将该字段移到表格的第一列
    alter table tbl_name add col_name col_definition (data type, null, default...) primary key first current_first_col_name;
  1. current_first_col_name表示当前数据表的第一列

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

数据表已存在,且有主键,修改主键的定义关键字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也可以用来修改列名

你可能感兴趣的:(mysql-修改表结构)