3.5、删除字段
删除字段是将数据表中的某个字段从表中移除。
ALTER TABLE <表名> DROP <字段名>;
删除数据表tb_dept1表中的column2字段,,SQL语句如下:
mysql> ALTER TABLE tb_dept1 DROP column2; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> DESC tb_dept1; +-----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+-------+ | id | int | NO | PRI | NULL | | | name | varchar(30) | YES | | NULL | | | column3 | int | YES | | NULL | | | location | varchar(60) | YES | | NULL | | | managerId | int | YES | | NULL | | | column1 | varchar(12) | NO | | NULL | | +-----------+-------------+------+-----+---------+-------+ 6 rows in set (0.00 sec)
3.6、修改字段排列的位置
ALTER TABLE来改变表中字段的相对位置。
ALTER TABLE <表名> MODIFY <字段1> <数据类型> FIRST|AFTER <字段2>;
1、修改字段为数据表的第一个字段
将数据表tb_dept中的column1字段修改为表的第一个字段,SQL语句如下:
mysql> ALTER TABLE tb_dept1 MODIFY column1 VARCHAR(12) FIRST; Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> DESC tb_dept1; +-----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+-------+ | column1 | varchar(12) | YES | | NULL | | | id | int | NO | PRI | NULL | | | name | varchar(30) | YES | | NULL | | | column3 | int | YES | | NULL | | | location | varchar(60) | YES | | NULL | | | managerId | int | YES | | NULL | | +-----------+-------------+------+-----+---------+-------+ 6 rows in set (0.00 sec)
2、修改字段到数据表制定的列之后
将数据表tb_dept1中的column1字段插入到location字段后面,SQL语句如下:
mysql> ALTER TABLE tb_dept1 MODIFY column1 VARCHAR(12) AFTER location; Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> DESC tb_dept1; +-----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+-------+ | id | int | NO | PRI | NULL | | | name | varchar(30) | YES | | NULL | | | column3 | int | YES | | NULL | | | location | varchar(60) | YES | | NULL | | | column1 | varchar(12) | YES | | NULL | | | managerId | int | YES | | NULL | | +-----------+-------------+------+-----+---------+-------+ 6 rows in set (0.00 sec)
3.7、修改数据表的存储引擎
在MySQL中,存储引擎是指MySQL数据库中表的存储类型。可以根据自己的需要,选择不同的引擎,甚至可以为每一张表选择不同的存储引擎。
qALTER TABLE <表名> ENGINE=<更改后的存储引擎名>;
将数据表tb_deptment3的存储引擎修改为MyISAM。
1、在修改存储引擎之前,先使用SHOW CREATE TABLE查看表tb_deptment3当前的存储引擎,结果如下。
2、修改存储引擎
mysql> ALTER TABLE tb_deptment3 ENGINE=MyISAM; Query OK, 0 rows affected (0.04 sec) Records: 0 Duplicates: 0 Warnings: 0
3、在修改存储引擎之后,使用SHOW CREATE TABLE查看表tb_deptment3当前的存储引擎,结果如下。
3.8、修改数据表的外键约束
对于数据库中定义的外键,如果不再需要,可以将其删除。外键一旦删除,就会解除主表和从表间的关联关系。
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>
删除数据表tb_emp9中的外键约束。
1、创建表tb_emp9,创建外键deptId关联tb_dept1表的主键id,SQL语句如下:
mysql> 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) -> ); Query OK, 0 rows affected, 2 warnings (0.03 sec)
使用SHOW CREATE TABLE查看表tb_emp9的结构,结果如下:
2、删除数据表tb_emp9中的外键约束。
mysql> ALTER TABLE tb_emp9 DROP FOREIGN KEY fk_emp_dept; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
3、使用SHOW CREATE TABLE查看表删除tb_emp9中外键约束的结构,结果如下:
4、删除数据表
4.1、删除没有被关联的表
删除数据表tb_dept2,SQL语句如下:
mysql> DROP TABLE IF EXISTS tb_dept2; Query OK, 0 rows affected (0.01 sec)
4.2、删除被其它表关联的主表
在数据库中创建两个关联表。
1、创建表tb_dept2,SQL语句如下:
mysql> CREATE TABLE tb_dept2 -> ( -> id INT(11) PRIMARY KEY, -> name VARCHAR(22), -> location VARCHAR(50) -> ); Query OK, 0 rows affected, 1 warning (0.02 sec)
2、创建表tb_emp,SQL语句如下:
mysql> 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) -> ); Query OK, 0 rows affected, 2 warnings (0.03 sec)
使用SHOW CREATE TABLE命令查看表tb_emp的外键约束,结果如下:
删除被数据表tb_emp关联的数据表tb_dept2。
mysql> DROP TABLE tb_dept2; ERROR 3730 (HY000): Cannot drop table 'tb_dept2' referenced by a foreign key constraint 'fk_emp_dept' on table 'tb_emp'.
删除会出现错误,因为存在外键的约束,主表不能直接删除。
解除子表的外键约束
mysql> ALTER TABLE tb_emp DROP FOREIGN KEY fk_emp_dept; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
删除数据表tb_dept2;
mysql> DROP TABLE tb_dept2; Query OK, 0 rows affected (0.01 sec)
消除外键约束后,主表就可以删除了。
5、综合案例-数据表的基本操作
1、案例要求
创建数据库company,按照下面数据表格的要求创建两个数据表:offices和employees。
1.1、Offices表结构
字段名 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
officeCode | INT(10) | 是 | 否 | 是 | 是 | 否 |
city | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
address | VARCHAR(50) | 否 | 否 | 否 | 否 | 否 |
country | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
postalCode | VARCHAR(15) | 否 | 否 | 否 | 是 | 否 |
1.2、Employees表结构
字段名 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
employeeNumber | INT(11) | 是 | 否 | 是 | 是 | 是 |
lastName | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
firstName | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
mobile | VARCHAR(25) | 否 | 否 | 否 | 是 | 否 |
officeCode | INT(10) | 否 | 是 | 是 | 否 | 否 |
jobTile | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
birth | DATETIME | 否 | 否 | 是 | 否 | 否 |
note | VARCHAR(255) | 否 | 否 | 否 | 否 | 否 |
sex | VARCHAR(5) | 否 | 否 | 否 | 否 | 否 |
通过数据表的创建、查看、修改和删除等操作,来达到掌握有关数据表的基本操作的能力。其具体要求如下所示:
1、创建数据库company
2、创建数据表offices
3、创建数据表employees
4、将数据表employees的mobile字段修改到officeCode字段后面
5、将数据表employees的birth字段修改名称为employee_birth
6、修改sex字段的数据类型为CHAR(1),非空约束
7、删除字段note
8、增加字段名称为favorite_activity,数据类型为VARCHAR(100)
9、修改数据表employees存储引擎为MyISAM
10、将数据表employees名称修改为employees_info
11、删除数据表offices
2、案例实现过程
一、cmd环境实现案例过程
1、创建数据库company
登入数据库:
C:\WINDOWS\system32>mysql -u root -p Enter password: ****** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 8.0.29 MySQL Community Server - GPL Copyright (c) 2000, 2022, Oracle and/or its affiliates. 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. mysql>
创建数据库:
mysql> CREATE DATABASE company; Query OK, 1 row affected (0.01 sec)
2、创建数据表offices
1、使用数据库company
mysql> USE company; Database changed
2、创建数据表offices
mysql> CREATE TABLE offices -> ( -> officeCode INT(10) NOT NULL UNIQUE, -> city VARCHAR(50) NOT NULL, -> address VARCHAR(50), -> country VARCHAR(50) NOT NULL, -> postalCode VARCHAR(15), -> PRIMARY KEY(officeCode) -> ); Query OK, 0 rows affected, 1 warning (0.01 sec)
可以看到,数据表offices已经创建成功。
3、创建数据表employees
mysql> 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) UNIQUE, -> officeCode INT(10) NOT NULL, -> jobTile VARCHAR(50) NOT NULL, -> birth DATETIME NOT NULL, -> note VARCHAR(255), -> sex VARCHAR(5), -> CONSTRAINT office_fk FOREIGN KEY(officeCode) REFERENCES offices(officeCode) -> ); Query OK, 0 rows affected, 2 warnings (0.02 sec)
可以看到,数据表employees已经创建成功。
4、将数据表employees的mobile字段修改到officeCode字段后面
mysql> ALTER TABLE employees MODIFY mobile VARCHAR(25) AFTER officeCode; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> DESC employees; +----------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------+--------------+------+-----+---------+----------------+ | employeeNumber | int | NO | PRI | NULL | auto_increment | | lastName | varchar(50) | NO | | NULL | | | firstName | varchar(50) | NO | | NULL | | | officeCode | int | NO | MUL | NULL | | | mobile | varchar(25) | YES | UNI | NULL | | | jobTile | varchar(50) | NO | | NULL | | | birth | datetime | NO | | NULL | | | note | varchar(255) | YES | | NULL | | | sex | varchar(5) | YES | | NULL | | +----------------+--------------+------+-----+---------+----------------+ 9 rows in set (0.00 sec)
可以看到,数据表employees的mobile字段已经修改到了officeCode字段后面。
5、将数据表employees的birth字段修改名称为employee_birth
mysql> ALTER TABLE employees CHANGE birth emoloyee_birth DATETIME; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> DESC employees; +----------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------+--------------+------+-----+---------+----------------+ | employeeNumber | int | NO | PRI | NULL | auto_increment | | lastName | varchar(50) | NO | | NULL | | | firstName | varchar(50) | NO | | NULL | | | officeCode | int | NO | MUL | NULL | | | mobile | varchar(25) | YES | UNI | NULL | | | jobTile | varchar(50) | NO | | NULL | | | emoloyee_birth | datetime | YES | | NULL | | | note | varchar(255) | YES | | NULL | | | sex | varchar(5) | YES | | NULL | | +----------------+--------------+------+-----+---------+----------------+ 9 rows in set (0.00 sec)