关闭

MySQL:数据表的基本操作

207人阅读 评论(1) 收藏 举报
分类:
【例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)


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:320138次
    • 积分:5894
    • 等级:
    • 排名:第4508名
    • 原创:194篇
    • 转载:484篇
    • 译文:0篇
    • 评论:185条
    最新评论