MySql数据库入门
数据库概述
数据
数据即用于描述一些客观事物的符号;比如说人具备:年龄,身高,体重,姓名,性别等信息,这些信息都称之为数据(在java中称之为属性);数据的分类:
- 文本
- 图形(图片)
- 图像(视频)
- 声音
- 文件
为什么需要数据库
回顾之前所学习到的所有存储机制:内存>文件;通过以上分析得知,文件存储可以长期有效存储数据,但是文件只提供了存储机制,如果需要操作文件:
例如,一个文本文档中存储了1000W条数据,如果需要打开改文件会非常耗时,另外如果需要从文件中找出一条符合要求数据,首先需要先读取文件中的所有内容,然后一条一条去分析。
由于文件系统存在以上的问题:在进行检索时效率低,数据的组织方式不够结构化,因此操作数据方面没有优势;因此需要一种能够跟结构化,在检索方面具备绝对优势的数据存储系统
什么是数据库
数据库由一批数据构成的有序集合,这些数据被分门别类地存放在一些结构化的数据表(table)里,而数据表之间又往往存在交叉引用的关系,这种关系使数据库又被称为关系型数据库
怎么理解数据库
- 数据库系统==档案室
- 数据库等同于档案柜(数据库实例==档案柜)
- 每一张数据表等同档案柜中的抽屉(数据表==抽屉)
- 抽屉中的每一个文件袋称之为一条数据(数据==文件袋)
名词解释
-
Data 数据
-
Database 数据库
-
DBMS (DataBase Management System)数据库管理系统
-
DBS(DataBase System)数据库系统
-
DBA(Database Administrator)数据库管理员
- OCA 初级认证
- OCP 专家认证
- OCM 大师级认证
主流数据库产品
-
Sybase SqlServer
-
MSSqlServer(SqlServer)
-
Oracle(先知/甲骨文)
-
DB2/Informix (IBM)
-
Mysql(瑞典Mysql AB)
-
MariaDB
-
PostgreSQL
-
Access(微软)
-
Sqlite3(应用于移动设备:手机,平板,pad)
-
达梦数据库(国产:政府,消防,军工以事业单位为主的客户)
-
OceanBase(阿里巴巴+蚂蚁金服)
MySql安装与卸载
卸载
卸载mysql数据库分为以下四个步骤
- 停止mysql服务
- 进入控制面板,卸载mysql相关的安装程序
- 进入mysql安装目录(默认c:/Program Files) 删除Mysql目录
- 进入mysql数据目录(默认c:/ProgramData)删除mysql目录(重要:如果不删除将会导致下一次重复安装失败)
安装
- 安装
- next
- 配置
- 编码设置(gbk/utf8)
- 密码设置
Mysql基本命令
mysql数据库组织结构
基本命令使用
- 连接mysql数据库
直接通过mysql命令行客户端
通过 cmd连接mysql(需要配置环境变量)
-h:主机地址
-u:用户名(默认root)
-p:连接密码
- 查看mysql数据库服务器中的所有实例
show databases;
- 创建mysql实例
create database mydb
default character utf8
default collate utf_general_ci;
character 设置数据库字符串格式
collate 设置字符串比较的格式
- 查看创建实例的命令
show create database mydb;
- 显示当前库的命令
select database();
- 使用数据库实例
use mydb;
- 当输入了错误命令,需要取消时
show databaes xxx \c
\c表示取消当前的输入
- 显示当前所有用户
select user,host from mysql.user;
- 查看帮助信息
\h
- 修改默认的分隔符
delimiter $
默认命令行结束为“;”,可以修改为指定符号结束
- 退出mysql命令行
#方式一
exit;
#方式二
quit;
- 查看mysql服务器状态信息
\s
- 显示实例下的所有表(前提先use过了)
show tables;
SQL语句入门
SQL是Structured Query Language(结构化查询语言)的缩写;sql语句是专门为数据库管理提供的通用操作语言;语法类似于英语口语,在使用它时,只需要发出“做什么”的命令“怎么做”是不用使用者考虑的。sql语句分为以下几个大类:
1. DDL语句(数据定义语句)
数据定义语句主要应用于对数据表的结构操作:比如建表,删除表,修改表的结构等;DDL语句包含以下命令:
- create (新建)
- drop(删除,主要删除数据库中的结构,比如表,库等)
- alter(主要用已有表删除,新建,修改行)
- add(添加列)
- modify(修改列
2. DML语句(数据操作语句)
数据操作语句一般用于对的语句数据库表中数据进行更新操作,比如添加,删除,修改数据等,DML语句包含以下命令:
- insert (对表新增加数据)
- update(更新表字段)
- delete(删除信息)
3. DQL语句(数据查询语句)
数据查询语句一般用于对数据库表中数据进行查询操作,命令主要包含:select
4. DCL语句(数据控制语句)
数据控制语句一般用于对于数据库用户的权限管理,事务管理,DCL包含以下命令:
- grant (权限设置)
- revoke(回收权限)
- commit(事务提交)
- rollback(事务回滚)
DDL语句
- 创建一张数据库表
create table emp -- 创建表,名称叫emp
(
eno int, --创建eno列,类型是int
ename varchar(30), --创建ename列,类型是varchar长度是30字符
job varchar(30),
sex char(2) default '1', --创建sex列,类型是char
sal double,
birth date
);
关于mysql中字符长度问题
如果是utf8编码下,默认的中文字符占3个字节;如果是gbk编码,默认的中文占2个字节
关于char类型和varchar类型:
- char类型是定长字符串,类似于java中String;长度一旦定义则无法改变,并且无论数据是否够指定长度,都会占满,不够的用空格填充;char类型一般应用于长度确定的字符串类型,比如:性别,手机号,身份证号等;
- varchar类型是可变长度字符串,类似java中StringBuffer;长度定义之后会根据实际填充的内容,选择占用多大空间,比较节省空间;varchar类型一般使用在长度不确定的字符串类型,比如:姓名,邮箱地址,评论信息等。
- 显示表中所有与列等其他信息
show full fields from emp;
修改表结构
语法:
alter table 表名 [add/drop/modify/change/rename] 列名称
- 新增一个列
alter table emp add hiredate date;
- 删除列
alter table emp drop column birth;
- 修改列的类型
alter table emp modify sal varchar(20);
- 修改列名称
alter table emp change job ejob varchar(30);
- 修改表名称
alter table emp rename to tbemp;
DML语句
- 显示表中所有的数据
select * from tbemp;
insert语句(插入)
语法:
insert into 表名(列名1,列名2…) values(列值1,列值2…)
- 向表中添加数据(所有列)
insert into tbemp values(1,'james','manager','1',8796,'2018-01-22',28);
- 向某一些列插入值
insert into tbemp(eno,ename,ejob,sal) values(4,'softeem','CEO',1500000);
- 同时插入多条数据
insert into tbemp(eno,ename) values(5,'来福'),(6,'狗蛋'),(7,'王二狗');
插入数据出现中文乱码时解决方案:
由于安装mysql使用的是UTF8编码,但是cmd命令行中默认为GBK编码,因此在命令行中使用中文数据是会出现乱码;解决方式只需要在打开cmd命令行时输入以下命令:
- set names gbk;
然后再进行插入操作即可解决(但是以上修改只对一次会话生效;如果只会再次使用cmd需要重新设置)
select语句:
select * from student;-- 查询所有
select id,name from student; -- 查询指定的字段
select * from student where id='1';--条件查询
select * from student where id='1' and sex ='男';--多条件查询
select * from student where id='1' or sex ='男';
update语句(更新)
语法:
update 表名 set 列名1=值1,列名2=值2… where 条件
- 修改表中的一条记录
update tbemp set hiredate='2006-03-01',age=45 where eno=4;
- 修改数据(将员工姓名叫旺财的人的月薪提高2000)
update tbemp set sal=sal+2000 where ename='旺财';
- 修改数据(将员工生日为null的人的生日全部设置为2020-01-01)
update tbemp set hiredate='2020-01-01' where hiredate is null;
delete语句(删除)
语法:
delete from 表名 where 条件
- 删除一行指定id的数据
delete from tbemp where eno=5;
- 删除所有月薪为null的员工
delete from tbemp where sal is null;
注意事项:
实际开发中,数据积累不容易,一般不会轻易使用物理删除;大多数时候会选择使用逻辑删除;所谓逻辑删除实际就是在表中增加一个标识列,通过该列的取值标记该列是否应该被查询到
因此针对删除需求,可以在表中新增一列用于标记该列是否被删除
alter table tbemp add isdel tinyint;
物理删除:
使用delect 语句直接讲数据库中的数据删除掉
逻辑删除:
实际上执行的是update语句,更新了该条数据的状态字段,一般状态字段的值:0表示删除,1表示有效
如果要做逻辑删除,就是将stats字段的值更新为0,
mysqldump与mysqladmin
mysqldump(备份)
1.备份指定实例到指定目录中
需要先退出当前数据库的登陆,再进行数据库的备份
mysqldump -uroot -p123456 mydb > d:/mydb.sql
2.从指定的sql文件中恢复备份数据
要先登陆数据库,选择好需要导入的库,再执行导入命令,将备份的数据导入
source d:/mydb.sql
mysqladmin
- 使用mysqladmin创建一个数据库实例
mysqladmin -uroot -p123456 create mydb2
- 使用mysqladmin删除一个数据库实例
mysqladmin -uroot -p123456 drop mydb2
- 修改密码
mysqladmin -uroot -p password root
将root用的密码改为"root"
MySql数据类型
mysql数据库中支持的数据类型分为以下几个大类:
- 数值类型
- 整型
- 浮点型
- 字符类型
- 日期时间类型
数值类型
mysql中数值类型主要包含以下两大类
- 整型
- 浮点型
取值范围:
常用数值类型主要包含以下几个:
- int
- double
- decimal
字符串类型
注意事项:
在使用中文字符串时,如果数据库编码是gbk,则每个中文字符占2个字节;如果是utf8编码,则每个中文字符占3个字节
关于取值返回:
char(m)
varchar(m)
其中m表示的字符个数
常见的字符串类型:
- char
- varchar
- text
blog和clob
blob(Binary Large object)二进制大对象(视频,图片,音频)
clob(Character Large Object)字符大对象(大文本)
enum类型
枚举类型,用于限定该列只能选择枚举中其中一个值
日期时间类型
获取当前的系统时间
select now()
常用日期类型:
- date 用于表示日期 如:2020-01-01
- datetime 用于表示日期时间 如:2020-01-01 10:11:12
- timestamp 用于表示时间戳,格式等同datetime,支持默认值 CURRENT_TIMESTMP
另外该类型也支持自动更新(on update CURRENT_TIMESTAMP)当前行 数据更新时,该列也会自动更新为最新的时间注意事项:
- 一张表中只能有一个字段的timestamp可以设置默认值
常用数据类型汇总
Mysql之SQL查询
mysql的第三方图形界面工具非常多,比如:
- Sqlyog
- Navicat for Mysql
- Navicat Premium
- Mysql Front
- PhpMyAdmin
运算符
算术运算
关系运算
SELECT * FROM emp where NAME <> '张三'
SELECT * FROM emp where sal > 7000
SELECT * FROM emp where age in (21,22,23,29)
SELECT * FROM emp where sal>=7500 && sal<=8000
SELECT * FROM emp where sal BETWEEN 7500 and 8000
SELECT * from emp where name like "%张%"
SELECT * FROM emp where name is not null
逻辑运算
运算数左右需为boolean结果
SQL查询
SQL查询在数据库中是非常重要的组成,因为未来开发场景下,大多数的功能都集中在查询上,而且查询可以简单,也可以复杂,复杂到很多表之间的联合查询。
SQL查询的语法:
select
distinct
查询列
from
表名称
连接表(inner join/left join/right join)
where
查询条件
group by
分组依据
having
分组的查询条件
order by
排序字段
limit
结果限制
基础查询
- 查询所有列
select * from emp;
- 查询部分列信息(查询员工的姓名,职位,薪资)
select ename,job,sal from emp;
insert into emp(eno,ename,job,age) values(23,'卡牌大师','骨干员工',33);
-- 查询指定列
select ename,job,IFNULL(sal,0) from emp;
IFnull(exp1,exp2)
解释:当exp1字段为null时,默认该这个null值赋值为exp2
--查询时使用运算操作
select ename,ifnull(sal,0)-1000 from emp;
--显示所有的职位,不能重复
select distinct job from emp;
distinct 去重的语法,去除重复出现字段值
/*
mysql聚合函数查询
count 统计函数
sum 求和
avg 求平均值
max 求最大值
min 求最小值
*/
--查询表中一共有多少员工
select count(*) from emp;
--查询所有员工的总薪资
select sum(sal) from emp;
--查询所有员工的月薪平均值
select avg(sal