MySQL基础知识
MySQL简介
MySQL 是一个关系型数据库管理系统, 由瑞典 MySQL AB 公司开发, 目前属于 Oracle 公司。MySQL 是一种关系型数据库管理系统,关系型数据库将数据保存在不同的表 中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL特点
MySQL 是开源的。
MySQL 支持大型系统的数据库。可以处理拥有上千万条记录的大型数据库。 MySQL 使用标准的 SQL 数据语言形式。
MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C 、C++、 Python 、Java 、Perl 、PHP 等。
MySQL 存储数据量较大,32 位系统表文件最大可支持 4GB ,64位系统支持最大的 表文件为 8TB。
MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系 统。
MySQL分类
-
MySQL分为社区版
社区版是完全开源免费的,社区版也支持多种数据类型和标准的SQL查询语言,能够对数据进行各种查询、增加、删除、修改等操作,所以一般情况下社区版就可以满足开发需求了。
-
企业版
企业版是收费的。即使在开发中需要用到一些付费的附加功能,价格相对于昂贵的 Oracle、DB2等也是有很大优势的。对数据库可靠性要求比较高的企业可以选择企业版。
MySQL下载和安装与卸载
网上都有
连接MySQL
通过MySQL自带客户端工具
安装完MySQL之后在开始菜单有自带客户端工具打开它
安装时设置的密码
Navicat工具的使用
我是使用Navicat Premiunm 15
SQL语言
SQL语言简介
结构化查询语言(Structured Query Language)简称 SQL(发音:sequal['si:kwəl]),是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
SQL 能做什么?
- SQL 面向数据库执行查询
- SQL 可在数据库中插入新的记录
- SQL 可更新数据库中的数据
- SQL 可从数据库删除记录
- SQL 可创建新数据库
- SQL 可在数据库中创建新表
- SQL 可在数据库中创建存储过程
- SQL 可在数据库中创建视图
- SQL 可以设置表、存储过程和视图的权限
SQL 标准
SQL 是 1986 年 10 月由美国国家标准局(ANSI)通过的数据库语言美国标准,接着,国际标准化组织(ISO)颁布了 SQL 正式国际标准。1989 年 4 月,ISO 提出了具有完整性特征的 SQL89 标准,1992 年 11 月又公布了 SQL92 标准,在此标准中,把数据库分为三个级别:基本集、标准集和完全集。在 1999 年推出 99 版标准。最新版本为 SQL2016 版。比较有代表性的几个版本:SQL86、SQL92、SQL99。
SQL语言分类
- 数据查询语言(DQL:Data Query Language)其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。关键字 SELECT 是 DQL(也是所有 SQL)用得最多的动词。
- SELECT
- FROM
- WHERE
- ORDER BY
- HAVING
- 数据操作语言(DML:Data Manipulation Language)其语句包括动词 INSERT,UPDATE 和 DELETE。它们分别用于添加,修改和删除表中的行。
- INSERT:添加数据
- UPDATE:更新数据
- DELETE:删除数据
- 数据定义语言(DDL:Data Definition Language)定义数据库对象语言,其语句包括动词 CREATE 和 DROP 等。
- CREATE:创建数据库对象
- ALTER:修改数据库对象
- DROP:删除数据库对象
- 数据控制语言(DCL:Data Control Language)它的语句通过GRANT 或 REVOKE 获得许可,确定用户对数据库对象的访问。
- GRANT:授予用户某种权限
- REVOKE:回收授予的某种权限
- 事务控制语言(TCL :Transaction Control Language)它的语句能确保被 DML 语句影响的表的所有行及时得以更新。
- COMMIT:提交事务
- ROLLBACK:回滚事务
- SAVEPOINT:设置回滚点
注意:
------------------------------------------------------------------------------------------------------------------------------------------
数据操纵语言DML(insert、update、delete)针对表中的数据 ;
而数据定义语言DDL(create、alter、drop)针对数据库对象,比如数据库database、表table、索引index、视图view、存储过程procedure、触发器trigger;
SQL语言语法
- SQL语句不区分大小写,关键字建议大写。
- SQL语句可以单行或多行书写,以分号结尾。
创建与删除数据库
创建数据库
示例:
创建一个test 的数据库,并查看该数据库,以及该数据库的编码。
创建数据库:
create database test default character set utf8;
查看数据库:
show databases;
查看数据库编码:
select
schema_name,default_character_set_name
from information_schema.schemata
where schema_name = 'test';
删除数据库
-
使用DDL语言删除数据库
DROP DATABASE 数据库名称;
示例:
删除 test 数据库
drop database test;
选择数据库
在创建表时,需要先选择数据库。
USE 数据库名;
示例:
创建一个名称为 ylsf 的数据库,编码为 utf8。
create database ylsf default character set utf8;
选择该数据库。
use ylsf;
的数据库,编码为 utf8。
create database ylsf default character set utf8;
[外链图片转存中…(img-CdqQSNqX-1713676918844)]
选择该数据库。
use ylsf;
MySQL中的数据类型
MySQL数据库数据类型分类
整数类型
MySQL数据类型 | 含义(有符号) |
---|---|
tinyint(m) | 1个字节 范围(-128~127) |
smallint(m) | 2个字节 范围(-32768~32767) |
mediumint(m) | 3个字节 范围(-8388608~8388607) |
int(m) | 4个字节 范围(-2147483648~2147483647) |
bigint(m) | 8个字节 范围(±9.22*10的18次方) |
数值类型中的长度 m 是指显示长度,并不表示存储长度,只有字段指定 zerofill 时有用
例如: int(3) ,如果实际值是 2 ,如果列指定了 zerofill ,查询结果就是 002 ,左边用 0 来 填充
浮点类型
MySQL数据类型 | 含义 |
---|---|
float(m,d) | 单精度浮点型 8位精度(4字节) m总个数,d小数位 |
double(m,d) | 双精度浮点型 16位精度(8字节) m总个数,d小数位 |
字符类型
MySQL数据类型 | 含义 |
---|---|
char(n) | 固定长度,最多255个字符 |
tinytext | 可变长度,最多255个字符 |
varchar(n) | 可变长度,最多65535个字符 |
text | 可变长度,最多65535个字符 |
mediumtext | 可变长度,最多2的24次方-1个字符 |
longtext | 可变长度,最多2的32次方-1个字符 |
char和varchar:
------------------------------------------------------------------------------------------------------------------------------------------
1. char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定长。
2. varchar可变长度,可以设置最大长度;适合用在长度可变的属性。
3. text不设置长度, 当不知道属性的最大长度时,适合用text。
按照查询速度: char最快, varchar次之,text最慢。
字符串型使用建议:
------------------------------------------------------------------------------------------------------------------------------------------
1. 经常变化的字段用varchar
2. 知道固定长度的用char
3. 尽量用varchar
4. 超过255字符的只能用varchar或者text
5. 能用varchar的地方不用text
日期类型
MySQL数据类型 | 含义 |
---|---|
date | 日期 YYYY-MM-DD |
time | 时间 HH:MM:SS |
datetime | 日期时间 YYYY-MM-DD HH:MM:SS |
timestamp | 时间戳YYYYMMDD HHMMSS |
二进制数据(BLOB)
- BLOB和TEXT存储方式不同,TEXT以文本方式存储,英文存储区分大小写,而Blob是以二进制方式存储,不分大小写。
- BLOB存储的数据只能整体读出。
- TEXT可以指定字符集,BLOB不用指定字符集。
创建表与删除表
创建表
-
使用DDL语句创建表
CREATE TABLE 表名(列名 类型,列名 类型......);
示例:
创建一个 employees 表包含雇员 ID ,雇员名字,雇员薪水。
create table employees( employee_id int, employee_name varchar(10), salary float(8,2) );
查看已创建的表。
show tables;
删除表
-
使用DDL语句删除表
DROP TABLE 表名;
示例:
删除 employees 表。
drop table employees;
修改表
修改表名
-
使用DDL语句修改表
ALTER TABLE 旧表名 RENAME 新表名;
示例:
创建一个 employees 表包含雇员 ID ,雇员名字,雇员薪水。
create table employees( employee_id int, employee_name varchar(10), salary float(8,2) );
将 employees 表名修改为 emp。
alter table employees rename emp;
修改列名
-
使用DDL语句修改列名
ALTER TABLE 表名 CHANGE COLUMN 旧列名 新列名 类型;
示例:
将 emp 表中的 employee_name 修改为 name。
alter table emp change column employee_name name varchar(20);
修改列类型
-
使用DDL语句修改列类型
ALTER TABLE 表名 MODIFY 列名 新类型;
示例:
将 emp 表中的 name 的长度指定为 40。
alter table emp modify name varchar(40);
添加新列
-
使用DDL语句添加新列
ALTER TABLE 表名 ADD COLUMN 新列名 类型;
示例:
在 emp 表中添加佣金列,列名为 commission_pct。
alter table emp add column commission_pct float(4,2);
删除指定列
-
使用DDL语句删除指定的列
ALTER TABLE 表名 DROP COLUMN 列名;
示例:
删除 emp 表中的 commission_pct。
alter table emp drop column commission_pct;
MySQL中的约束
约束概述
数据库约束是对表中的数据进行进一步的限制,保证数据的正确性、有效性和完整性。
-
主键约束(Primary Key) PK
主键约束是使用最频繁的约束。在设计数据表时,一般情况下,都会要求表中设置一个主键。 主键是表的一个特殊字段,该字段能唯一标识该表中的每条信息。例如,学生信息表中的学号是唯一的。
-
外键约束(Foreign Key) FK
外键约束经常和主键约束一起使用,用来确保数据的一致性。
-
唯一性约束(Unique)
唯一约束与主键约束有一个相似的地方,就是它们都能够确保列的唯一性。与主键约束不同的是,唯一约束在一个表中可以有多个,并且设置唯一约束的列是允许有空值的。
-
非空约束(Not Null)
非空约束用来约束表中的字段不能为空。
-
检查约束(Check)
检查约束也叫用户自定义约束,是用来检查数据表中,字段值是否有效的一个手段,但目前 MySQL 数据库不支持检查约束。
添加主键约束(Primary Key)
-
单一主键
使用一个列作为主键列,当该列的值有重复时,则违反唯一约束。
-
联合主键
使用多个列作为主键列,当多个列的值都相同时,则违反唯一约束。
修改表添加主键约束
-
使用DDL语句添加主键约束
ALTER TABLE 表名 ADD PRIMARY KEY(列名)
示例:
将 emp 表中的 employee_id 修改为主键。
alter table emp add primary key(employee_id); ```
主键自增长
MySQL 中的自动增长类型要求:
- 一个表中只能有一个列为自动增长。
- 自动增长的列的类型必须是整数类型。
- 自动增长只能添加到具备主键约束与唯一性约束的列上。
- 删除主键约束或唯一性约束,如果该列拥有自动增长能力,则需要先去掉自动增长然 后在删
除约束。
alter table 表名 modify 主键 类型 auto_increment;
示例:
将 emp 表中的 employee_id 主键修改为自增。
alter table emp modify employee_id int auto_increment;
删除主键
-
使用DDL语句删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;
注意: 删除主键时,如果主键列具备自动增长能力,需要先去掉自动增长,然后在删除 主键。
示例:
删除emp表中的 employee_id 主键约束。
去掉自动增长:
alter table emp modify employee_id int;
删除主键:
alter table emp drop primary key;
添加外键约束(Foreign Key)
修改表添加外键约束
-
使用DDL语句添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY( 列 名 ) REFERENCES 参照的表名 (参照的列名);
示例:
创建 departments 表包含 department_id 、department_name ,location_id。
create table departments( department_id int, department_name varchar(30), location_id int );
修改departments表,向department_id列添加主键约束与自动递增。
alter table departments add primary key(department_id); alter table departments modify department_id int auto_increment;
修改 emp 表,添加 dept_id 列。
alter table emp add column dept_id int;
向 emp 表中的 dept_id 列添加外键约束。
alter table emp add constraint emp_fk foreign key(dept_id) references departments(department_id);
删除外键约束
-
使用DDL语句删除外键约束。
ALTER TABLE 表名 DROP FOREIGN KEY 约束名;
示例:
删除 dept_id 的外键约束。
alter table emp drop foreign key emp_fk;
添加唯一性约束(Unique)
修改表添加唯一性约束
-
使用DDL语句添加唯一性约束。
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(列名);
示例:
向 emp 表中的 name 添加唯一约束。
alter table emp add constraint emp_uk unique(name);
删除唯一性约束
-
使用DDL语句删除唯一性约束。
ALTER TABLE 表名 DROP KEY 约束名;
示例:
删除 name 的唯一约束。
alter table emp drop key emp_uk;
非空约束(Not Null)
修改表添加非空约束
-
使用DDL语句添加非空约束。
ALTER TABLE 表名 MODIFY 列名 类型 NOT NULL;
示例:
向 emp 表中的 salary 添加非空约束。
alter table emp modify salary float(8,2) not NULL;
删除非空约束
-
使用DDL语句删除非空约束。
ALTER TABLE 表名 MODIFY 列名 类型 NULL;
示例:
删除emp表中salary 的非空约束。
alter table emp modify salary float(8,2) NULL;
创建表时添加约束
查询表中的约束信息:
SHOW KEYS FROM 表名;
示例:
创建 depts 表包含 department_id 该列为主键且自动增长,department_name 列不 允许重复,location_id 列不允含有空值。
create table depts(
department_id int primary key auto_increment,department_name varchar(30) unique,
location_id int not null
);
NULL;
示例:
删除emp表中salary 的非空约束。
```mysql
alter table emp modify salary float(8,2) NULL;
[外链图片转存中…(img-c3WTuLjZ-1713681238983)]
创建表时添加约束
查询表中的约束信息:
SHOW KEYS FROM 表名;
示例:
创建 depts 表包含 department_id 该列为主键且自动增长,department_name 列不 允许重复,location_id 列不允含有空值。
create table depts(
department_id int primary key auto_increment,department_name varchar(30) unique,
location_id int not null
);
MySQL中DML操作
添加数据(INSERT)
-
选择插入
INSERT INTO 表名(列名 1 ,列名 2 ,列名 3.....) VALUES(值 1 ,值 2 ,值 3......);
示例:
前提:department_id自动递增
向 departments 表中添加一条数据,部门名称为 market ,工作地点 ID 为 1。
insert into departments(department_name,location_id) values("market",1);
-
完全插入
INSERT INTO 表名 VALUES(值 1 ,值 2 ,值 3......);
注意:
如果主键是自动增长,需要使用 default 或者 null 或者 0 占位。
示例一:
向 departments 表中添加一条数据,部门名称为 development ,工作地点 ID 为 2 。使用 default 占位。
insert into departments values(default,"development",2);
示例二:
向 departments 表中添加一条数据,部门名称为human ,工作地点 ID 为 3 。使用 null 占 位。
insert into departments values(null,"human",3);
示例三:
向 departments 表中添加一条数据,部门名称为 teaching ,工作地点 ID 为 4 。使用 0 占 位。
insert into departments values(0,"teaching",4);
默认值处理(DEFAULT)
在 MySQL 中可以使用 DEFAULT 为列设定一个默认值。如果在插入数据时并未指定该列的值,那么 MySQL 会将默认值添加到该列中。
创建表时指定列的默认值
CREATE TABLE 表名(列名 类型 default 默认值,......);
示例:
创建 emp3 表,该表包含 emp_id 主键且自动增长,包含 name ,包含 address 该列默认 值为”未知”。
create table emp3(
emp_id int primary key auto_increment,
name varchar(10),
address varchar(50) default 'Unknown'
);
修改表添加新列并指定默认值
ALTER TABLE 表名 ADD COLUMN 列名 类型 DEFAULT 默认值;
示例:
修改 emp3 表,添加job_id 该列默认值为 0。
alter table emp3 add column job_id int default 0;
插入数据时的默认值处理
如果在插入数据时并未指定该列的值,那么MySQL 会将默认值添加到该列中。如果是 完全项插入需要使用 default 来占位。
示例:
向 emp3 表中添加数据,要求 address 列与job_id 列使用默认值作为该列的值。
insert into emp3(name) values("admin");
insert into emp3
values(default,"oldlu",default,default);
更新数据(UPDATE)
UPDATE 表名 SET 列名=值,列名=值 WHERE 条件;
注意:
更新语句中一定要给定更新条件,否则表中的所有数据都会被更新。
示例:
更新 emp3 表中的 id 为 1 的数据,添加 address 为 BeiJing。
update emp3 set address = "BeiJing"
where emp_id = 1;
删除数据(DELETE)
DELETE FROM 表名 WHERE 条件;
注意:
在DELETE语句中,如果没有给定删除条件则会删除表中的所有数据。
示例:
删除 emp3 表中 emp_id 为 1 的雇员信息。
delete from emp3 where emp_id = 1;
TRUNCATE清空表
TRUNCATE TABLE 表名;
示例:
删除 emp3 表中的所有数据。
truncate table emp3;
清空表时DELETE与 TRUNCATE 区别
- truncate 是整体删除(速度较快), delete 是逐条删除(速度较慢);
- truncate 不写服务器 log,delete 写服务器 log,也就是 truncate 效率比 delete 高的原因;
- truncate 是会重置自增值,相当于自增列会被置为初始值,又重新从 1 开始记录,而 不是接着原
- 来的值。而 delete 删除以后, 自增值仍然会继续累加。
MySQL查询数据
SELECT基本查询
SELECT语句的功能
SELECT 语句从数据库中返回信息。使用一个 SELECT 语句,可以做下面的事:
- 列选择:能够使用 SELECT 语句的列选择功能选择表中的列,这些列是想要用查询返回的。当查询时,能够返回列中的数据。
- 行选择:能够使用 SELECT 语句的行选择功能选择表中的行,这些行是想要用查询返回的。能够使用不同的标准限制看见的行。
- 行连接:能够使用 SELECT 语句的连接功能来集合数据,这些数据被存储在不同的表中,在它们之间可以创建连接,查询出我们所关心的数据。
SELECT基本语法
基本 SELECT 语句
在最简单的形式中,SELECT 语句必须包含下面的内容:
- 一个 SELECT 子句,指定被显示的列
- 一个 FROM 子句,指定表,该表包含 SELECT 子句中的字段列表
在语法中:
语句 | 含义 |
---|---|
SELECT | 是一个或多个字段的列表 |
* | 选择所有的列 |
DISTINCT | 禁止重复 |
column | expression | 选择指定的字段或表达式 |
alias | 给所选择的列不同的标题 |
FROM table | 指定包含列的表 |
添加测试数据
将data.sql文件通过Navicat导入到MySQL中一个数据库中。该文件包含了课程中所使用的案例表。
data.sql文件内容:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for countries
-- ----------------------------
DROP TABLE IF EXISTS `countries`;
CREATE TABLE `countries` (
`COUNTRY_ID` char(2) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'Primary key of countries table.',
`COUNTRY_NAME` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'Country name',
`REGION_ID` int NULL DEFAULT NULL COMMENT 'Region ID for the country. Foreign key to region_id column in the departments table.',
PRIMARY KEY (`COUNTRY_ID`) USING BTREE,
INDEX `COUNTR_REG_FK`(`REGION_ID`) USING BTREE,
CONSTRAINT `COUNTR_REG_FK` FOREIGN KEY (`REGION_ID`) REFERENCES `regions` (`REGION_ID`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'country table. Contains 25 rows. References with locations table.' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of countries
-- ----------------------------
INSERT INTO `countries` VALUES ('AR', 'Argentina', 2.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('AU', 'Australia', 3.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('BE', 'Belgium', 1.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('BR', 'Brazil', 2.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('CA', 'Canada', 2.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('CH', 'Switzerland', 1.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('CN', 'China', 3.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('DE', 'Germany', 1.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('DK', 'Denmark', 1.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('EG', 'Egypt', 4.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('FR', 'France', 1.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('IL', 'Israel', 4.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('IN', 'India', 3.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('IT', 'Italy', 1.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('JP', 'Japan', 3.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('KW', 'Kuwait', 4.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('ML', 'Malaysia', 3.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('MX', 'Mexico', 2.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('NG', 'Nigeria', 4.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('NL', 'Netherlands', 1.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('SG', 'Singapore', 3.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('UK', 'United Kingdom', 1.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('US', 'United States of America', 2.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('ZM', 'Zambia', 4.000000000000000000000000000000);
INSERT INTO `countries` VALUES ('ZW', 'Zimbabwe', 4.000000000000000000000000000000);
-- ----------------------------
-- Table structure for departments
-- ----------------------------
DROP TABLE IF EXISTS `departments`;
CREATE TABLE `departments` (
`DEPARTMENT_ID` int NOT NULL COMMENT 'Primary key column of departments table.',
`DEPARTMENT_NAME` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'A not null column that shows name of a department. Administration,\nMarketing, Purchasing, Human Resources, Shipping, IT, Executive, Public\nRelations, Sales, Finance, and Accounting. ',
`MANAGER_ID` int NULL DEFAULT NULL COMMENT 'Manager_id of a department. Foreign key to employee_id column of employees table. The manager_id column of the employee table references this column.',
`LOCATION_ID` int NULL DEFAULT NULL COMMENT 'Location id where a department is located. Foreign key to location_id column of locations table.',
PRIMARY KEY (`DEPARTMENT_ID`) USING BTREE,
INDEX `DEPT_LOCATION_IX`(`LOCATION_ID`) USING BTREE,
INDEX `DEPT_MGR_FK`(`MANAGER_ID`) USING BTREE,
CONSTRAINT `DEPT_LOC_FK` FOREIGN KEY (`LOCATION_ID`) REFERENCES `locations` (`LOCATION_ID`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `DEPT_MGR_FK` FOREIGN KEY (`MANAGER_ID`) REFERENCES `employees` (`EMPLOYEE_ID`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'Departments table that shows details of departments where employees\nwork. Contains 27 rows; references with locations, employees, and job_history tables.' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of departments
-- ----------------------------
INSERT INTO `departments` VALUES (10, 'Administration', 200, 1700);
INSERT INTO `departments` VALUES (20, 'Marketing', 201, 1800);
INSERT INTO `departments` VALUES (30, 'Purchasing', 114, 1700);
INSERT INTO `departments` VALUES (40, 'Human Resources', 203, 2400);
INSERT INTO `departments` VALUES (50, 'Shipping', 121, 1500);
INSERT INTO `departments` VALUES (60, 'IT', 103, 1400);
INSERT INTO `departments` VALUES (70, 'Public Relations', 204, 2700);
INSERT INTO `departments` VALUES (80, 'Sales', 145, 2500);
INSERT INTO `departments` VALUES (90, 'Executive', 100, 1700);
INSERT INTO `departments` VALUES (100, 'Finance', 108, 1700);
INSERT INTO `departments` VALUES (110, 'Accounting', 205, 1700);
INSERT INTO `departments` VALUES (120, 'Treasury', NULL, 1700);
INSERT INTO `departments` VALUES (130, 'Corporate Tax', NULL, 1700);
INSERT INTO `departments` VALUES (140, 'Control And Credit', NULL, 1700);
INSERT INTO `departments` VALUES (150, 'Shareholder Services', NULL, 1700);
INSERT INTO `departments` VALUES (160, 'Benefits', NULL, 1700);
INSERT INTO `departments` VALUES (170, 'Manufacturing', NULL, 1700);
INSERT INTO `departments` VALUES (180, 'Construction', NULL, 1700);
INSERT INTO `departments` VALUES (190, 'Contracting', NULL, 1700);
INSERT INTO `departments` VALUES (200, 'Operations', NULL, 1700);
INSERT INTO `departments` VALUES (210, 'IT Support', NULL, 1700);
INSERT INTO `departments` VALUES (220, 'NOC', NULL, 1700);
INSERT INTO `departments` VALUES (230, 'IT Helpdesk', NULL, 1700);
INSERT INTO `departments` VALUES (240, 'Government Sales', NULL, 1700);
INSERT INTO `departments` VALUES (250, 'Retail Sales', NULL, 1700);
INSERT INTO `departments` VALUES (260, 'Recruiting', NULL, 1700);
INSERT INTO `departments` VALUES (270, 'Payroll', NULL, 1700);
-- ----------------------------
-- Table structure for employees
-- ----------------------------
DROP TABLE IF EXISTS `employees`;
CREATE TABLE `employees` (
`EMPLOYEE_ID` int NOT NULL COMMENT 'Primary key of employees table.',
`FIRST_NAME` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'First name of the employee. A not null column.',
`LAST_NAME` varchar(25