MySQL数据库

大纲:

  1. 数据库的基础知识
  2. MySQL数据库安装与配置
  3. MySQL表操作
  4. MySQL基本查询
  5. MySQL高级查询
  6. MySQL写入操作
  7. MySQL基本函数
  8. MySQL的综合应用

一、 MySQL数据库安装与配置

1.1 数据库常见名词

  • 数据库系统: 数据库系统(DBMS) Database Management System :是指一个能为用户提供信息服务的系统。它实现了有组织地、动态地储存大量相关数据的功能,提供了数据处理和信息资源共享的便利手段。

  • 关系型数据库系统: 关系型数据库系统( RDBMS) Relational database management system :是指使用了关系模型的数据库系统。关系模型中,数据是分类存放的,数据之间可以有联系

  • 第一个关系型数据库 :1976年BM的 System R团队在出版的论文中阐述了关系模型,1979年 Oracle公司推出了首个关系型数据库成品。

  • 关系型数据的应用:关系型数据库被应用在非常多的领域,教育系统,商业系统,医疗系统,而且关系型数据库可以有效组织和管理大量复杂的数据,所以关系型数据库才是最重要的数据库产品。

1.2 主流的关系型数据库

  • DB2 :商业版,成本高,比如电信,金融领域
  • Oracle:按照CPU数据库收费
  • MySQL:开源免费
  • SQL Server:微软数据库

1.3 NoSQL数据库系统

  • 概念:NoSQL数据库指的是数据分类存放,但是数据之间没有关联关系的数据库系统

主流的NoSQL数据库

  • Redis 内存保存数据秒杀 ,微博
  • MemCache:相似于Redis,市场份额不是很大
  • MongoDB: 硬盘保存数据,知乎,简书
  • Ne04j:负责的人际关系

1.3 MySQL数据库安装与初始化

MySQL数据库: MySQL是应用最广泛、普及度最高的开源关系型数据库,MySQL由瑞典 MySQL AB公司开发,目前属于 Oracle旗下产品

MySQL 大事记

  • 1996 MySQL1.0 诞生
  • 1999 MySQL AB公司成立
  • 2000 MySQLL4.0发布
  • 2003 MySQL5.0发布

MySQL衍生版

  • Oracle
  • MariaDB
  • Percona

1.4 用户管理

MySQL客户端:Navicat,DBeaver

密码忘记重设置root密码

ALTER USER 'root'@'localhost' IDENTIFIED BY ′123456′
注意:本地'@'表示root登录方式,可以本地登录与远程登录。localhost是本地登录,如果加上%,代表可远程登录 

1.5 MySQL配置文件

MySQL配置文件

在my.ini文件中,我们可以设置各种 MySQL的配置,例如字符集、端口号、目录地址等等[client] #客户端信息配置信息
[mysql] #客户端信息配置信息
[mysqld] #数据库配置信息
 
[client]
port=3306   
        
[mysql]
no-beep

port=3306 #端口号
datadir=C:/ ProgramData/ MySQL/ MySQL Server8.0/Data #数据目录
default authentication_ plugin= caching sha2_ password #密码认证插件
default- storage- engine= INNODB #默认存储引擎
sq1-mode=" STRICT TRANS TABLES, NO ENGINE SUBSTITUTION" #开启严格模式
log- output=FILE #用文件记录日志
genera1-10g=0 #关闭日志输出
genera1_1 og file=" DESKTOP-HB42AU2.1og" #日志文件名称
slow- query-1og=1 #开启慢查询日志
query_1 og file=" DESKTOP-HB42AU2-s1ow.1og" #慢查询日志文件名称
long query time=10 #大于多少秒的执行SQL被记录在慢查询日志
log- error=" DESKTOP-HB42AU2.err” #错误日志名称
server-id=1 #数据库ID
lower case table names=1 #把表名转换成小写
secure-f1le-priv="C:/ ProgramData/MyQL/ lySQL Server8.0/ Uploads" #导入导出数据的目录地址
max connections=151 #最大连接数
table open cache=2000
tmp table size=16M
thread cache size=10#线程数量
myisam max sort file size=100G
myisam sort buffer size=8M
key buffer size=8M
read buffer size=0

二、数据库表的相关操作

  • 定义逻辑库,数据表
  • 什么是SQL语言:
  • SQL语言分类
  • SQL语句注意事项
  • SQL语句的注释

2.1 创建逻辑库

mysql> CREATE DATABASE 逻辑库名称 #创建逻辑库
mysql> SHOW DATABASES#展示逻辑库
mysql> DROP DATABSE 逻辑库名称 ;#展示逻辑库

mysql> CREATE DATABASE student #创建逻辑库
mysql> CREATE DATABASE drop #删除逻辑库

2.2 创建数据表

 CREATE TABLE数据表 (                        
    列名1 数据类型 [约束][ COMMENT注释],
    列名2 数据类型 [约束][ COMMENT注释],
    ...
 )[ COMMENT=注释];

CREATE TABLE student(
  	id INT UNSIGNED PRIMARY KEY,  #unsigned:无符号
    NAME VARCHAR(20) NOT NULL,
    sex CHAR(1) NOT NULL,
    birthday DATE NOT NULL,
    tel CHAR(11) NOT NULL,
    remark VARCHAR(200)
);

2.3 写入数据表

INSERT INTO student VALUES(1,"张三","男","1995-05-13","13383838438",NULL);
数据表的其他

SHOW tables;#查看逻辑表
DESC Student;#查看数据表
SHOW CREATE TABLE student,#查询建表语句
DROP TABLE Student #删除表文件

2.2 定义数据库语言:
数据类型
数字类型:
不精确的浮点数
字符串类型:
日期类型:

修改表结构

ALTER TABLE 表名称
ADD 列1 数据类型 [约束] [COMMENT注释],
ADD 列2 数据类型 [约束] [COMMENT注释];

ALTER TABLE student
ADD address VARCHAR(200) NOT NULL,
ADD home tel CHAR(11) NOT NULL;

修改字段类型和约束

ALTER TABLE 表名称
MODIFY 列1 数据类型 [约束] [COMMENT注释],
MODIFY 列2 数据类型 [约束] [COMMENT注释];

ALTER TABLE student
MODIFY home tel VARCHAR(20)NOT NULL;

修改字段名称

ALTER TABLE 表名称
CHANGE 列1 新列名1 数据类型 [约束] [COMMENT注释],
CHANGE 列2 新列名2 数据类型 [约束] [COMMENT注释];

ALTER TABLE student
CHANGE address home address VARCHAR(200)NOT NULL;

删除字段

ALTER TABLE 表名称
DROP 列1,
DROP 列2,

ALTER TABLE student
DROP home address,
DROP home tel;

2.3 数据库的范式与字段约束
数据库的范式:

字段约束

主键约束:

CREATE TABLE t_teacher(
id INT PRIMARY KEY AUTO INCREMENT,
);

非空约束

CREATE TABLE t_teacher(
id INT PRIMARY KEY AUTO_INCREMENT
name VARCHAR(200) NOT NULL,
married BooLeaN NOT NULL DEFAULT FALSE
);

唯一约束

CREATE TABLE t_teacher(

tel CHAR(11) NOT NULL UNIQUE
);

创建表

create table t_teacher(
id int unsigned primary key auto_increment,
name varchar(20) not null,
tel char(11) not null unique,
married boolean not null default false #默认未婚
);

外键约束

CREATE TABLE t_dept( #父表
deptno INT UNSIGNED PRIMARY KEY,
dname VARCHAR(20) NOT NULL UNIQUE,
tel CHAR(4) UNIQUE
);

CREATE TABLE t_temp( # 子表
empno INT UNSIGNED PRIMARY KEY,
ename VARCHAR(20) NOT NULL,
sex ENUM(“男”,“女”) NOT NULL, #enum枚举,只能选男或者女
deptno INT UNSIGNED,
hiredate DATE NOT NULL,
FOREIGN KEY (deptno) REFERENCES t_dept(deptno)
);
关联单词 references

外键约束的闭环问题

2.4 索引
数据排序的好处

CREATE TABLE表名称(
…,
INDEX索引名称,
…,
);

CREATE TABLE t message(
id INT UNSIGNED PRIMARY KEY,
content VARCHAR(200)NOT NULL,
type ENUM(“公告”,“通报”,“个人通知”)NOT NULL,
create_time TIMESTAMP NOT NULL,
INDEX idx_type (type)
);

如何添加与删除索引

CREATE INDEX 索引名称 ON 表名(字段);#增加索引
ALTER TABLE 表名称 ADD INDEX [索引名](字段);#增加索引

SHOW INDEX FROM 表名;#展示索引
DROP INDEX 索引名称 ON 表名;#删除索引

DROP INDEX idx_type ON t_message;
CREATE INDEX idx_type ON t message(type)i
SHOW INDEX FROM t message;
ALTER TABLE t message ADD INDEX idx_type(type);

索引的使用原则

3.1 数据库操作语言:普通查询
记录查询

SELECT * FROM t_emp;
SELECT empno, ename, sal FROM t_emp;

SELECT empno,sal * 12 as “income” FROM t_emp;

3.2 数据库操作语言:数据分页
数据分页

SELECT … FROM … LIMIT 起始位置,偏移量;
SELECT empno, ename FROM t_emp LIMIT 0,20;

数据分页的简写用法

如果LIMIT子句只有一个参数,它表示的是偏移量,起始值默认为0
SELECT empno, ename FROM t emp LIMIT 10;
SELECT empno, ename FROM t emp LIMIT 0, 10;

FROM -> SELECT -> LIMIT
3.3 数据操作语言:排序
结果集排序

​​​​​​​SELECT FROM ORDER BY 列名 [ASC|DESC]
SELECT ename,sal from t_emp ORDER BY sal

排序关键字

SELECT ename, sal FROM t_emp order BY hiredate desc;
多个排序字段

SELECT empno, ename, sal hiredate FROM t emp ORDER BY sal desc,hiredate Asc;

排序+分页

FROM - SELECT - ORDER BY - LIMIT
3.4 数据操作语言:去除重复记录
去除重复记录
如果我们需要去除重复的数据,可以使用 DISTINCT关键字来实现

SELECT DISTINCT 字段 FROM … ;
SELECT DISTINCT job FROM t emp;

注意事项:使用 DISTINCT的 SELECT子句中只能查询一列数据
如果查询多列,去除重复记录就会失效。
DISTINCT关键字只能在 SELECT 子句中使用一次

3.5 数据操作语言:条件查询
条件查询

SELECT FROM WHERE条件[AND|OR]条件 …;
SELECT empno, ename, sal FRom t emp WHERE deptno=10 AND sal >=2000;

SELECT empno, ename FROM t emp WHERE ename = FORD AND sal >=2000
SELECT empno, ename FROM t emp Where deptno =10 AND sal >=2000

FROM -> WHERE- >seLECT -> ORDER BY ->LIMIT
4. 数据库的高级查询
4.1数据操作语言:聚合函数
什么是聚合函数

SELECT SUM(ename) FROM t emp; SELECT SUM(sal) FROM t emp; WHERE deptno In (10, 20);

SELECT MAX (comm) FROM t empi

SELECT MAX (sal+IFNULL(comm, 0)) FROM t emp WhERE deptno IN(10,20)

SELECT MAX (LENGTH (ename)) FROM t emp

SELECT MIN (empno) FROM t emp; SELECT MIN (hiredate) FRoM t empi

SELECT AVG(sal+IFNULL(comm)) FROM t empi

SELECT COUNT(*) FROM t emp;

SELECT COUNT(*)FROM t emp WhERE deptno IN (10, 20) AND sal>=2000 AND DATEDIFF(NOW(hiredate)/365>=15

SELECT COUNT (* FROM t emp WHERE hiredate>=1985-01-01 AND Sal>AVG(sal)

4.2数据操作语言:分组查询
为什么要分组?

4.3数据操作语言: HAVING子句

4.4 表连接查询
从多张表中提取数据

4.5 子查询
子查询简介 - 子查询是一种査询中嵌套查询的语句 - 查询底薪超过公司平均底薪的员工的信息 子查询的分类 - 子查询可以写在三个地方: WHERE子句、FROM子句、 SELECT子句,但是只有FROM子句子查询是最可取的 WHERE子查询 - 这种子查询最简单,最容易理解,但是却是效率很低的子查询 - 查询底薪超过公司平均底薪的员工的信息 FROM子查询 - 这种子查询只会执行一次,所以查询效率很高 SELECT-子查询 - 这种子查询每输出一条记录的时候都要执行一次,查询效率很低

单行子查询和多行子查询

  1. MySQL对数据的基本操作
    5.1数据操作语言: INSERT语句

5.2 数据操作语言: UPDATE语句

5.5数据操作语言: DELECT 语句

  1. MySQL基本函数的使用
    6.1 MySQL的函数
    函数的定义:像编程语言利用函数封装业务功能一样,数据库也把一些复杂的功能封装到函数里,供使用者调用

6.2 数字函数

6.3 日期函数

6.4字符函数
字符函数

6.5条件函数

  1. MySQL的综合应用
    7.1事务机制
    避免写入直接操作数据文件

7.2 数据导入与导出

数据导出,导出的纯粹是业务数据
数据备份,备份的是数据文件、日志文件、索引文件等等

SQL文档
文本文档

mysqldump用来把业务数据导出成SQL文件,其中也包括了表结构
​​​​​​​mysqldump -uroot-p[ no-data] 逻辑库> 路径

Logo

一站式 AI 云服务平台

更多推荐