0

数据表的基本操作——修改数据表3(十七)

4.3.6  修改字段的排列位置

对于一个数据表来说,在创建的时候,字段在表中的排列顺序就已经确定了。但表的结构并不是完全不可以改变的,可以通过ALTER TABLE来改变表中字段的相对位置。语法格式如下:

ALTER TABLE <表名> MODIFY <字段1> <数据类型> FIRST|AFTER <字段2>;

“字段1”指要修改位置的字段,“数据类型”指“字段1”的数据类型,“FIRST”为可选参数,指将“字段名1”修改为表的第一个字段,“AFTER 字段2”指将“字段1”插入到“字段2”后面。

1. 修改字段为表的第一个字段

【例4.22】将数据表tb_dept中的column1字段修改为表的第一个字段,SQL语句如下:

ALTER TABLE tb_dept1 MODIFY column1 VARCHAR(12) FIRST;

使用DESC查看表tb_dept1,发现字段column1已经被移至表的第一列,结果如下:

mysql> DESC tb_dept1;

+-------------+-----------------+----------+--------+-------------+--------+

| Field     | Type       | Null    | Key  | Default   | Extra  |

+-------------+-----------------+----------+--------+-------------+--------+

| column1  | varchar(12)   | NO    |      | NULL    |      |

| id        | int(11)      | NO    | PRI   | NULL   |      |

| name         | varchar(30)  | YES    |      | NULL   |      |

| column3  | int(11)      | YES    |      | NULL    |      |

| location   | varchar(60)  | YES    |      | NULL   |      |

| managerId | int(10)      | YES    |      | NULL    |      |

+--------------+----------------+-----------+--------+-------------+--------+

6 rows in set (0.03 sec)

2 修改字段到表的指定列之后

【例4.23】将数据表tb_dept1中的column1字段插入到location字段后面,SQL语句如下:

ALTER TABLE tb_dept1 MODIFY column1 VARCHAR(12) AFTER location;

使用DESC查看表tb_dept1,结果如下:

mysql> DESC tb_dept1;

+-------------+-----------------+----------+--------+-------------+--------+

| Field     | Type       | Null    | Key  | Default   | Extra  |

+-------------+-----------------+----------+--------+-------------+--------+

| id        | int(11)      | NO    | PRI   | NULL   |      |

| name         | varchar(30)  | YES    |      | NULL   |      |

| column3  | int(11)      | YES   |      | NULL    |      |

| location   | varchar(60)  | YES    |      | NULL   |      |

| column1  | varchar(12)   | NO    |      | NULL    |      |

| managerId | int(10)      | YES    |      | NULL    |      |

+--------------+----------------+-----------+--------+-------------+--------+

6 rows in set (0.03 sec)

可以看到,tb_dept1表中的字段column1已经被移至location字段之后。

4.3.7  更改表的存储引擎

存储引擎是MySQL中的数据存储在文件或者内存中时采用的不同技术实现。可以根据自己的需要,选择不同的引擎,甚至可以为每一张表选择不同的存储引擎。MySQL中主要存储引擎有:MyISAMInnoDBMEMORYHEAP)、BDBFEDERATED等。可以使用SHOW ENGINES;语句查看系统所支持的存储引擎。【表4.3】列出了5.5.13版本的MySQL所支持的存储引擎。

4.3 MySQL支持的存储引擎

引擎名

是否支持

FEDERATED

MRG_MYISAM

MyISAM

BLACKHOLE

CSV

MEMORY

ARCHIVE

InnoDB

默认

PERFORMANCE_SCHEMA

更改表的存储引擎的语法格式如下:

ALTER TABLE <表名> ENGINE=<更改后的存储引擎名>;

【例4.24】将数据表tb_department3的存储引擎修改为MyISAM

在修改存储引擎之前,先使用SHOW CREATE TABLE查看表tb_department3当前的存储引擎,结果如下。

mysql>  SHOW CREATE TABLE tb_department3 \G;

*************************** 1. row ***************************

       Table: tb_department3

Create Table: CREATE TABLE `tb_department3` (

  `id` int(11) NOT NULL,

  `name` varchar(22) DEFAULT NULL,

  `location` varchar(50) DEFAULT NULL,

  PRIMARY KEY (`id`),

  UNIQUE KEY `STH` (`name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.00 sec)

可以看到,表tb_department3当前的存储引擎为ENGINE=InnoDB,接下来修改存储引擎类型,输入如下SQL语句并执行:

mysql> ALTER TABLE tb_department3 ENGINE=MyISAM;

使用SHOW CREATE TABLE再次查看表tb_department3的存储引擎,发现表tb_department3的存储引擎变成了“MyISAM”,结果如下:

mysql> SHOW CREATE TABLE tb_department3 \G;

*************************** 1. row ***************************

      Table: tb_department3

Create Table: CREATE TABLE `tb_department3` (

  `id` int(11) NOT NULL,

  `name` varchar(22) DEFAULT NULL,

  `location` varchar(50) DEFAULT NULL,

  PRIMARY KEY (`id`),

  UNIQUE KEY `STH` (`name`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8

1 row in set (0.00 sec)

4.3.8  删除表的外键约束

对于数据库中定义的外键,如果不再需要,可以将其删除。外键一旦删除,就会解除主表和从表间的关联关系,MySQL中删除外键的语法格式如下:

ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>

“外键约束名”指在定义表时CONSTRAINT关键字后面的参数,详细内容请参考4.1.2节的【使用外键约束】。

【例4.25】删除数据表tb_emp9中的外键约束。

首先创建表tb_emp9,创建外键deptId关联tb_dept1表的主键idSQL语句如下:

CREATE TABLE tb_emp9

(

id      INT(11) PRIMARY KEY,

name   VARCHAR(25),

deptId  INT(11),

salary   FLOAT,

CONSTRAINT fk_emp_dept  FOREIGN KEY (deptId) REFERENCES tb_dept1(id)

);

使用SHOW CREATE TABLE查看表tb_emp9结构,结果如下:

mysql> SHOW CREATE TABLE tb_emp9 \G;

*************************** 1. row ***************************

       Table: tb_emp9

Create Table: CREATE TABLE `tb_emp9` (

  `id` int(11) NOT NULL,

  `name` varchar(25) DEFAULT NULL,

  `deptId` int(11) DEFAULT NULL,

  `salary` float DEFAULT NULL,

  PRIMARY KEY (`id`),

  KEY `fk_emp_dept` (`deptId`),

  CONSTRAINT `fk_emp_dept` FOREIGN KEY (`deptId`) REFERENCES `tb_dept1` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.00 sec)

可以看到,已经成功添加了表的外键,下面删除外键约束,SQL语句如下:

ALTER TABLE tb_emp9 DROP FOREIGN KEY fk_emp_dept;

执行完毕之后,将删除表tb_emp9的外键约束,使用SHOW CREATE TABLE次查看表tb_emp9结构,结果如下:

mysql> SHOW CREATE TABLE tb_emp9 \G;

*************************** 1. row ***************************

       Table: tb_emp9

Create Table: CREATE TABLE `tb_emp9` (

  `id` int(11) NOT NULL,

  `name` varchar(25) DEFAULT NULL,

  `deptId` int(11) DEFAULT NULL,

  `salary` float DEFAULT NULL,

  PRIMARY KEY (`id`),

  KEY `fk_emp_dept` (`deptId`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.00 sec)

可以看到,tb_emp9中已经不存在FOREIGN KEY,原有的名称为fk_emp_dept的外键约束删除成功。