mysql 增加字段 / 修改字段 / 增加删除索引 / 修改字段名

时间:2022-04-17 14:55:01

经常创建了数据库数据表之后,需要上线修改数据表字段,总结了一下修改表的语句:


1.创建使用数据库;

2. 创建数据表;

CREATE DATABASE IF NOT EXISTS database_name
  DEFAULT CHARACTER SET = utf8
  DEFAULT COLLATE = utf8_general_ci;

USE database_name;

-- ----------------------------
--  TABLE structure for `table_name`
-- ----------------------------
CREATE TABLE IF NOT EXISTS `table_name` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'auto increase',
  `test` int(10) NOT NULL DEFAULT '' COMMENT 'test',
  `string` varchar(20) NOT NULL DEFAULT '' COMMENT 'string',
  `date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'yyyy-MM-dd HH:mm:ss',
  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'last_update time',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'data create time',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_test` (`test`),
  KEY `indx_test_string` (`test`,`string`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='table just for test';

该示例创建了数据表table_name,有从1开始自增的主键id,数字类型test,字符串类型string,时间类型date,和last_update记录上次更新时间,create_time记录创建时间;

唯一索引test名称为uniq_test,普通关联索引关联test和string。

索引的作用就是加快查找速度。

唯一索引就是指定插入数据库的test值是唯一的,如果插入同一个test数据会报错;

普通关联索引indx_test_string,关联test和string,就是以后查找像mysql 查找语句: select * where test=xxx and string=xxx;的时候能够快速找到;


下面来介绍mysql语句:(以下所有样例可以参考以上数据库示例)

索引内容


1.普通索引。

这是最基本的索引,它没有任何限制。它有以下几种创建方式:

(1)创建索引:CREATE INDEX indexName ON tableName(tableColumns(length));如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB 和 TEXT 类型,必须指定length,下同。

(2)修改表结构:ALTER tableName ADD INDEX [indexName] ON (tableColumns(length)) 

(3)创建表的时候直接指定:CREATE TABLE tableName ( [...], INDEX [indexName] (tableColumns(length)) ;


2.唯一索引

它与前面的"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:

(1)创建索引:CREATE UNIQUE INDEX indexName ON tableName(tableColumns(length))

(2)修改表结构:ALTER tableName ADD UNIQUE [indexName] ON (tableColumns(length))

(3)创建表的时候直接指定:CREATE TABLE tableName ( [...], UNIQUE [indexName] (tableColumns(length));


3.主键索引

它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:CREATE TABLE testIndex(i_testID INT NOT NULL AUTO_INCREMENT,vc_Name VARCHAR(16) NOT NULL,PRIMARY KEY(i_testID)); 当然也可以用ALTER命令。


示例:

增加索引

(索引部分参考:mysql 创建 主键索引 唯一索引 全文索引 多列索引 添加索引

查看索引 :  show index from 数据库表名

增加普通索引: ALTER  TABLE 数据库ADD INDEX 索引名称(数据库字段名称)

INDEX(普通索引)  (注意下面table_name的引号``,这个也是可以去掉的,不影响mysql语句的执行。带上只是为了好看区分

ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

ALTER TABLE `table_name` ADD INDEX idx_test (`test`);

 PRIMARY KEY(主键索引)

增加主键索引: ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )


UNIQUE(唯一索引)

增加唯一索引: ALTER TABLE `table_name` ADD UNIQUE  unique_name(`column`)

ALTER TABLE `table_name` ADD UNIQUE uniq_test (`test`);


FULLTEXT(全文索引)

ALTER TABLE `table_name` ADD FULLTEXT ( `column` )


多列索引

ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

ALTER TABLE `table_name` ADD INDEX idx_test_string (`test`,`string`);


删除索引

ALTER TABLE table_name DROP INDEX index_name;

ALTER TABLE `table_name` DROP INDEX `uniq_test`;


增加字段

ALTER TABLE table_name ADD COLUMN `column` varchar(10) DEFAULT NULL COMMENT 'explain';

ALTER TABLE table_name ADD COLUMN `string` varchar(10) NOT NULL DEFAULT '';


修改字段

ALTER TABLE table_name MODIFY COLUMN column varchar(16) NOT NULL DEFAULT '' COMMENT 'xxx';

ALTER TABLE `table` MODIFY COLUMN `string` varchar(16) NOT NULL DEFAULT '' COMMENT 'just a string';


修改字段名称

ALTER TABLE table_name CHANGE `old_column_name` `new_column_name` varchar(20) NOT NULL DEFAULT '';
ALTER TABLE table_name CHANGE `totoal` `total` varchar(20) NOT NULL DEFAULT '';