目录:

  • 一、初识Mysql
    • 1. 数据库分类
    • 2. MySQL简介
    • 3. MySQL安装
    • 4. Sqlyog 或者 Navicat for MySQL软件安装
  • 二、操作数据库
    • 1. 操作数据库
    • 2. 数据库列类型
    • 3. 创建数据库
    • 4. 修改表
  • 三、MySQL的数据管理
    • 1. 外键
    • 2. DML语言(背)
    • 3. 添加
    • 4. 修改
    • 5. 删除
  • 四、查询数据(重点)
    • 1. select 和 去重
    • 2. 模糊查询
    • 3. 联表查询
    • 4. 分页排序查询
    • 5. 子查询
    • 6. 分组和过滤
  • 五、MySQL常用函数
    • 5.1 常用函数
    • 5.2 聚合函数
    • 5.3 MD5加密
  • 六、事务
  • 七、索引
    • 1. 索引的分类
    • 2. 索引使用
    • 3. 索引原则
  • 八、权限管理和备份
    • 1. 权限管理
    • 2. 数据备份
  • 九、三大范式
  • 十、JDBC(重点)
    • 1.statement对象
    • 2. PreparedStatement对象
    • 3. Java操作事务
    • 4. 数据库连接池

一、初识Mysql

1. 数据库分类

关系型数据库: (SQL)

① Mysql、Oracle、Sql Server、DB2、SQLlite;
② 通过表和表之间,列和列之间的关系进行数据的存储;

非关系型数据库: (No SQL ,Not Only)

① Redis、MongDB;
② 非关系型数据库,对象存储通过对象自身的属性来决定;

DBMS 数据库管理系统:

① 数据库的管理软件,科学有效的管理我们的数据,维护和操作数据;

2. MySQL简介

① MySQL是一个关系型数据库管理系统,体积小,速度快,成本低;
② 适合中小型网站,或者大型网站,集群;

3. MySQL安装

建议使用压缩包安装,因为卸载容易;

① 解压,将解压文件放在一个自己的环境目录下;
② 添加环境变量;
③ 在mysql-5.7.19下新建一个my.ini文件;
④ 配置my.ini文件:

[mysqld]
basedir=D:\Environment\mysql-5.7.19\
datadir=D:\Environment\mysql-5.7.19\
port=3306
skip-grant-tables

⑤ 启动管理员模式下的CMD,并将路径切换到mysql的bin目录下,然后输入mysqld-install(安装mysql);
⑥ 输入mysqld --initialize-insecure --user=mysql初始化数据文件;
⑦ 然后再net start mysql启动mysql,使用命令mysql -u root -p进入mysql管理界面(密码可以为空);
⑧ 进入界面后更改root密码;update mysql.user set authentication_string=password("123456") where user='root' and Host='locahost'; 最后使用flush privileges刷新权限;
⑨ 修改my.ini文件删除最后一句skip-grant-tables;
① 重启mysql,net stop mysqlnet start mysql
② 连接测试:mysql -uroot -p123456

4. Sqlyog 或者 Navicat for MySQL软件安装

下一个可视化软件

二、操作数据库

mysql关键字不区分大小写;

1. 操作数据库

创建数据库:
create database [if not exists] xxx
删除数据库:
drop database [if exists] xxx
使用数据库:
use xxx
查看所有的数据库:
show database
连接数据库:
mysql -uroot -p123456
修改密码:
update mysql.user set authentication_string=password("123456") where user='root' and Host='locahost';
刷新权限:
flush privileges;
查看数据库中所有的表:
show tables;
显示一个表的所有信息:
describe xxx;
SQL的注释:
单行注释--,多行注释:/* */

2. 数据库列类型

数值:

  1. tinyint 非常小的数据 1个字节
  2. smallint 较小的数据 2个字节
  3. mediumint 中等大小的数据 3个字节
  4. int 标准整数 4个字节
  5. bigint 较大的数据 8个字节
  6. float 单精度浮点数 4个字节
  7. double 双精度浮点数 8个字节
  8. decimal 字符串形式的浮点数 金融计算的时

字符串:

  1. char 字符串固定大小的 0~255
  2. varchar 可变字符串 0~65535
  3. tinytext 微型文本 2^8-1
  4. text 文本串 2^16-1 保存大文本

时间日期:

  1. data YYYY-MM-DD 日期格式
  2. time HH:mm:ss 时间格式
  3. datatime YYYY-MM-DD HH:mm:ss 最常用时间格式
  4. timestamp 时间戳 1970.1.1到现在的毫秒数
  5. year 年份表示

null:

  1. 没有值,不能用来计算

3. 创建数据库

create table if not exists `student`(
`id` int(4) not null auto_increment comment '学号',
`name` varchar(20) not null default '匿名' comment '姓名',
`password` varchar(20) not null default '123456' comment '密码',
`email` varchar(20) default null comment '邮箱',
primary key(`id`)
)engine=innodb default charset=utf8

查看创建数据库的sql语句: show create database 数据库名
查看创建表的sql语句 show create table 表名
显示表的结构: desc 表名

4. 修改表

修改表名: alter table 旧表名 rename as 新表名
添加表字段: alter table 表名 add 字段名 列属性
修改表的字段:

  1. 修改约束:alter table 表名 modify 字段名 列属性
  2. 字段重命名:alter table 表名 change 旧字段名 新字段名 列属性

删除表的字段: alter table 表名 drop 字段名
删除表: drop table if exists 表名


三、MySQL的数据管理

1. 外键

一般不使用!!!

方式一: 创建表时添加

create table if not exists `student`(
.....
key `FK_gradeid`(`gradeid`)
constraint `FK_gradeid` foreign key(`gradeid`) references `grade`(`gradeid`)
)

方法二: 添加约束

alter table `student`
add constraint `FK_gradeid` foreign key(`gradeid`) references `grade`(`gradeid`);

2. DML语言(背)

3. 添加

语法:

insert into 表名([字段1,字段2,...])
values('值1','值2',...),('值1','值2',...)

4. 修改

语法:

update 表名 set 列名1=值1,[列名2=值2...]  where [条件]

条件:

不等于:<> 或者 !=
在某个范围:betwwen x and x

5. 删除

语法:

delete from 表名 where 条件

清空一个表:truncate 表名

delete 和 truncate的区别:

  1. truncate 会重新设置自增列,计数器从0开始;
  2. truncate不会影响事务;

delete删除问题:重启数据库现象

  1. InnoDB:自增列会从1开始,因为存在内存中的,断电即失;
  2. MyISAM:继续从上一个自增量开始,因为存在文件中,不会丢失;

四、查询数据(重点)

1. select 和 去重

# 查询全部
select * form student
# 查询指定字段
select id,name from student
# 使用别名
select id as 学号,name as 姓名 from student
# 使用连接函数
select concat('姓名:',name) as 新名字 from student
# 查询90~100的数据
select * from student where grade>=90 and grade<=100
select * from student where grade between 90 and 100

去重: distinct

select distinct id from student

2. 模糊查询

Like:

# 查询姓宁的同学
select * from student where name like '宁%'
# 查询姓宁,两个字的同学
select * from student where name like '宁_'
# 查询姓名中有宁的同学
select * from student where name like '%宁%'

In:

# 查询在1 2 3 内的学生
select * from student where id in(1,2,3)

3. 联表查询

select s.studentNo,s.studentName,r.subjectId,r.grade
from student as s left join result as r
on s.studentNo= r.studentNo# 查询缺考的同学
select s.studentNo,s.studentName,r.subjectId,r.grade
from student as s left join result as r
on s.studentNo= r.studentNo
where r.grade is null# 查询 参加了考试的同学(学号,姓名,科目名,分数)
select studentNo,studentName,subjectName,grade
from student s
right join result r on s.studentNo = r.studentNo
inner join subject sub on r.subjectNo = sub.subjectNo
操作 描述
inner join 两表中只要一个匹配就返回行
left join 根据左表是否存在来返回行
right join 根据右表是否存在来返回行

自连接:

select a.name as '父名字',b.name as '子名字'
from people as a,people as b
where a.id = b.pid

4. 分页排序查询

分页limit:

limit 起始行,页面大小
limit (n-1)*pageSize,pageSize

排序 order by:

# 降序
order by grade desc
# 升序
order by grade asc

5. 子查询

# 查询 高等数学 且成绩大于80学生的(学号和姓名)
select studentNo,studentName from student where studentNo in (select studentNo from result where grade >= 80 and  r.subjectNo = (select subjectNo from subject where subjectName = '高等数学')
)

6. 分组和过滤

# 查询不同课程的平均分,最高分,最低分,且平均分大于80
select subjectName,avg(grade) as 平均分,max(grade) as 最高分,min(grade) as 最低分
from result r
inner join subject sub on r.subjectNo = sub.subjectNo
group by r.subjectNo
having 平均分 > 80

五、MySQL常用函数

5.1 常用函数

绝对值:abs(-8)
向上取整:ceiling(9.4)
向下取整:floor(9.4)
随机数0~1:rand()
判断符号:sign(-10)
字符串长度:char_length("15645")
合并字符串:concat("A","B")
插入替换字符串:insert(str,pos,len,newstr)
转小写:lower()
转大写:upper()
返回第一次出现字串的位置:instr("ning","i")
替换字符串:replace(str,from_str,to_str)
截取字符串:substr(str,pos,len)
反转:reverse(str)
当前日期:current_data()now()

5.2 聚合函数

函数名称 描述
count() 计数
sum() 求和
avg() 平均值
max() 最大值
min() 最小值

5.3 MD5加密

# 插入数据时加密
insert into student(id,name,password) values(1,'ning',MD5('123456'))
# 验证
select * from student where name='ning' and password=MD5('123456')

六、事务

事务原则:

  1. 原子性:事物操作要么都发生,要么都不发生;
  2. 一致性:事物前后数据的完整性必须保持一致;
  3. 隔离性:事物之间相互隔离;
  4. 持久性:事务结束,数据不会随着外界原因导致数据丢失;(事物没提交-恢复原数据,事物提交-持久化到数据库)

隔离所导致的一些问题:

  1. 脏读:指一个事务读取了另一个事务未提交的数据;
  2. 不可重复度:在一个事务内读取表中的某一行的数据,多次读取结果不同;
  3. 幻读:指一个事务内读取到了别人的事务插入的数据,导致前后读取不一致;

执行事务:

  1. mysql是默认开启事务提交的;
手动处理事务:
1. 关闭自动提交
set autocommit = 0
2. 事务开启
start transaction # 标记一个事务的开始,从这个之后sql都在一个事务内部
insert xxx
insert xxx
.....
3. 提交:持久化,成功
commit
4. 回滚:失败
rollback
5. 事务结束,开启自动提交
set autocommit = 1
# 了解:
savapoint 保存点名 # 设置一个事务的保存点
rollback to savapoint 保存点名 # 回滚到保存点
release savapoint 保存点名 # 撤销保存点

七、索引

MySQL官方对索引的定义:索引是帮助MySQL高效获取数据的数据结构,提取句子主干,就可以得到索引的本质。

1. 索引的分类

主建索引(primary key): 唯一标识,不可重复,只能一个列作为主键;

唯一索引(unique key): 避免重复列的出现,唯一索引可以重复,多个列都可以标识为唯一索引;
常规索引(key/index): 默认的;
全文索引(fulltext): 在特定的数据库引擎下才有,MyISAM,可快速定位数据;

2. 索引使用

1. 显示所有的索引信息
show index from student2. 添加索引
#添加一个全文索引
alter table school.student add fulltext index `studentName`(`studentName`)
# 添加常规索引: create index 索引名 on 表(字段)
create index id_student_name on student(`name`)3. explain分析sql执行的状况
explain select * from student # 分析非全文索引
explain select * from student where match(studentName) against('宁') # 分析全文索引

3. 索引原则

① 索引不是越多越好;
② 不要对经常变动的数据加索引;
③ 小数据量的表不需要加索引;
④ 索引一般加载常用来查询的字段上;


八、权限管理和备份

1. 权限管理

① 可视化操作;
② 使用sql命令:

1.创建一个用户
create user '用户名' identified by '密码'
2.修改当前用户密码
set password = password('密码')
3.修改指定用户的密码
set password for ning = password('新密码')
4.给用户重命名
rename user '旧名' to '新名'
5.给用户授权(全部,除了给别人授权)
grant all privileges on *.* to ning
6.查询权限
show grant for ning
7.撤销用户权限:revoke 哪些权限 在哪个库撤销 谁
revoke all privileges on *.* from ning
8.删除用户
drop user ning

2. 数据备份

① 直接备份物理文件;
② 使用Navicat等可视化工具导出;
③ 使用命令行导出;

mysqldump -h主机 -u用户名 -p密码 数据库 表名 > 保存地址
mysqldump -hlocalhost -uroot -p123456 school student >D:/ning.sql

九、三大范式

第一范式
原子性:保证每列不可再分;
第二范式
前提:满足第一范式;
一张表只描述一件事情,需要确保数据表中的每一列都和主建相关,而不能只与主键的某部分相关(主要针对联合主键而言)
第三范式
前提:满足第一第二范式;
需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

规范性和性能的问题:
① 考虑商业化的需求和目标,数据库的性能更加重要;
② 在性能的问题的时候,需要适当的考虑规范性;
③ 故意给某些表添加一些冗余的字段,可从多表查询到单表查询;
④ 故意添加一些计算列(从大数据大数据的查询降低到小数据量的查询:索引)


十、JDBC(重点)

SUN公司为了简化开发人员的(对数据库的统一)操作,提供了一个(Java操作数据库的)范式,俗称JDBC,这些规范的实现是由具体的厂商做。

需要的包:java.sql、javax.sql
数据库驱动:mysql-connector-java-5.1.47

1.statement对象

Java代码操作:

//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.用户信息和url
String url="jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8&useSSL=true";
String username="root";
String password="123456";
//3.连接
Connection con = DriverManagerr.getConnection(url,username,password);
//4.获取执行sql的对象
Statement statement = con.createStatement();
//5.执行sql
String sql="select * from user";
ResultSet resultSet = statement.executeQuery(sql);
//6.读取数据
while(resultSet.next()){System.out.println(resultSet.getObject("id"));...
}
//7.释放连接
resultSe.close();
statement.close();
con.close();
statement.executeQuery(); //查询操作,返回resultSet
statement.execute();//执行任何sql
statement.executeUpdate();//更新、插入、删除,返回影响行数resultSet.beforeFirst();//移动到最前面
resultSet.afterLast();移动到最后面
resultSet.next();移动到下一个
resultSet.previous();移动到前一行

2. PreparedStatement对象

PreparedStatement可以防止SQL注入,并且效率更高。

Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8&useSSL=true";
String username="root";
String password="123456";
Connection con = DriverManagerr.getConnection(url,username,password);//区别
PreparedStatement st = null;//1.添加
String sql = "insert into student(id,name,password) values(?,?,?)"
st = con.prepareStatement(sql);//预编译sql
st.setInt(1,5);
st.setString(2,"ning");
st.setString(3,"123456");
st.executeUpdate();//执行//2.删除//3.更新//4.查询

3. Java操作事务

Connection con = null;
PreparedStatement  st= null;
ResultSet rs = null;
try{con = DriverManagerr.getConnection(url,username,password);//1. 关闭数据库自动提交,此操作会自动开启事务con.setAutoCommit(false);//开启事务//2.执行sqlString sql1="update user set money = money-100 where name='A'";st = con.prepareStatement(sql1);st,executeUpdate();String sql2="update user set money = money+100 where name='B'";st = con.prepareStatement(sql2);st,executeUpdate();//3.业务完毕,提交事务con.commit();
}catch(Exception e){try{con.rollback();}catch(Exception e1){}
}finally{//释放资源rs.close();st.close();con.close();
}

4. 数据库连接池

池化技术:准备一些预先的资源,过来就连接预先准备好的。

编写连接池:实现接口DataSource

开源的数据源实现:DBCP、C3P0、Druid

DBCP: commins-dbcp-104、commons-pool-1.6

C3P0: c3p0-0.9.5.5、mchange-commons-java-0.2.19

// 创建一个c3p0-config.xml的配置文件<default-config name="MySQL"><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost:3306/******</property><property name="user">root</property><property name="password">123456</property></name-config>
CombopooledDataSource dataSource=new CombopooledDataSource (); //从配置文件中获取配置

Mysql 入门学习总结相关推荐

  1. MySQL入门学习的第一节(SQL语句)

    MySQL入门学习的第一节(SQL语句) SQL语句

  2. php入门教程ppt,PHP与MySQL入门学习指南.ppt

    <PHP与MySQL入门学习指南.ppt>由会员分享,可在线阅读,更多相关<PHP与MySQL入门学习指南.ppt(18页珍藏版)>请在人人文库网上搜索. 1.PHP5與MyS ...

  3. MySQL入门学习教程

    文章目录 1.初始MySQL 1.1.为什么学数据库 1.2.什么是数据库 1.3.数据库分类 1.4.MySQL简介 1.5.安装MySQL 1.6.连接数据库 2.操作数据库 2.1.操作数据库 ...

  4. MySQL入门学习:组合查询

    一.组合查询 多数SQL查询都只包含从一个或多个表中返回数据的单条SELECT语句.MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回.这些组合查询通常称为并(uni ...

  5. Mysql入门学习第三章(学习DQL语句)

    第三章 DQL数据查询语言 重点,DQL是我们每天接触编写最多也是最难的sql,该语言用来查询记录,不会修改数据库和表结构: 一.构建数据库 学习之前我们需要创建数据库并填充部分数据: drop TA ...

  6. Mysql入门学习第二章(学习sql语句)

    SQL学习(重要) SQL SQL是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统.(用人话说就是通过程序能看懂的方式告诉mysql程序怎么做) ...

  7. 【转】MYSQL入门学习之十:视图的基本操作

    转载地址:http://www.2cto.com/database/201212/176775.html 一.视图的基本介绍  www.2cto.com   视图是虚拟的表.与包含数据的表不一样,视图 ...

  8. mysql 自定义函数入门_【转】MYSQL入门学习之十三:自定义函数的基本操作

    转载地址:http://www.2cto.com/database/201212/177382.html 一.自定义函数(UDF)的特性和功能  www.2cto.com 函数能分返回字符串,整数或实 ...

  9. 【转】MYSQL入门学习之七:MYSQL常用函数

    转载地址:http://www.2cto.com/database/201212/175864.html 一.数学函数  www.2cto.com   ABS(x)                   ...

  10. MySQL入门学习之——MySQL Cluster初体验

    最近有一位朋友咨询了我一个MySQL Cluster的问题,实话实说,这个东东我还没玩过,不过既然遇到了它,那么就开始体验一把吧.朋友的问题如下: "MySQL集群是不是只能新增数据同步,而 ...

最新文章

  1. Makefile选项 CFLAGS LDFLAGS
  2. 第十二节 VMware View 6.0 菜鸟入门 部署和安装2008 R2 RDS服务
  3. 初学者宝典:C语言入门基础知识大全(下)
  4. oracle_sqlserver和mysql获取表外键的方法_mysql、sqlserver、oracle三种数据库维护索引、外键、字段语法总结...
  5. Bootstrap中过渡效果(Transition)模态框插件的使用案例
  6. Docker配置国内镜像加速
  7. python函数分为哪几种_python数据挖掘常用工具有哪几种?
  8. 简析面向对象中的继承,原型链,闭包之继承
  9. windows下安装MinGW及C++的环境配置
  10. 【滤波跟踪】基于多源信息融合算法实现多旋翼无人机组合导航系统含Matlab源码
  11. 哔哩哔哩电脑版怎么下载视频?
  12. 学点简单的Python之Python生成器
  13. MISC总结——隐写术(一)
  14. xcode 软件˙∆集~
  15. vue 封装图片预览组件
  16. iphone桌面横屏设置在哪里_苹果手机怎么设置横屏切换
  17. nginx服务器中url重写rewrite参数和例子
  18. python自制免费代理IP服务
  19. JAVA实现MD5带盐加密_MD5加盐加密
  20. D. Riverside Curio

热门文章

  1. MultipartFile和File互转
  2. MAMP Pro 6 mac强大的本地服务器环境软件套装
  3. 电脑文件管理,教你一键将大量文件夹名称翻译成英文
  4. thinkphp创建临时表
  5. 60万奖金“人脸攻防大战”,全部进阶妙招奉上丨独家公开课实录(3)
  6. python 阿里云平台合成语音(TTS)
  7. H264(AVC)/H265(HEVC)/H266(VVC):GOP的区别
  8. python跑神经网络_程序员深夜用Python跑神经网络,只为用中二动作关掉台灯!
  9. mysql+查询触发器+sql_Mysql基本查询、视图、索引、触发器
  10. 一文带你浅入浅出Keepalived