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 FilesMySQLMySQL 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:ProgramDataMySQL(是隐藏文件)

数据库服务的启动与登录

数据库服务的启动

# 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:ProgramDataMySQLSySQL Server 5.5data  我们自己创建的数据库所在的文件夹

数据库管理系统

# 数据库管理系统(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 通配符

 # 具体操作

原文地址:https://www.cnblogs.com/zhaochuming/p/13391671.html