1. MySQL概述
在这一章节,我们主要介绍两个部分,数据库相关概念及MySQL数据库的介绍、下载、安装、启动及连接。
1.1 数据库相关概念
在这一部分,我们先来讲解三个概念:数据库、数据库管理系统、SQL。
名称 | 全称 | 简称 |
数据库 | 存储数据的仓库,数据是有组织的进行存储 |
DataBase
(
DB
)
|
数据库管理系统
|
操纵和管理数据库的大型软件
|
DataBase Management
System (DBMS)
|
SQL
|
操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准
|
Structured Query
Language (SQL)
|
- Oracle:大型的收费数据库,Oracle公司产品,价格昂贵。
- MySQL:开源免费的中小型数据库,后来Sun公司收购了MySQL,而Oracle又收购了Sun公司。
- 目前Oracle推出了收费版本的MySQL,也提供了免费的社区版本。SQL Server:Microsoft 公司推出的收费的中型数据库,C#、.net等语言常用。
- PostgreSQL:开源免费的中小型数据库。
- DB2:IBM公司的大型收费数据库产品。
- SQLLite:嵌入式的微型数据库。Android内置的数据库采用的就是该数据库。
- MariaDB:开源免费的中小型数据库。是MySQL数据库的另外一个分支、另外一个衍生产品,与MySQL数据库有很好的兼容性。
而不论我们使用的是上面的哪一个关系型数据库,最终在操作时,都是使用SQL语言来进行统一操作, 因为我们前面讲到SQL语言,是操作关系型数据库的统一标准 。所以即使我们现在学习的是MySQL, 假如我们以后到了公司,使用的是别的关系型数据库,如:Oracle、DB2、SQLServer,也完全不用担心,因为操作的方式都是一致的。
1.2 数据库指令
1.2.1 启动停止
MySQL安装完成之后,在系统启动时,会自动启动
MySQL
服务,我们无需手动启动了。
当然,也可以手动的通过指令启动停止,以管理员身份运行cmd
,进入命令行执行如下指令:
net start mysql80
net stop mysql80
1.2.2 客户端连接
方式一:使用MySQL提供的客户端命令行工具
方式二:使用系统自带的命令行工具执行指令
mysql [-h 127.0.0.1] [-P 3306] -u root -p
参数:
-h : MySQL服务所在的主机IP
-P : MySQL服务端口号, 默认3306
-u : MySQL数据库用户名
-p : MySQL数据库用户名对应的密码
[ ]内为可选参数,如果需要连接远程的
MySQL
,需要加上这两个参数来指定远程主机
IP
、端口,如果连接本地的MySQL
,则无需指定这两个参数。
1.3 数据模型
1.3.1 关系型数据库(RDBMS)
概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
而所谓二维表,指的是由行和列组成的表,如下图(就类似于Excel
表格数据,有表头、有列、有行,还可以通过一列关联另外一个表格中的某一列数据)。我们之前提到的MySQL
、
Oracle
、
DB2
、SQLServer这些都是属于关系型数据库,里面都是基于二维表存储数据的。简单说,基于二维表存储数据的数据库就成为关系型数据库,不是基于二维表存储数据的数据库,就是非关系型数据库。
特点:
使用表存储数据,格式统一,便于维护。
使用SQL
语言操作,标准统一,使用方便。
2. SQL
全称 Structured Query Language
,结构化查询语言。操作关系型数据库的编程语言,定义了
一套操作关系型数据库统一
标准
。
2.1 SQL通用语法
在学习具体的SQL
语句之前,先来了解一下
SQL
语言的同于语法。
1). SQL语句可以单行或多行书写,以分号结尾。
2). SQL语句可以使用空格/
缩进来增强语句的可读性。
3). MySQL数据库的SQL
语句不区分大小写,关键字建议使用大写。
4). 注释:
单行注释:-- 注释内容
或
#
注释内容
多行注释:/* 注释内容 */
2.2 SQL分类
SQL
语句,根据其功能,主要分为四类:
DDL
、
DML
、
DQL
、
DCL
。
分类
|
全称
|
说明
|
DDL
|
Data Definition
Language
|
数据定义语言,用来定义数据库对象
(
数据库,表,字段)
|
DML
|
Data Manipulation
Language
|
数据操作语言,用来对数据库表中的数据进行增删改
|
DQL
|
Data Query Language
|
数据查询语言,用来查询数据库中表的记录
|
DCL
|
Data Control Language
|
数据控制语言,用来创建数据库用户、控制数据库的访问权限
|
2.3 DDL
Data Definition Language
,数据定义语言,用来定义数据库对象
(
数据库,表,字段
)
。
2.3.1 数据库操作
1).
查询所有数据库
show databases ;
2). 查询当前数据库
select database() ;
3).
创建数据库
create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序
规则 ] ;
4).
删除数据库
drop database [ if exists ] 数据库名 ;
5).
切换数据库
use 数据库名 ;
2.3.2 表操作
2.3.2.1 表操作-查询创建
1).
查询当前数据库所有表
show tables;
2).
查看指定表结构
desc 表名 ;
3).
查询指定表的建表语句
show create table 表名 ;
通过这条指令,主要是用来查看建表语句的,而有部分参数我们在创建表的时候,并未指定也会查询到,因为这部分是数据库的默认值,如:存储引擎、字符集等。
4).
创建表结构
CREATE TABLE 表名(
字段1 字段1类型 [ COMMENT 字段1注释 ],
字段2 字段2类型 [COMMENT 字段2注释 ],
字段3 字段3类型 [COMMENT 字段3注释 ],
......
字段n 字段n类型 [COMMENT 字段n注释 ]
) [ COMMENT 表注释 ] ;
注意: [...] 内为可选参数,最后一个字段后面没有逗号
2.3.2.2 表操作-数据类型
在上述的建表语句中,我们在指定字段的数据类型时,用到了int
,
varchar
,那么在
MySQL
中除了以上的数据类型,还有哪些常见的数据类型呢? 接下来,
我们就来详细介绍一下
MySQL
的数据类型。
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
1).
数值类型
类型
|
大小
|
有符号(SIGNED)范围
|
无符号(UNSIGNED)范围
|
描述
|
TINYINT
|
1byte
|
(-128
,
127)
|
(0
,
255)
|
小整数值
|
SMALLINT
|
2bytes
|
(-32768
,
32767)
|
(0
,
65535)
|
大整数值
|
MEDIUMINT
|
3bytes
|
(-8388608
,
8388607)
|
(0
,
16777215)
|
大整数值
|
INT/INTEGER
|
4bytes
|
(-2147483648
,
2147483647)
|
(0
,
4294967295)
|
大整数值
|
BIGINT
|
8bytes
|
(-2^63
,
2^63-1)
|
(0
,
2^64-1)
|
极大整数值
|
FLOAT
|
4bytes
|
(-3.402823466 E+38,
3.402823466351 E+38)
|
0
和
(1.175494351 E-
38
,
3.402823466 E+38)
|
单精度浮点数值
|
DOUBLE
|
8bytes
|
(-1.7976931348623157
E+308
,
1.7976931348623157
E+308)
|
0
和 (2.2250738585072014
E-308
,
1.7976931348623157
E+308)
|
双精度浮点数值
|
DECIMAL
|
依赖于
M(
精度
)
和
D(
标度
)的值
|
依赖于
M(
精度
)
和
D(
标度
)
的值
|
小数值(
精确定点数)
|
2).
字符串类型
类型
|
大小
|
描述
|
CHAR
|
0-255 bytes
|
定长字符串
(
需要指定长度
)
|
VARCHAR
|
0-65535 bytes
|
变长字符串
(
需要指定长度
)
|
TINYBLOB
|
0-255 bytes
|
不超过
255
个字符的二进制数据
|
TINYTEXT
|
0-255 bytes
|
短文本字符串
|
BLOB
|
0-65 535 bytes
|
二进制形式的长文本数据
|
TEXT
|
0-65 535 bytes
|
长文本数据
|
MEDIUMBLOB
|
0-16 777 215 bytes
|
二进制形式的中等长度文本数据
|
MEDIUMTEXT
|
0-16 777 215 bytes
|
中等长度文本数据
|
LONGBLOB
|
0-4 294 967 295 bytes
|
二进制形式的极大文本数据
|
LONGTEXT
|
0-4 294 967 295 bytes
|
极大文本数据
|
char 与
varchar
都可以描述字符串,
char
是定长字符串,指定长度多长,就占用多少个字符,和字段值的长度无关 。而varchar
是变长字符串,指定的长度为最大占用长度 。相对来说,
char
的性能会更高些。
3).
日期时间类型
类型
|
大小
|
范围
|
格式
|
描述
|
DATE
|
3
|
1000-01-01 至
9999-12-31
|
YYYY-MM-DD
|
日期值
|
TIME
|
3
|
-838:59:59
至
838:59:59
|
HH:MM:SS
|
时间值或持续
时间
|
YEAR
|
1
|
1901
至
2155
|
YYYY
|
年份值
|
DATETIME
|
8
|
1000-01-01 00:00:00
至
9999-12-31 23:59:59
|
YYYY-MM-DD HH:MM:SS
|
混合日期和时
间值
|
TIMESTAMP
|
4
|
1970-01-01 00:00:01
至
2038-01-19 03:14:07
|
YYYY-MM-DD
HH:MM:SS
|
混合日期和时
间值,时间戳
|
2.3.2.3 表操作-修改
1).
添加字段
ALTER TABLE 表名 ADD 字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];
案例
:
为emp
表增加一个新的字段
”
昵称
”
为
nickname
,类型为
varchar(20)
ALTER TABLE emp ADD nickname varchar(20) COMMENT '昵称';
2).
修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度);
3).
修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];
案例
:
将emp
表的
nickname
字段修改为
username
,类型为
varchar(30)
ALTER TABLE emp CHANGE nickname username varchar(30) COMMENT '昵称';
4).
删除字段
ALTER TABLE 表名 DROP 字段名;
案例
:
将emp
表的字段
username
删除
ALTER TABLE emp DROP username;
5).
修改表名
ALTER TABLE 表名 RENAME TO 新表名;
案例
:
将emp
表的表名修改为
employee
ALTER TABLE emp RENAME TO employee;
2.3.2.4 表操作-删除
1).
删除表
DROP TABLE [ IF EXISTS ] 表名;
可选项 IF EXISTS
代表,只有表名存在时才会删除该表,表名不存在,则不执行删除操作
(
如果不加该参数项,删除一张不存在的表,执行将会报错)
。
2).
删除指定表
,
并重新创建表
TRUNCATE TABLE 表名;
注意: 在删除表的时候,表中的全部数据也都会被删除。