MySQL从安装到精通(单表)
目录
MySQL(结构化查询语言)单表基础
简介:
数据库的三层结构-破除数据库的神秘面纱
什么是关系型数据库
常见的关系性数据库
*SQL的分类*
My SQL的安装
可视化工具的使用(SQLyog永久有效)
数据库的使用
连接到数据库
创建数据库
语法:
查看数据库
*修改数据库*
语法:
*删除数据库*
语法:
*其他数据库操作*
切换数据库:use 数据库名称;
查当前正在使用的数据库:
备份恢复数据库
备份:
恢复数据库
SQL对数据库表进行操作
SQL创建表
语法:
约束
SQL删除表
删除表
SQL修改表
修改表:添加列
修改表:修改列类型,长度和约束
修改表:删除列
修改表:修改列名称
修改表:修改表名
修改表:修改表的字符集
SQL对数据库表的记录进行操作(重点)
SQL添加表的记录
SQL修改表的记录
语法:
按条件修改数据
按条件修改多个列
SQL删除表的记录
语法:
删除表中的所有记录
删除表中的记录有两种做法:
SQL查看表的记录(重点)
条件查询
排序查询
分组统计查询
字符串相关函数
数学相关函数
时间日期相关函数 date.sql
加密和系统函数 pwd.sql
流程控制函数
分页查询
数据分组的总结
MySQL(结构化查询语言)单表基础
简介:
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。RDBMS即关系数据库管理系统(Relational Database Management System)的特点:
数据以表格的形式出现
每行为各种记录名称
每列为记录名称所对应的数据域
许多的行和列组成一张表单
若干的表单组成database
数据库的三层结构-破除数据库的神秘面纱
所谓安装mysql数据库,就是在主机安装一个数据库管理系统(DBMS),这个管理程序可以管理多个数据库。
一个数据库中可以创建多个表,以保存数据(信息)。
数据库管理系统(DBMS),数据库和表的关系如图所示:
什么是关系型数据库
关系型数据库存放的是实体之间的关系
常见的关系性数据库
MySQL
Oracle
SQLServer
DB2
SyBase
*SQL的分类*
*DDL:数据定义语言*
create,drop,alter..
*DCL:数据控制语言*
grant,if…
*DML:数据操纵语言*
insert,update,delete…
*DQL:数据查询语言*
select
My SQL的安装
[MySQL安装配置教程(超级详细、保姆级)SoloVersion的博客-CSDN博客mysql安装配置教程](https://blog.csdn.net/SoloVersion/article/details/123760428)
可视化工具的使用(SQLyog永久有效)
链接:百度网盘 请输入提取码 提取码:hong
xn.txt中有破解序列号
数据库的使用
连接到数据库
mysql -u 用户名 -p
回车出现密码,输入密码连接成功
创建数据库
语法:
create database 数据库名称 [character set 字符集 collate 字符集校对规则];
查看数据库
查看服务器所有的数据库:
show databases;
查看某个数据库的定义信息:
show create database 数据库名称;
*修改数据库*
语法:
alter database 数据库名称 character set 字符集 collate 校对规则;
*删除数据库*
语法:
drop database 数据库名称;
*其他数据库操作*
切换数据库:use 数据库名称;
查当前正在使用的数据库:
备份恢复数据库
备份:
要在DOS下执行mysqldump指令其实在mysql安装目录\bin 这个备份的文件,即使对应的sql语句
mysqldump -u 用户名 -p -B 数据库1 数据库2.... > 文件名.sql
mysqldump -u root -p -B db1 > d:\\hong.sql
恢复数据库
(注意:进入Mysql命令在执行) Source 文件名.sql
source d:\\hong.sql
SQL对数据库表进行操作
SQL创建表
语法:
create table 表名称(字段名称 字段类型(长度) 约束,字段名称 字段类型(长度) 约束…);
字段类型
一个实体对应一个表,一个实体属性对应表的一个字段。
Java中的类型 MySQL中的类型
byte/short/int/long tinyint/smallint/int/bigint
float float
double double
boolean bit
char/String char和varchar类型
char和varchar的区别:
* char代表是固定长度的字符或字符串。
* 定义类型char(8),向这个字段存入字符串hello,那么数据库使用三个空格将其补全。
* varchar代表的是可变长度的字符串。
* 定义类型varchar(8), 向这个字段存入字符串hello,那么存入到数据库的就是hello。
Date date/time/datetime/timestamp
datetime和timestamp区别
* datetime就是既有日期又有时间的日期类型,如果没有向这个字段中存值,数据库使用null存入到数据库中
* timestamp也是既有日期又有时间的日期类型,如果没有向这个字段中存值,数据库使用当前的系统时间存入到数据库中。
File BLOB/TEXT
约束
约束作用:保证数据的完整性
单表约束分类:
主键约束:primary key 主键约束默认就是唯一 非空的
唯一约束:unique
非空约束:not null
建表语句:
create database db1;
use db1;
CREATE TABLE `user`(id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20) UNIQUE,`password` VARCHAR(20),age INT,birthday DATE
);
SQL删除表
删除表
语法:drop table 表名;
SQL修改表
修改表:添加列
alter table 表名 add 列名 类型(长度) 约束;
修改表:修改列类型,长度和约束
alter table 表名 modify 列名 类型(长度) 约束;
修改表:删除列
alter table 表名 drop 列名;
修改表:修改列名称
alter table 表名 change 旧列名 新列名 类型(长度) 约束;
修改表:修改表名
rename table 表名 to 新的表名;
修改表:修改表的字符集
alter table 表名 character set 字符集;
SQL对数据库表的记录进行操作(重点)
SQL添加表的记录
语法:
向表中插入某些列:insert into 表名 (列名1,列名2,列名3…) values (值1,值2,值3…)
向表中插入所有列:insert into 表名 values (值1,值2,值3…);
注意事项
1.值的类型与数据库中表列的类型一致。
2.值的顺序与数据库中表列的顺序一致。
3.值的最大长度不能超过列设置最大长度。
4.值的类型是字符串或者是日期类型,使用单引号引起来。
添加记录
添加某几列
insert into user (id,username,password) values (null,'aaa','123');
添加所有列
insert into user values (null,'bbb','123',23,'1993-09-01');
添加中文记录
insert into user values (null,'张三','123',23,'1993-09-01');
直接向数据库中插入中文记录会出现错误!!!
解决方法:
show variables like '%character%'; --查看数据库中与字符集相关参数:
需要将MySQL数据库服务器中的客户端部分的字符集改为gbk。
找到MySQL的安装路径:my.ini文件,修改文件中[client]下的字符集
* 重新启动MySQL的服务器
services.msc
SQL修改表的记录
语法:
update 表名 set 列名=值,列名=值 [where 条件];
注意事项
1.值的类型与列的类型一致。
2.值的最大长度不能超过列设置的最大长度。
3.字符串类型和日期类型添加单引号。
修改某一列的所有值
update user set password = 'abc';
按条件修改数据
update user set password = 'xyz' where username = 'bbb';
按条件修改多个列
update user set password='123',age=34 where username='aaa';
SQL删除表的记录
语法:
delete from 表名 [where 条件];
注意事项
1.删除表的记录,指的是删除表中的一行记录。
2.删除如果没有条件,默认是删除表中的所有记录。
删除某一条记录
delete from user where id = 2;
删除表中的所有记录
delete from user;
删除表中的记录有两种做法:
delete from user;
删除所有记录,属于DML语句,一条记录一条记录删除。事务可以作用在DML语句上的
truncate table user;
删除所有记录,属于DDL语句,将表删除,然后重新创建一个结构一样的表。事务不能控制DDL的
SQL查看表的记录(重点)
基本查询
语法:select [distinct] *|列名 from 表 [条件];
环境的准备:
create table exam(
• id int primary key auto_increment,
• name varchar(20),
• english int,
• chinese int,
• math int
);
insert into exam values (null,'张三',85,74,91);
insert into exam values (null,'李四',95,90,83);
insert into exam values (null,'王五',85,84,59);
insert into exam values (null,'赵六',75,79,76);
insert into exam values (null,'田七',69,63,98);
insert into exam values (null,'李老八',89,90,83);
查询所有学生考试成绩信息
select * from exam;
查询所有学生的姓名和英语成绩
select name,english from exam;
查询英语成绩信息(不显示重复的值)
select distinct english from exam;
查看学生姓名和学生的总成绩
select name,english+chinese+math from exam;
别名查询
select name,english+chinese+math as sum from exam;
条件查询
使用where子句
> , < , >= , <= , <> ,=
like:模糊查询
in:范围查询
条件关联:and , or ,not
查询李四学生的成绩:
select * from exam where name = '李四';
查询名称叫李四学生并且英文大于90分
select * from exam where name = '李四' and english > 90;
查询姓李的学生的信息
like可以进行模糊查询,在like子句中可以使用或者%作为占位符。只能代表一个字符,而%可以代表任意个字符。
* like ‘李_’ :名字中必须是两个字,而且是姓李的。
* like ‘李%’ :名字中姓李的学生,李子后可以是1个或任意个字符。
* like ‘%四’ :名字中以四结尾的。
* like ‘%王%’ :只要名称中包含这个字就可以。
select * from exam where name like '李%';
查询英语成绩是69,75,89学生的信息
select * from exam where english in (69,75,89);
排序查询
使用order by 字段名称 asc/desc;
查询学生信息,并且按照语文成绩进行排序:
select * from exam order by chinese;
查询学生信息,并且按照语文成绩倒序排序:
select * from exam order by chinese desc;
查询学生信息,先按照语文成绩进行倒序排序,如果成绩相同再按照英语成绩升序排序
select * from exam order by chinese desc,english asc;
查询姓李的学生的信息,按照英语成绩降序排序
select * from exam where name like '李%' order by english desc;
分组统计查询
聚合函数使用
sum();
获取所有学生的英语成绩的总和:
select sum(english) from exam;
获取所有学生的英语成绩和数学成绩总和:
select sum(english),sum(math) from exam;
查询姓李的学生的英语成绩的总和
select sum(english) from exam where name like '李%';
查询所有学生各科的总成绩:
select sum(english)+sum(chinese)+sum(math) from exam;
select sum(english+chinese+math) from exam;
与上面的语句有什么不同?
上面的语句是按照列的方式统计,英语成绩总和+语文成绩总和+数学成绩总和。
下面的语句先计算英语+数学+语文然后再求和。
使用ifnull的函数
count();
获得学生的总数
select count(*) from exam;
获得姓李的学生的个数
select count(*) from exam where name like '李%';
max();
获得数学成绩的最高分:
select max(math) from exam;
min();
获得语文成绩的最小值
select min(chinese) from exam;
avg();
获取语文成绩的平均值
select avg(chinese) from exam;
分组查询
语法:使用group by 字段名称;
环境准备
create table orderitem(
• id int primary key auto_increment,
• product varchar(20),
• price double
);
insert into orderitem values (null,'电视机',2999);
insert into orderitem values (null,'电视机',2999);
insert into orderitem values (null,'洗衣机',1000);
insert into orderitem values (null,'洗衣机',1000);
insert into orderitem values (null,'洗衣机',1000);
insert into orderitem values (null,'冰箱',3999);
insert into orderitem values (null,'冰箱',3999);
insert into orderitem values (null,'空调',1999);
按商品名称统计,每类商品所购买的个数:
select product,count(*) from orderitem group by product;
按商品名称统计,每类商品所花费的总金额:
select product,sum(price) from orderitem group by product;
按商品名称统计,统计每类商品花费的总金额在5000元以上的商品
*** where的子句后面不能跟着聚合函数。如果现在使用带有聚合函数的条件过滤(分组后条件过滤)需要使用一个关键字having
select product,sum(price) from orderitem group by product having sum(price) > 5000;
按商品名称统计,统计每类商品花费的总金额在5000元以上的商品,并且按照总金额升序排序
select product,sum(price) from orderitem group by product having sum(price) > 5000 order by sum(price) asc;
总结
**S(select)****…** **F(from)****…****W(where)****…****G(group by)****…****H(having)****…****O(order by);**
字符串相关函数
数学相关函数
``-- 演示数学相关函数
-- ABS(num)
绝对值
SELECT ABS(-10) FROM DUAL;
-- BIN (decimal_number )十进制转二进制
SELECT BIN(10) FROM DUAL;
-- CEILING (number2 ) 向上取整, 得到比 num2 大的最小整数
SELECT CEILING(-1.1) FROM DUAL;
-- CONV(number2,from_base,to_base)
进制转换
-- 下面的含义是 8 是十进制的 8, 转成 2 进制输出
SELECT CONV(8, 10, 2) FROM DUAL;
-- 下面的含义是 8 是 16 进制的 8, 转成 2 进制输出
SELECT CONV(16, 16, 10) FROM DUAL;
-- FLOOR (number2 )
向下取整,得到比 num2 小的最大整数
SELECT FLOOR(-1.1) FROM DUAL;
-- FORMAT (number,decimal_places )
保留小数位数(四舍五入)
SELECT FORMAT(78.125458,2) FROM DUAL;
-- HEX (DecimalNumber ) 转十六进制
-- LEAST (number , number2 [,..]) 求最小值
SELECT LEAST(0,1, -10, 4) FROM DUAL;
-- MOD (numerator ,denominator )
求余
SELECT MOD(10, 3) FROM DUAL;
-- RAND([seed])
RAND([seed]) 返回随机数 其范围为 0 ≤ v ≤ 1.0
-- 老韩说明
-- 1. 如果使用 rand() 每次返回不同的随机数 ,在 0 ≤ v ≤ 1.0
-- 2. 如果使用 rand(seed) 返回随机数, 范围 0 ≤ v ≤ 1.0, 如果 seed 不变,
\--
该随机数也不变了
SELECT RAND() FROM DUAL;
SELECT CURRENT_TIMESTAMP() FROM DUAL;
时间日期相关函数 date.sql
`-- 日期时间相关函数
-- CURRENT_DATE ( )
当前日期
SELECT CURRENT_DATE() FROM DUAL;
-- CURRENT_TIME ( )当前时间
SELECT CURRENT_TIME() FROM DUAL;
-- CURRENT_TIMESTAMP ( ) 当前时间戳
SELECT CURRENT_TIMESTAMP() FROM DUAL;
-- 创建测试表 信息表
CREATE TABLE mes(
id INT ,
content VARCHAR(30),
send_time DATETIME);
-- 添加一条记录
INSERT INTO mes
VALUES(1, '北京新闻', CURRENT_TIMESTAMP());
INSERT INTO mes VALUES(2, '上海新闻', NOW());
INSERT INTO mes VALUES(3, '广州新闻', NOW());
SELECT * FROM mes;
SELECT NOW() FROM DUAL;
-- 上应用实例
-- 显示所有新闻信息,发布日期只显示 日期,不用显示时间.
SELECT id, content, DATE(send_time)
FROM mes;
-- 请查询在 10 分钟内发布的新闻, 思路一定要梳理一下.
SELECT *
FROM mes
WHERE DATE_ADD(send_time, INTERVAL 10 MINUTE) >= NOW()
SELECT *
FROM mes
WHERE send_time >= DATE_SUB(NOW(), INTERVAL 10 MINUTE)
-- 请在 mysql 的 sql 语句中求出 2011-11-11 和 1990-1-1 相差多少天
SELECT DATEDIFF('2011-11-11', '1990-01-01') FROM DUAL;
-- 请用 mysql 的 sql 语句求出你活了多少天? [练习] 1986-11-11 出生
SELECT DATEDIFF(NOW(), '1986-11-11') FROM DUAL;
-- 如果你能活 80 岁,求出你还能活多少天.[练习] 1986-11-11 出生
-- 先求出活 80 岁 时, 是什么日期 X
-- 然后在使用 datediff(x, now()); 1986-11-11->datetime
-- INTERVAL 80 YEAR : YEAR 可以是 年月日,时分秒
-- '1986-11-11' 可以 date,datetime timestamp
SELECT DATEDIFF(DATE_ADD('1986-11-11', INTERVAL 80 YEAR), NOW())
FROM DUAL;
SELECT TIMEDIFF('10:11:11', '06:10:10') FROM DUAL;
-- YEAR|Month|DAY| DATE (datetime )
SELECT YEAR(NOW()) FROM DUAL;
SELECT MONTH(NOW()) FROM DUAL;
SELECT DAY(NOW()) FROM DUAL;
SELECT MONTH('2013-11-10') FROM DUAL;
-- unix_timestamp() : 返回的是 1970-1-1 到现在的秒数
SELECT UNIX_TIMESTAMP() FROM DUAL;
-- FROM_UNIXTIME() : 可以把一个 unix_timestamp 秒数[时间戳],转成指定格式的日期
-- %Y-%m-%d 格式是规定好的,表示年月日
-- 意义:在开发中,可以存放一个整数,然后表示时间,通过 FROM_UNIXTIME 转换
\--
SELECT FROM_UNIXTIME(1618483484, '%Y-%m-%d') FROM DUAL;
SELECT FROM_UNIXTIME(1618483100, '%Y-%m-%d %H:%i:%s') FROM DUAL;
SELECT * FROM mysql.user \G
加密和系统函数 pwd.sql
`-- 演示加密函数和系统函数
-- USER() 查询用户
-- 可以查看登录到 mysql 的有哪些用户,以及登录的 IP
SELECT USER() FROM DUAL; -- 用户@IP 地址
-- DATABASE()查询当前使用数据库名称
SELECT DATABASE();
-- MD5(str) 为字符串算出一个 MD5 32 的字符串,常用(用户密码)加密
-- root 密码是 hsp -> 加密 md5 -> 在数据库中存放的是加密后的密码
SELECT MD5('hsp') FROM DUAL;
SELECT LENGTH(MD5('hsp')) FROM DUAL;
-- 演示用户表,存放密码时,是 md5
CREATE TABLE hsp_user
(id INT ,
name VARCHAR(32) NOT NULL DEFAULT '',
pwd CHAR(32) NOT NULL DEFAULT '');
INSERT INTO hsp_user
VALUES(100, '韩顺平', MD5('hsp'));
SELECT * FROM hsp_user; -- csdn
SELECT * FROM hsp_user -- SQL 注入问题
WHERE name='韩顺平' AND pwd = MD5('hsp')
-- PASSWORD(str) -- 加密函数, MySQL 数据库的用户密码就是 PASSWORD 函数加密
SELECT PASSWORD('hsp') FROM DUAL; -- 数据库的 *81220D972A52D4C51BB1C37518A2613706220DAC
-- select * from mysql.user \G
从原文密码 str 计算并返回密码字符串
-- 通常用于对 mysql 数据库的用户密码加密
-- mysql.user 表示 数据库.表
SELECT * FROM mysql.user
流程控制函数
`-- 1. 查询 emp 表, 如果 comm 是 null , 则显示 0.0 \-- 老师说明,判断是否为 null 要使用 is null, 判断不为空 使用 is not SELECT ename, IF(comm IS NULL , 0.0, comm) FROM emp; SELECT ename, IFNULL(comm, 0.0) FROM emp; -- 2. 如果 emp 表的 job 是 CLERK 则显示 职员, 如果是 MANAGER 则显示经理 \-- 如果是 SALESMAN 则显示 销售人员,其它正常显示 SELECT ename, (SELECT CASE WHEN job = 'CLERK' THEN '职员' WHEN job = 'MANAGER' THEN '经理' WHEN job = 'SALESMAN' THEN '销售人员' ELSE job END) AS 'job' FROM emp
分页查询
`-- 分页查询 -- 按雇员的 id 号升序取出, 每页显示 3 条记录,请分别显示 第 1 页,第 2 页,第 3 页 -- 第 1 页 SELECT * FROM emp ORDER BY empno LIMIT 0, 3; -- 第 2 页 SELECT * FROM emp ORDER BY empno LIMIT 3, 3; -- 第 3 页 SELECT * FROM emp ORDER BY empno LIMIT 6, 3;
数据分组的总结
MySQL从安装到精通(单表)相关推荐
- mysql 关键字模糊查询_MySQL单表多关键字模糊查询的实现方法
在最近的一个项目需要实现在MySQL单表多关键字模糊查询,但这数个关键字并不一定都存在于某个字段.例如现有table表,其中有title,tag,description三个字段,分别记录一条资料的标题 ...
- MySQL之DML操作基础--单表查询
目录 1.INSERT语句 2.REPLACE语句 REPLACE与INSERT语句区别: 3.UPDATE语句 4.DELETE和TRUNCATE语句 DROP.TRUNCATE.DELETE的区别 ...
- mysql ibd文件还原_MySQL单表ibd文件恢复方法详解
前言: 随着innodb的普及,innobackup也成为了主流备份方式.物理备份对于新建slave,全库恢复的需求都能从容应对. 但当面临单表数据误删,或者单表误drop的情况,如果使用物理全备进行 ...
- MySQL第三次作业-----单表查询和多表查询
文章目录 一.单表查询 1.1创建表单过程 1.2作业要求 1.显示所有职工的基本信息. 2.查询所有职工所属部门的部门号,不显示重复的部门号. 3.求出所有职工的人数. 4.列出最高工和最低工资. ...
- MySQL(一)——安装、创建数据库表、DML语言
文章目录 1. 简述 2. 安装教程 3. 操作数据库 3.1 操作数据库的基本命令 3.2 数据库的列类型 3.3 数据库的字段属性(重点) 3.4 创建数据库表(重点) 3.5 数据表的类型 3. ...
- HIVE的安装配置、mysql的安装、hive创建表、创建分区、修改表等内容、hive beeline使用、HIVE的四种数据导入方式、使用Java代码执行hive的sql命令
1.上传tar包 这里我上传的是apache-hive-1.2.1-bin.tar.gz 2.解压 mkdir -p /home/tuzq/software/hive/ tar -zxvf apach ...
- MySql学习【一】mysql的安装,操作数据库/表/查询表中数据/mysql日期计算
1.安装和连接数据库的注意事项 1.在mac电脑上安装mysql,官网下载即可. 2.mysql返回的执行行数和时间,时间并不精确.其中时间是指挂钟时间 [返回进程启动到调用函数时所经过的CPU时钟计 ...
- MySQL学习(3)单表查询
素材如下: DROP TABLE IF EXISTS `course`; CREATE TABLE `course` ( `cs_id` int(11) NOT NULL COMMENT '课程编号' ...
- MySQL作业(一)——单表查询
CREATE TABLE `worker` (`部门号` int(11) NOT NULL,`职工号` int(11) NOT NULL,`工作时间` date NOT NULL,`工资` float ...
最新文章
- Ansible YML语法
- socket()函数详解!
- 初试Android基于Vuforia开发AR
- java 三种将list转换为map的方法详解
- 11个提升编程能力的小方法
- Arm Linux交叉编译和连接过程分析(2)
- 矩形波如何傅立叶展开_金科文化会不会连续拉板?两位同学展开激辩
- mysql报错1517_请教一下 flask+sqlalchemy+mysql 连接错误问题
- Entity Framework Configuring Relationships with the Fluent API
- HTML资源嗅探,scrapy-2 嗅探网站,解析HTML
- 学数学建模算法对计算机的好处,浅议数学建模与算法
- vue使用高德地图web端JSAPI 路线规划、搜索提示教程
- sublime text3 英文版转为中文版
- 一文了解各种无线通信 - NB-IOT、LoRa、433、GPRS、4G、WIFI、2.4G、PKE
- 坚果PRO3搭载Android,安卓 10 来了,坚果 Pro 3 推送 Smartisan OS v7.5.0 早期众测版
- C#组件系列——NPOI使用手册
- PowerMock与Mockito使用教程
- STM32 CRH和CRL记录
- 计算机如何连接新的无线网络,换了个新wifi怎么设置?
- python在人工智能应用锁_干货 | Python人工智能在贪吃蛇游戏中的应用探索(上)...
热门文章
- 冷笑话之--所有进制都是十进制?
- 小技巧收藏之解决Word里9个常见难题
- 开我的世界服务器什么系统好,《我的世界》1.0服务器哪个好 1.0服务器地址大全...
- Liunx-02建立liunx实验环境
- 美股评论:苹果不会告诉你的十件事
- 在vue脚手架项目里面使用elementui
- 初学mybatis时出现 org.apache.ibatis.binding.BindingException报错
- 国产EDA工具easyeda_立创EDA系列教程
- terminal终端登录远程服务器,2013年期货投资分析章同步练习19
- 深圳python培训比较好的机构