【例4.1】创建员工表tb_emp1。
首先创建数据库,SQL语句如下:

CREATE  DATABASE test_db; 

 选择创建表的数据库,SQL语句如下: 

 USE test_db; 

 创建tb_emp1表,SQL语句为: 

 CREATE TABLE tb_emp1 

 ( 

 id      INT(11), 

 name   VARCHAR(25), 

 deptId  INT(11), 

 salary  FLOAT 

 ); 

 语句执行后,便创建了一个名称为tb_emp1的数据表,使用SHOW TABLES;语句查看数据表是否创建成功,SQL语句如下: 

  SHOW TABLES; 

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

 | Tables_in_ test_db | 

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

 | tb_emp1         | 

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

 1 row in set (0.00 sec) 

 可以看到,test_db数据库中已经有了数据表tb_tmp1,数据表创建成功。 

 【例4.2】定义数据表tb_emp 2,其主键为id,SQL语句如下: 

 CREATE TABLE tb_emp2 

 ( 

 id        INT(11) PRIMARY KEY, 

 name      VARCHAR(25), 

 deptId     INT(11), 

 salary     FLOAT 

 ); 

 【例4.3】定义数据表tb_emp 3,其主键为id,SQL语句如下: 

 CREATE TABLE tb_emp3 

 ( 

 id INT(11), 

 name VARCHAR(25), 

 deptId INT(11), 

 salary FLOAT, 

 PRIMARY KEY(id) 

 ); 

 上述两个例子执行后的结果是一样的,都会在id字段上设置主键约束。 

 【例4.4】定义数据表tb_emp4,假设表中间没有主键id,为了唯一确定一个员工,可以把name、deptId联合起来做为主键,SQL语句如下: 

 CREATE TABLE tb_emp4 

  ( 

 name VARCHAR(25), 

 deptId INT(11), 

 salary FLOAT, 

 PRIMARY KEY(name,deptId) 

 ); 

 【例4.5】定义数据表tb_emp5,并在tb_emp5表上创建外键约束。 

 创建一个部门表tb_dept1,SQL语句如下: 

 CREATE TABLE tb_dept1 

 ( 

 id       INT(11) PRIMARY KEY, 

 name    VARCHAR(22)  NOT NULL, 

 location  VARCHAR(50) 

 ); 


 定义数据表tb_emp5,让它的键deptId作为外键关联到tb_dept1的主键id,SQL语句为: 

 CREATE TABLE tb_emp5 

 ( 

 id      INT(11) PRIMARY KEY, 

 name   VARCHAR(25), 

 deptId  INT(11), 

 salary   FLOAT, 

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

 ); 

 以上语句执行成功之后,在表tb_emp5上添加了名称为fk_emp_dept1的外键约束,外键名称为deptId,其依赖于表tb_dept1的主键id。 

 【例4.6】定义数据表tb_emp6,指定员工的名称不能为空,SQL语句如下: 

 CREATE TABLE tb_emp6 

 ( 

 id     INT(11) PRIMARY KEY, 

 name   VARCHAR(25) NOT NULL, 

 deptId  INT(11), 

 salary  FLOAT 

 ); 

 【例4.7】定义数据表tb_dept2,指定部门的名称唯一,SQL语句如下: 

 CREATE TABLE tb_dept2 

 ( 

 id      INT(11) PRIMARY KEY, 

 name    VARCHAR(22) UNIQUE, 

 location  VARCHAR(50) 

 ); 

 【例4.8】定义数据表tb_dept3,指定部门的名称唯一,SQL语句如下: 

 CREATE TABLE tb_dept3 

 ( 

 id      INT(11) PRIMARY KEY, 

 name    VARCHAR(22), 

 location  VARCHAR(50), 

 CONSTRAINT STH UNIQUE(name) 

 ); 

 【例4.9】定义数据表tb_emp7,指定员工的部门编号默认为1111,SQL语句如下: 

 CREATE TABLE tb_emp7 

 ( 

 id      INT(11) PRIMARY KEY, 

 name   VARCHAR(25) NOT NULL, 

 deptId  INT(11) DEFAULT 1111, 

 salary  FLOAT 

 ); 

 【例4.10】定义数据表tb_emp8,指定员工的编号自动递增,SQL语句如下: 

 CREATE TABLE tb_emp8 

 ( 

 id      INT(11) PRIMARY KEY AUTO_INCREMENT, 

 name   VARCHAR(25) NOT NULL, 

 deptId  INT(11), 

 salary  FLOAT 

 ); 


 例如,执行如下插入语句: 

 INSERT INTO tb_emp8 (name,salary) 

 VALUES('Lucy',1000), ('Lura',1200),('Kevin',1500); 

 语句执行完后,tb_emp8表中增加3条记录,在这里并没有输入id的值,但系统已经自动添加该值,使用SELECT命令查看记录,如下所示。 

 SELECT * FROM tb_emp8; 

 【例4.11】分别使用DESCRIBE和DESC查看表tb_dept1和表tb_emp1的表结构。 

 查看tb_dept1表结构,SQL语句如下: 

 DESCRIBE tb_dept1; 

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

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

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

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

 | name    | varchar(22) | NO  |    | NULL |      | 

 | location  | varchar(50) | YES |    | NULL |      | 

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

 查看tb_emp1表结构,SQL语句如下: 

  DESC tb_emp1; 

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

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

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

 | id     | int (11)    | YES |    | NULL  |     | 

 | name  | varchar(25) | YES |    | NULL  |     | 

 | deptId | int (11)     | YES |    | NULL  |     | 

 | salary  | float      | YES |    | NULL  |     | 

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

 【例4.12】使用SHOW CREATE TABLE查看表tb_emp1的详细信息,SQL语句如下: 

  SHOW CREATE TABLE tb_emp1; 

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

 -------------------------------------------------------------------------------------------------------------- 

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

 | Table  | Create Table 


                                                                         | 

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

 -------------------------------------------------------------------------------------------------------------- 

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

 | fruits | CREATE TABLE `fruits` ( 

   `f_id` char(10) NOT NULL, 

   `s_id` int(11) NOT NULL, 

   `f_name` char(255) NOT NULL, 

   `f_price` decimal(8,2) NOT NULL, 

   PRIMARY KEY (`f_id`), 

   KEY `index_name` (`f_name`), 

   KEY `index_id_price` (`f_id`,`f_price`) 

 ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 | 

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

 -------------------------------------------------------------------------------------------------------------- 

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

 使用参数’\G’之后的结果如下: 

  SHOW CREATE TABLE tb_emp1\G 

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

        Table: tb_emp1 

 Create Table: CREATE TABLE `tb_emp1` ( 

   `id` int(11) DEFAULT NULL, 

   `name` varchar(25) DEFAULT NULL, 

   `deptId` int(11) DEFAULT NULL, 

   `salary` float DEFAULT NULL 

 ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 


 【例4.13】将数据表tb_dept3改名为tb_deptment3。 

 使用ALTER TABLE将表tb_dept3改名为tb_deptment3,SQL语句如下: 

 ALTER TABLE tb_dept3 RENAME tb_deptment3; 


 【例4.14】将数据表tb_dept1中name字段的数据类型由VARCHAR(22)修改成VARCHAR(30)。 

 执行修改表名操作之前,使用DESC查看tb_dept表结构,结果如下: 

  DESC tb_dept1; 

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

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

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

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

 | name   | varchar(22)  | YES  |       | NULL   |     | 

 | location | varchar(50)  | YES  |      | NULL    |     | 

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

 3 rows in set (0.00 sec) 

 可以看到现在name字段的数据类型为VARCHAR(22),下面修改其类型。输入如下SQL语句并执行: 

 ALTER TABLE tb_dept1 MODIFY name VARCHAR(30); 

 【例4.15】将数据表tb_dept1中的location字段名称改为loc,数据类型保持不变,SQL语句如下: 

 ALTER TABLE tb_dept1 CHANGE location loc VARCHAR(50); 

 【例4.16】 将数据表tb_dept1中的loc字段名称改为location,同时将数据类型变为VARCHAR(60),SQL语句如下: 

 ALTER TABLE tb_dept1 CHANGE loc location VARCHAR(60); 


 【例4.17】在数据表tb_dept1中添加一个没有完整性约束的INT类型的字段managerId(部门经理编号),SQL语句如下: 

 ALTER TABLE tb_dept1 ADD managerId INT(10); 


 【例4.18】在数据表tb_dept1中添加一个不能为空的VARCHAR(12)类型的字段column1,SQL语句如下: 

 ALTER TABLE tb_dept1 ADD column1 VARCHAR(12) not null; 

 【例4.19】在数据表tb_dept1中添加一个INT类型的字段column2,SQL语句如下: 

 ALTER TABLE tb_dept 1 ADD column2 INT(11) FIRST; 

 【例4.20】在数据表tb_dept1中name列后添加一个INT类型的字段column3,SQL语句如下: 

 ALTER TABLE tb_dept1 ADD column3 INT(11) AFTER name; 


 【例4.21】删除数据表tb_dept1表中的column2字段。 

 删除column2字段,SQL语句如下: 

 ALTER TABLE tb_dept1 DROP column2; 

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

 ALTER TABLE tb_dept1 MODIFY column1 VARCHAR(12) FIRST; 

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

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


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

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

   SHOW CREATE TABLE tb_deptment3 \G 

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

        Table: tb_deptment3 

 Create Table: CREATE TABLE `tb_deptment3` ( 

   `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=gb2312 

 1 row in set (0.00 sec) 

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

  ALTER TABLE tb_deptment3 ENGINE=MyISAM; 

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

  SHOW CREATE TABLE tb_deptment3 \G 

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

       Table: tb_deptment3 

 Create Table: CREATE TABLE `tb_deptment3` ( 

   `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=gb2312 

 1 row in set (0.00 sec) 


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

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

 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的结构,结果如下: 

  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=gb2312 

 1 row in set (0.00 sec) 

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

 ALTER TABLE tb_emp9 DROP FOREIGN KEY fk_emp_dept; 

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

  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=gb2312 

 1 row in set (0.00 sec) 

 【例4.26】删除数据表tb_dept2,SQL语句如下: 

 DROP TABLE IF EXISTS tb_dept2; 



 在数据库中创建两个关联表,首先,创建表tb_dept2,SQL语句如下: 

 CREATE TABLE tb_dept2 

 ( 

 id       INT(11) PRIMARY KEY, 

 name    VARCHAR(22), 

 location  VARCHAR(50) 

 ); 

 接下来创建表tb_emp,SQL语句如下: 

 CREATE TABLE tb_emp 

 ( 

 id       INT(11) PRIMARY KEY, 

 name    VARCHAR(25), 

 deptId   INT(11), 

 salary   FLOAT, 

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

 ); 

 使用SHOW CREATE TABLE命令查看表tb_emp的外键约束,结果如下: 

  SHOW CREATE TABLE tb_emp\G 

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

        Table: tb_emp 

 Create Table: CREATE TABLE `tb_emp` ( 

   `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_dept2` (`id`) 

 ) ENGINE=InnoDB DEFAULT CHARSET=gb2312 

 1 row in set (0.00 sec) 

 可以看到,以上执行结果创建了两个关联表tb_dept2和表tb_emp,其中tb_emp表为子表,具有名称为fk_emp_dept的外键约束,tb_dept2为父表,其主键id被子表tb_emp所关联。 

 【例4.27】删除被数据表tb_emp关联的数据表tb_dept2。 

 首先直接删除父表tb_dept2,输入删除语句如下: 

  DROP TABLE tb_dept2; 

 ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails 

 可以看到,如前所述,在存在外键约束时,主表不能被直接删除。 

 接下来,解除关联子表tb_emp的外键约束,SQL语句如下: 

 ALTER TABLE tb_emp DROP FOREIGN KEY fk_emp_dept; 

 语句成功执行后,将取消表tb_emp和表tb_dept2之间的关联关系,此时,可以输入删除语句,将原来的父表tb_dept2删除,SQL语句如下: 

 DROP TABLE tb_dept2; 

 最后通过SHOW TABLES;查看数据表列表,如下所示: 

  show tables; 

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

 | Tables_in_test_db | 

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

 | tb_dept         | 

 | tb_deptment3    | 

 ……省略部分内容 
可以看到,数据表列表中已经不存在名称为tb_dept2的表。

综合案例
  登录MySQL数据库。
 打开windows命令行,输入登录用户名和密码:
 C:\>mysql –h localhost -u root -p
 Enter password: **
 或者打开MySQL5.6 Command Line Client,只用输入用户密码也可以登录。登录成功后显示如下信息:
 Welcome to the MySQL monitor.  Commands end with ; or \g.
 Your MySQL connection id is 2
 Server version: 5.6.10 MySQL Community Server (GPL)

 Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

 Oracle is a registered trademark of Oracle Corporation and/or its
 affiliates. Other names may be trademarks of their respective
 owners.

 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


 登录成功,可以输入SQL语句进行操作。
   创建数据库company。
 创建数据库company的语句如下:
  CREATE DATABASE company;
 Query OK, 1 row affected (0.00 sec)
 结果显示创建成功,在company数据库中创建表,必须先选择该数据库,输入语句如下:
  USE company;
 Database changed
 结果显示选择数据库成功。
   创建表offices。
 创建表offices的语句如下:
 CREATE TABLE offices 
 (
 officeCode  INT(10) NOT NULL UNIQUE,
 city        VARCHAR(50) NOT NULL,
 address     VARCHAR(50) NOT NULL,
 country     VARCHAR(50) NOT NULL,
 postalCode  VARCHAR(15) NOT NULL,
 PRIMARY KEY  (officeCode)
 );
 执行成功之后,使用SHOW TABLES;语句查看数据库中的表,语句如下:
  show tables;
 +-----------------------+
 | Tables_in_company |
 +-----------------------+
 | offices           |
 +-----------------------+
 1 row in set (0.00 sec)
 可以看到,数据库中已经有了数据表offices,创建成功。
   创建表employees。
 创建表employees的语句如下:
 CREATE TABLE employees 
 (
 employeeNumber  INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
 lastName         VARCHAR(50) NOT NULL,
 firstName        VARCHAR(50) NOT NULL,
 mobile           VARCHAR(25) NOT NULL,
 officeCode       INT(10) NOT NULL,
 jobTitle         VARCHAR(50) NOT NULL,
 birth            DATETIME,
 note            VARCHAR(255),
 sex             VARCHAR(5),
 CONSTRAINT office_fk FOREIGN KEY(officeCode)  REFERENCES offices(officeCode)
 );
 执行成功之后,使用SHOW TABLES;语句查看数据库中的表,语句如下:
  show tables;
 +------------------------+
 | Tables_in_company |
 +------------------------+
 | employees        |
 | offices           |
 +------------------------+
 2 rows in set (0.00 sec)
 可以看到,现在数据库中已经创建好了employees和offices两个数据表。要检查表的结构是否按照要求创建,可使用DESC分别查看两个表的结构,如果语句正确,则显示结果如下:
 DESC offices;
 +--------------+-------------+-------+------+---------+-------+
 | Field      | Type     | Null  | Key | Default | Extra |
 +--------------+-------------+-------+------+---------+-------+
 | officeCode  | int(10)   | NO  | PRI | NULL  |     |
 | city       | varchar(50) | NO  |    | NULL  |     |
 | address    | varchar(50) | NO  |    | NULL  |     |
 | country   | varchar(50) | NO  |    | NULL  |     |
 | postalCode | varchar(15) | NO  |    | NULL  |     |
 +------------+---------------+--------+-----+---------+-------+
 5 rows in set (0.02 sec)

 DESC employees;
 +----------------------+--------------+--------+-------+---------+--------------------+
 | Field           | Type      | Null  | Key | Default | Extra          |
 +----------------------+--------------+--------+-------+---------+--------------------+
 | employeeNumber | int(11)     | NO   | PRI  | NULL | auto_increment |
 | lastName       | varchar(50)  | NO   |     | NULL |              |
 | firstName      | varchar(50)  | NO   |      | NULL |              |
 | mobile         | varchar(25)  | NO   |     | NULL |              |
 | officeCode     | int(10)      | NO   | MUL | NULL |              |
 | jobTitle        | varchar(50)  | NO   |     | NULL |              |
 | birth          | datetime     | YES  |     | NULL |              |
 | note           | varchar(255) | YES  |     | NULL |              |
 | sex            | varchar(5)   | YES  |     | NULL |              |
 +--------------------+----------------+--------+-------+---------+--------------------+
 9 rows in set (0.00 sec)
 可以看到,两个表中字段分别满足表4.2和表4.3中要求的数据类型和约束类型。
   将表employees的mobile字段修改到officeCode字段后面。
 修改字段位置,需要用到ALTER TABLE语句,输入语句如下:
  ALTER TABLE employees MODIFY mobile VARCHAR(25) AFTER officeCode;
 Query OK, 0 rows affected (0.00 sec)
 Records: 0  Duplicates: 0  Warnings: 0
 结果显示执行成功,使用DESC查看修改后的结果如下:
 DESC employees;
 +----------------------+--------------+--------+-------+---------+--------------------+
 | Field           | Type      | Null  | Key | Default | Extra          |
 +----------------------+--------------+--------+-------+---------+--------------------+
 | employeeNumber | int(11)     | NO   | PRI  | NULL | auto_increment |
 | lastName       | varchar(50)  | NO   |     | NULL |              |
 | firstName      | varchar(50)  | NO   |      | NULL |              |
 | officeCode     | int(10)      | NO   | MUL | NULL |              |
 | mobile        | varchar(25) | NO   |      | NULL |             |
 | jobTitle        | varchar(50)  | NO   |     | NULL |              |
 | employee _birth | datetime     | YES  |     | NULL |              |
 | note           | varchar(255) | YES  |     | NULL |              |
 | sex            | varchar(5)  | YES  |     | NULL |              |
 +--------------------+----------------+--------+-------+---------+--------------------+
 9 rows in set (0.00 sec)
 可以看到,mobile字段已经插入到officeCode字段的后面。
   将表employees的birth字段改名为employee_birth。
 修改字段名,需要用到ALTER TABLE语句,输入语句如下:
 ALTER TABLE employees CHANGE birth employee_birth DATETIME;
 Query OK, 0 rows affected (0.02 sec)
 Records: 0  Duplicates: 0  Warnings: 0
 结果显示执行成功,使用DESC查看修改后的结果如下:
 DESC employees;
 +----------------------+--------------+--------+-------+---------+--------------------+
 | Field           | Type      | Null  | Key | Default | Extra          |
 +----------------------+--------------+--------+-------+---------+--------------------+
 | employeeNumber | int(11)     | NO   | PRI  | NULL | auto_increment |
 | lastName       | varchar(50)  | NO   |     | NULL |              |
 | firstName      | varchar(50)  | NO   |      | NULL |              |
 | mobile         | varchar(25)  | NO   |     | NULL |              |
 | officeCode     | int(10)      | NO   | MUL | NULL |              |
 | jobTitle        | varchar(50)  | NO   |     | NULL |              |
 | employee _birth | datetime   | YES  |     | NULL |              |
 | note           | varchar(255) | YES  |     | NULL |              |
 | sex            | varchar(5)   | YES  |     | NULL |              |
 +--------------------+----------------+--------+-------+---------+--------------------+
 9 rows in set (0.00 sec)
 可以看到,表中只有employee_birth字段,已经没有名称为birth的字段了,修改名称成功。
   修改sex字段,数据类型为CHAR(1),非空约束。
 修改字段数据类型,需要用到ALTER TABLE语句,输入语句如下:
 ALTER TABLE employees MODIFY sex CHAR(1) NOT NULL;
 Query OK, 0 rows affected (0.00 sec)
 Records: 0  Duplicates: 0  Warnings: 0
 结果显示执行成功,使用DESC查看修改后的结果如下:
 DESC employees;
 +----------------------+--------------+--------+-------+---------+--------------------+
 | Field           | Type      | Null  | Key | Default | Extra          |
 +----------------------+--------------+--------+-------+---------+--------------------+
 | employeeNumber | int(11)     | NO   | PRI  | NULL | auto_increment |
 | lastName       | varchar(50)  | NO   |     | NULL |              |
 | firstName      | varchar(50)  | NO   |      | NULL |              |
 | mobile         | varchar(25)  | NO   |     | NULL |              |
 | officeCode     | int(10)      | NO   | MUL | NULL |              |
 | jobTitle        | varchar(50)  | NO   |     | NULL |              |
 | employee _birth | datetime     | YES  |     | NULL |              |
 | note           | varchar(255) | YES  |     | NULL |              |
 | sex           | char(1)     |  NO  |     | NULL |              |
 +--------------------+----------------+--------+-------+---------+--------------------+
 9 rows in set (0.00 sec)
 执行结果可以看到,sex字段的数据类型由前面的VARCHAR(5)修改为CHAR(1),且其Null列显示为NO,表示该列不允许空值,修改成功。
   删除字段note。
 删除字段,需要用到ALTER TABLE语句,输入语句如下:
  ALTER TABLE employees DROP note;
 Query OK, 0 rows affected (0.01 sec)
 Records: 0  Duplicates: 0  Warnings: 0
 结果显示执行语句成功,使用DESC employees;查看语句执行后的结果:
  desc employees;
 +----------------------+--------------+--------+-------+---------+--------------------+
 | Field           | Type      | Null  | Key | Default | Extra          |
 +----------------------+--------------+--------+-------+---------+--------------------+
 |employeeNumber | int(11)     | NO   | PRI  | NULL | auto_increment |
 | lastName       | varchar(50)  | NO   |     | NULL |              |
 | firstName      | varchar(50)  | NO   |      | NULL |              |
 | mobile         | varchar(25)  | NO   |     | NULL |              |
 | officeCode     | int(10)      | NO   | MUL | NULL |              |
 | jobTitle        | varchar(50)  | NO   |     | NULL |              |
 | employee _birth | datetime     | YES  |     | NULL |              |
 | sex            | char(1)     |  NO  |     | NULL |              |
 +--------------------+----------------+--------+-------+---------+--------------------+
 8 rows in set (0.00 sec)
 可以看到,DESC语句返回了8个列字段,note字段已经不在表结构中,删除字段成功。
   增加字段名favoriate_activity,数据类型为VARCHAR(100)。
 增加字段,需要用到ALTER TABLE语句,输入语句如下:
  ALTER TABLE employees ADD favoriate_activity VARCHAR(100);
 Query OK, 0 rows affected (0.01 sec)
 Records: 0  Duplicates: 0  Warnings: 0
 结果显示执行语句成功,使用DESC employees;查看语句执行后的结果:
  desc employees;
 +----------------------+--------------+--------+-------+---------+--------------------+
 | Field           | Type      | Null  | Key | Default | Extra          |
 +----------------------+--------------+--------+-------+---------+--------------------+
 |employeeNumber | int(11)      | NO   | PRI  | NULL | auto_increment |
 | lastName       | varchar(50)  | NO   |     | NULL |              |
 | firstName       | varchar(50)  | NO   |      | NULL |             |
 | mobile         | varchar(25)  | NO   |     | NULL |              |
 | officeCode      | int(10)      | NO   | MUL | NULL |             |
 | jobTitle         | varchar(50)  | NO   |     | NULL |              |
 | employee _birth  | datetime     | YES  |     | NULL |              |
 | sex             | char(1)     |  NO  |     | NULL |              |
 | favoriate_activity | varchar(100) | YES  |     | NULL |              |
 +----------------------+-----------------+--------+-------+---------+--------------------+
 9 rows in set (0.00 sec)
 可以看到,数据表employees中增加了一个新的列favoriate_activity,数据类型为VARCHAR(100),允许空值,添加新字段成功。
   删除表offices。
 在创建表employees时,设置了表的外键,该表关联了其父表的officeCode主键。如前面所述,删除关联表时,要先删除子表employees的外键约束,才能删除父表。因此,必须先删除employees表的外键约束。
 1)删除employees表的外键约束,输入如下语句:
 ALTER TABLE employees DROP FOREIGN KEY office_fk;
 Query OK, 0 rows affected (0.01 sec)
 Records: 0  Duplicates: 0  Warnings: 0
 其中office_fk为employees表的外键约束的名称,即创建外键约束时CONSTRAINT 关键字后面的参数,结果显示语句执行成功,现在可以删除offices父表。
 2)删除表offices,输入如下语句:
 DROP TABLE offices;
 Query OK, 0 rows affected (0.00 sec)
 结果显示执行删除操作成功,使用SHOW TABLES;语句查看数据库中的表,结果如下:
  show tables;
 +-----------------------+
 | Tables_in_company |
 +-----------------------+
 | employees       |
 +-----------------------+
 1 row in set (0.00 sec)
 可以看到,数据库中已经没有名称为offices的表了,删除表成功。
   修改表employees存储引擎为MyISAM。
 修改表存储引擎,需要用到ALTER TABLE语句,输入语句如下:
 ALTER TABLE employees ENGINE=MyISAM;
 Query OK, 0 rows affected (0.01 sec)
 Records: 0  Duplicates: 0  Warnings: 0
 结果显示执行修改存储引擎操作成功,使用SHOW CREATE TABLE 语句查看表结构,结果如下:
  show CREATE TABLE employees\G
 *************************** 1. row ***************************
        Table: employees
 Create Table: CREATE TABLE `employees` (
   `employeeNumber` int(11) NOT NULL AUTO_INCREMENT,
   `lastName` varchar(50) NOT NULL,
   `firstName` varchar(50) NOT NULL,
   `officeCode` int(10) NOT NULL,
   `mobile` varchar(25) DEFAULT NULL,
   `jobTitle` varchar(50) NOT NULL,
   `employee_birth` datetime DEFAULT NULL,
   `sex` char(1) NOT NULL,
   `favoriate_activity` varchar(100) DEFAULT NULL,
   PRIMARY KEY (`employeeNumber`),
   KEY `office_fk` (`officeCode`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8
 1 row in set (0.00 sec)
 可以看到,倒数第2行中的ENGINE后面的参数已经修改为MyISAM,修改成功。
   将表employees名称修改为employees_info。
 修改数据表名,需要用到ALTER TABLE语句,输入语句如下:
 ALTER TABLE employees RENAME employees_info;
 Query OK, 0 rows affected (0.00 sec)
 结果显示执行语句成功,使用SHOW TABLES;语句查看执行结果:
  show tables;
 +-----------------------+
 | Tables_in_company |
 +-----------------------+
 | employees_info   |
 +----------------------+
 1 rows in set (0.00 sec)