MySQL 基础语法
数据库概述
数据的存储方式:
在 Java 中创建对象: Student s = new Student(1, "张三"),此时 该对象存储在内存中
学习了 I/O 流之后,能把数据保存到文件中
存储位置 | 优点 | 缺点 |
内存 | 速度快 | 不能永久保存,数据是临时的状态 |
文件 | 数据可以永久保存 | 操作数据不方便,难以单独查询某个数据 |
数据库 |
数据可以永久保存 查询速度快 对数据的管理更加便捷 |
占用资源高,需要购买相关软件 |
什么是数据库
# 存储和管理数据的仓库,英文单词:DataBase,简称:DB
# 本质上是一个文件系统,因此依旧是一文件的方式存放在服务器的电脑上的
# 所有的关系型数据库基本都可以使用通用的 SQL 语句进行管理
常见的数据库介绍
# MySQL:开源免费的数据库,小型的数据库,已经被 Oracle 收购了,MySql 6.x 版本也开始收费
# Oracle:收费的大型数据库,Oracle 公司产品
# DB2:IBM 公司的数据库产品,收费的,长应用在银行系统中
# SQL Server:Microsoft 公司的中型收费的数据库,C#、.net 等语言长使用
# SQLite:嵌入式的小型数据库,一般应用在手机端,如 Android
数据库的安装与卸载
安装过程分为两个部分:
# 文件的解压和复制过程,默认的安装目录为:C:\Program Files\MySQL\MySQL Server 版本号
# 安装好后必须对 MySQL 服务器进行配置,在 MySQL中管理员的名字为 root
数据库的安装
1、打开下载的 mysql 安装文件双击解压缩,运行 “mysql-5.5.40-win64.msi”
2、选择安装类型,有 typical(默认)、complete(完全)、custom(自定义)三个选项,这里选择 custom,按 next 键继续
3、点击 Browse,手动指定安装目录
4、确认先前的设置如果有误,就按 back 返回重做,随后一路next 和 install
5、安装完成后,对数据库进行配置
6、选择配置方式,Detailed Configuration(手动精确配置),Standard Configuration(标准配置),我们选择 手动配置,方便熟悉配置过程
7、选择服务器类型,Developer Machine(开发测试类,mysql 只占用很少的资源)、Server Machine(服务器类型,mysql 占用较多的资源)、Dedicated MySQL Server Machine(专门的数据库服务器,mysql 占用了所有可用资源)
8、选择 MySQL数据库的大致用途,Mutifunctional Database(通用的多功能型)、Transactional Database Only(服务器类型,专注于事务的处理)、Non-Transactional Database Only(非事务型处理,主要用作监控和计数,对 MyISAM 数据类型的支持仅限于 non-transactional)
9、选择网站并发连接数,同时连接的数目,Decision Support(DSS)/OLAP(20个左右)、Online Transaction Processing(OLTP)(500个左右)、Manual Setting(手动设置,自己输一个数)
10、是否启用 TCP/IP 连接,设定端口,如果不启用,就只能在自己的机器上访问 MySQL数据库了,在该页面上还可以选择 启用标准模式 Enable Strict Mode,这样 MySQL就不会允许细小的语法错误。如果是新手,间以取消标准模式以减少麻烦,但熟练 MySQL后,尽量使用标准模式,因为这可以降低有害数据进入数据库的可能性。
11、对 MySQL默认数据库语言编码进行设置(很重要),一般选择 utf8
12、选择是否将 MySQL 安装为 Windows服务,还可以指定 Service Name(服务标识名称),是否将 mysql 的 bin 目录加入到 Windows PATH 中(加入后,就可以直接使用 bin 下的文件,而不用指出目录名,比如连接, “mysql.exe -uusername -ppassword;”就可以了,不用指出 mysql.exe 的完整地址,很方便)
13、询问是否需要修改默认的 root用户(超级管理员)的密码。“Enable root access from remote machines(是否允 许 root 用户在其它的机器上登陆,如果要安全,就不要勾上,如果要方便,就勾上它)”。最后“Create An Anonymous Account(新建一个匿名用户,匿名用户可以连接数据库,不能操作数据,包括查询)”,一般就不用勾了,设置完毕,按“Next”继续。
14、确认设置无误后,按“Execute”使设置生效,即完成 MySQL的安装和配置
注意:设置完毕,按“Finish”后有一个比较常见的错误,就是不能“Start service”,一般出现在以前有安装 mysql 的服务器上,解决的办法,先保证以前安装的 mysql 服务器彻底卸载掉了;不行的话,检查是否按上面一步所说, 之前的密码是否有修改,照上面的操作;如果依然不行,将 mysql 安装目录下的 data 文件夹备份,然后删除,在 安装完成后,将安装生成的 data 文件夹删除,备份的 data 文件夹移回来,再重启 mysql 服务就可以了,这种情况 下,可能需要将数据库检查一下,然后修复一次,防止数据出错。
数据库的卸载
1、停止 Windows 的 MySQL服务,找到 “控制面板” -> “管理工具” -> “服务”,然后停止 MySQL后台服务(win10)
2、卸载 MySQL安装程序,win + s 搜索 “卸载程序”,搜索 “mysql”,卸载MySQL
3、删除 MySQL 安装目录下的所有文件
4、删除 C 盘下的 ProgramData 目录下的 MySQL目录,路径为:C:\ProgramData\MySQL(是隐藏文件)
数据库服务的启动与登录
数据库服务的启动
# Windows 服务方式启动:找到 “控制面板” -> “管理工具” -> “服务”,然后开启 MySQL后台服务。
* 或在cmd 下输入 services.msc,打开服务面板
# DOS命令方式启动:以管理员身份运行 命令提示符 或 Power Shell,输入 net start mysql
数据库的连接
# MySQL 是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的 root 账号,使用安装时设置的密码即可登录
# 语法格式1:mysql -u用户名 -p密码(此时密码为明文显示)
# 语法格式2:mysql -u用户名 -p
* 回车之后再输入密码,此时密码为 掩码形式
# 语法格式3:mysql -hip -u用户名 -p密码
* 127.0.0.1 代表本机 IP
# 语法格式4:mysql --host=ip --user=用户名 --password=密码
# 退出 MySQL:
* quit 或 exit 或 ctrl + C键
SQLyog 图形化工具连接数据库
# 简介:SQLyog 是业界著名的 Webyog 公司出品的一款简洁高效、功能强大的图形化 MySQL 数据库管理工具,使用 SQLyog 可以快速直观的让使用者从世界的任何角落通过网络来维护远端的 MySQL 数据库
# 使用 SQLyog 登录数据库
MySQL 目录结构
MySQL 的目录结构 | 描述 |
bin<目录> | 所有的 mysql 的可执行文件,如:mysql.exe |
MySQLInstanceConfig.exe | 数据库的配置向导,在安装时出现的内容 |
data<目录> | 存放数据库的日志文件 |
my.ini 文件 | mysql 的配置文件,一般不建议去修改 |
C:\ProgramData\MySQL\SySQL Server 5.5\data\ | 我们自己创建的数据库所在的文件夹 |
数据库管理系统
# 数据库管理系统(DataBase Management System, DBMS)
* 指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行同一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。
# 数据库管理程序(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体 User 的数据。
* 数据库管理系统、数据库和表的关系如图所示:
SQL 的概念
# Structured Query Language 结构化查询语言
SQL 的作用
# 是一种所有关系型数据库的查询规范,不同的数据库都支持
# 通用的数据库操作语言,可以用在不同的数据库中
# 不同的数据库SQL 语言有一些区别
SQL 语句分类
# Data Definition Language(DDL 数据定义语言)
* 用来定义数据库对象:数据库、表、列等。关键字:CREATE、DROP、ALTER 等
# Data Manipulation Language(DML 数据操纵语言)
* 用来对数据库中表的数据进行增删改。关键字:INSERT、DELETE、UPDATE 等
# Data Query Language(DQL 数据查询语言)
* 用来查询数据库中表的记录。关键字:SELECT、WHERE 等
# Data Control Language(DCL 数据控制语言)
* 用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT、REVOKE 等
MySQL 的语法
# SQL语句可以单行或多行书写,每条语句以分号结尾,如果在 SQLyog中不是必须加的
# SQL 中不区分大小写,关键字中认为 大写和小写是一样的
# 3种注释方式
注释的语法 | 说明 |
-- 空格 | 单行注释 |
/* */ | 多行注释 |
# | 单行注释,MySQL 特有 |
DDL 操作数据库
# 操作数据库(CRUD)
* C(Create):创建
* R(Retrieve):查询
* U(Update):修改
* D(Delete):删除
创建数据库
# 创建数据库的语法:
* CREATE DATABASE 数据库名; (创建数据库)
* CREATE DATABASE IF NOT EXISTS 数据库名; (判断数据库是否已经存在,不存在则创建数据库)
* CREATE DATABASE 数据库名 CHARACTER SET 字符集; (创建数据库并指定字符集)
# 具体操作
查看数据库
# 语法:
* SHOW DATABASES; (在 SQLyog 中按 tab 键可以自动补全关键字)
# 查看某个数据库的创建语句:
* SHOW CREATE DATABASE 数据库名;
修改数据库
# 修改数据库默认的字符集
* 语法:
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
* 具体操作
将 db3 数据库的字符集改为 utf8
删除数据库
# 语法:
* DROP DATABASE 数据库名;
# 具体操作:
* 删除 db2 数据库(每行 SQL 语句需要选中再执行,可以按 F9)
使用数据库
# 查看正在使用的数据库
* 语法:SELECT DATABASE(); -- 使用的一个 mysql 中的全局函数
# 使用 / 切换数据库
* 语法:USE 数据库名;
# 具体操作:
面试题
# 问:在 MySQL 数据库软件中,有如下三个数据库:test1,test2,test3;登录数据库后,输入语句:select database test2; 运行结果是什么?
# 答:这是一条错误的语句,如果要选中一个数据库,应使用 USE test2;
DDL 操作表结构
创建表
# 创建表的格式:
* CREATE TABLE 表名 (
字段名1 字段类型1,
字段名2 字段类型2
);
* 注意:最后一列不需要加逗号
# 关键字说明:
* CREATE:创建
* TABLE:表
# 复制表
* CREATE TABLE 表名 LIKE 被复制的表名;
MySQL 数据类型
# 常用类型
类型 | 描述 |
int | 整型 |
double | 浮点型( m, n ) m:小数一共几位 n:小数点后保留几位 |
varchar | 字符串型( m ) m:最多能存储几个字符 |
date | 日期类型,格式为 yyyy-MM-dd,只有年月日,没有时分秒 |
# 详细数据类型
分类 | 类型名称 | 类型说明 |
整数 | tinyInt | 微整型:很小的整数(占8位二进制位) |
smallInt | 小整形:小的整数(占16位二进制) | |
mediumInt | 中整型:中等长度的整数(占24位二进制) | |
int(integer) | 整型:整数类型(占32位二进制) | |
小数 | float | 单精度浮点型,占4个字节 |
double | 双精度浮点型,占8个字节 | |
日期 | time | 表示时间类型 |
date | 表示日期类型 | |
datetime | 同时可以表示日期和时间类型 | |
timestamp | 时间戳类型,如果将来不给这个字段赋值则默认使用当前的系统时间来自动赋值 | |
字符串 | char(m) | 固定长度的字符串,无论使用几个字符都占满全部,M 为0~255 之间的整数 |
varchar(m) | 可变长度的字符串,使用几个字符就占用几个,M 为0~65535之间的整数 | |
大二进制 | tinyblob | 允许长度为 0~255字节 |
blob | 允许长度为 0~65535字节 | |
mediumblob | 允许长度为 0~167772150字节 | |
longblob | 允许长度为 0~4294967295字节 | |
大文本 | tinytext | 允许长度为 0~255字节 |
text | 允许长度为 0~65535字节 | |
mediumtext | 允许长度为 0~167772150字节 | |
longtext | 允许长度为 0~4294967295字节 |
# 具体操作:
* 创建 student 表包含 id,name,birthday 字段
查看表
# 查看某个数据库中的所有表
* SHOW TABLES;
# 查看表的结构
* DESC 表名;
# 查看创建表的 SQL 语句
* SHOW CREATE TABLE 表名;
# 具体操作:
* 查看 day21 数据库中的所有表
* 查看 student 表的结构
* 查看 student 的创建表 SQL 语句
结果:( ‘ 号存在的目的是为了避免关键字的冲突)
快速创建一个表结构相同的表
# 语法
* CREATE TABLE 新表名 LIKE 旧表名;
# 具体操作:
* 创建 s1 表,s1 表结构和 student 表结构相同
删除表
# 直接删除表
* DROP TABLE 表名;
# 判断是否存在,如果存在,就删除表
* DROP TABLE IF EXISTS 表名;
# 具体操作:
修改表结构
# 添加表列 ADD
* ALTER TABLE 表名 ADD 列名 类型;
# 修改列类型 MODIFY
* ALTER TABLE 表名 MODIFY 列名 新的类型;
# 修改列名 CHANGE
* ALTER TABLE 表明 CHANGE 旧列名 新列名 类型;
# 删除列 DROP
* ALTER TABLE 表名 DROP 列名;
# 修改表名
* RENAME TABLE 表名 TO 新表名;
# 修改表的字符集 character set
* ALTER TABLE 表名 character set 字符集;
DML 操作表中的数据
插入记录
# 格式:
# 插入全部字段
* 所有的字段名都写出来
* 不写字段名
# 插入部分数据(没有添加数据的字段会自动置为 NULL)
# 具体操作(除了数字类型,别的都需要用引号包围)
* 向学生表中插入所有的列
* 向表中插入所有字段
DOS 命令窗口操作数据乱码问题的解决
# 当我们使用 DOS命令行进行 SQL语句操作时会有中文出现乱码
# insert 注意事项:
* 插入的数据应与字段的数据类型相同
* 数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中
* 在values中列出的数据位置必须与被加入的列的排列位置相对应
* 字符和日期型数据应包含在单引号中,MySQL中也可以使用双引号作为分隔符
* 不指定列或者使用 NULL,表示插入空值
# 乱码产生的原因
# 查看 MySQL 内部设置的编码
* 查看包含 character 开头的全局变量
show variables like 'character%';
* 执行效果
# 解决方案
* 修改 client、connection、results 的编码为 GBK,保证和 DOS命令行编码保持一致
# 注意,退出 DOS 命令行就失效了,需要每次都配置
蠕虫复制
# 定义:将一张已经存在的表中的数据复制到另一张表中
# 语法格式:
* 将表2 中的所有的列复制到表1中
* 只复制部分列
# 具体操作
* 创建 student2 表,其结构和 student表一样
更新表记录
# 不带条件修改数据(修改所有记录在该列上的值)
# 带条件修改数据
# 具体操作
删除表记录
# 不带条件删除数据(删除表中所有的记录)
# 带条件删除数据
# 使用 truncate 删除表中的所有记录
* 注意,truncate 和 delete 的区别:truncate 相当于删除表的结构,再创建一张表;而 delete 是逐条记录删除,效率低。
# 具体操作
DQL 查询表中的数据
查询不会对数据库中的数据进行修改,只是一种显示数据的方式
简单查询
# 查询表中所有行和列的数据(使用 * 表示所有的列)
# 查询指定列
使用指定列的别名进行查询
# 使用关键字 AS
* 好处:显示的时候使用新的名字,并不修改表的结构
# 语法
* 对列指定别名
SELECT 字段名1 AS 别名1, 字段名2 AS 别名2 ... FROM 表名;
* 对列和表同时指定别名
SELECT 字段名1 AS 别名1, 字段名2 AS 别名2 ... FROM 表名 AS 表别名;
# 具体操作(使用表别名的原因:用于多表查询操作)
清除重复值
# 查询指定列并且结果不出现重复数据
* SELECT DISTINCT 字段名 FROM 表名;
# 具体操作:
* 查询学生来自哪些地方
查询结果参与运算
# 某列数据和固定值运算
* SELECE 列名1 + 固定值 FROM 表名;
# 某列数据和其他列数据参与运算
* SELECT 列名1 + 列名2 FROM 表名;
* 注意:参与运算的必须是数值类型
# 具体实现:
* 准备数据,添加数学,英语成绩列,给每条记录添加对应的数学和英语成绩,查询的时候将数学和英语的成绩相加
条件查询
# 为什么要条件查询
* 如果没有查询条件,则每次查询所有的行。实际应用中,一般要指定查询的条件,对记录进行过滤
# 条件查询的语法
* SELECT 字段名 FROM 表名 WHERE 条件;
* 流程:取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回
# 数据准备
* 创建一个学生表,包含如下列:
# 运算符
# 具体操作
# 逻辑运算符
# 具体操作
# in 关键字
* SELECT 字段名 FROM 表名 WHERE 字段 IN(数据1,数据2 ... );
* 注意:in 里面的每个数据都会作为一次条件,只要满足条件的就会显示
# 具体操作
# 范围查询
* BETWEEN 值1 AND 值2
* 注意:表示从 值1 到 值2,包含头和尾
# 具体操作
* 查询 English 成绩大于等于75,且小于等于90 的学生
# like 关键字
* SELECT 字段名 FROM 表名 WHERE 字段名 LIKE ‘通配符字符串’;
# MySQL 通配符
# 具体操作