MYSQL

第一章

三大范式

第一范式:

确保每列的原子性(每列都是不可再分的最小数据单元)

第二范式:

满足第一范式的前提下,确保表中每列都和主键相关(一张表只干一件事)

第三范式:

满足第一二范式的前提下,确保表中每列都和主键直接相关,而不是间接相关。

注意:三大范式只作为一种规范作为参考,阿里巴巴数据库规范要求表之间连接最多不超过三张

第二章

2.1 命令行操作MySQL

1.命令行启动MySQL命令:net start mysql

2.命令行停止MySQL命令:net stop mysql

3.命令行登录MySQL命令:mysql [-h服务器主机地址] -u用户名 -p密码

2.2 SQL语句操作数据库

  1. 创建数据库:create database 数据库名;

  2. 查看数据库列表:show databases;

  3. 选择数据库:use 数据库名;

  4. 删除数据库:drop database 数据库名;

2.3 结构化查询语言

  1. DML(数据操作语言):用来插入、修改和删除表中的数据,如insert、update、delete等

  2. DDL(数据定义语言):在数据库中创建或删除数据库对象等操作create、drop、alter等

  3. DQL(数据查询语言):用来数据库中的数据进行查询,指select语句

  4. DCL(数据控制语言):用来控制数据库组件的存取许可,存取权限等,如grant、revoke等

2.4 数据类型

  1. int[(M)]:4字节,整数用,M可省略

  2. double[(M,D)]:8字节,小数用,M表示总位数,D表示小数点后保留位数,均可省略

  3. decimal[(M[,D])]:小数用,比double精度高

  4. char[(M)]:M字节,M取值为0~255,固定长字符串

  5. varchar(M):可变长度字符串,M取值范围:0~65535

  6. datetime:日期,格式YY-MM-DD hh:mm:ss

  7. timestamp:日期,格式YYYYMMDDHHMMSS

2.5 字段约束及属性

  1. 非空约束:not null

  2. 默认约束:default

  3. 唯一约束:unique key

  4. 主键约束:primary key

  5. 自动增长:auto_increment(注意,只有主键且整数类型可用)

  6. foreign key:外键,了解即可

  7. comment:注释

  8. engine:存储引擎 选用innodb

  9. charset/character set:字符集,选用utf8

  10. collate:排序规则,选用utf8_general_ci

2.6创表语句

create table [if not exists] 表名(
...
primary key(字段名)
)ENGINE=innodb charset=utf8 COLLATE=utf8_general_ci;

2.7 sql语句操作表

  1. 查看表:show tables

  2. 查看表的定义:describe/desc 表名

  3. 删除表:drop table [if exists] 表名

MyISAM和InnoDB对比:

  1. MyISAM:节约空间,速度较快

  2. InnoDB:安全性高,行级锁,支持事务处理,支持多表多用户操作

第三章

3.1 修改表

-- 修改表名,语法格式
alter table 旧表名 rename to 新表名;
-- 添加字段,语法格式
alter table 表名 add 字段名 数据类型 属性;
-- 修改字段,语法格式
alter table 表名 change 原字段名 新字段名 数据类型[属性];
alter table 表名 modify 字段名 数据类型 [属性];
-- modify 和change对比:
-- modify用于修改数据类型和属性约束,不能修改字段名
-- change用于修改字段名,数据类型,约束
-- 删除字段,语法格式:
alter table 表名 drop 字段名;

3.2 数据操作语言

3.2.1 插入数据 insert

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

3.2.2 更新数据记录

update 表名 set 字段1=值1,字段2=值2,...字段n=值n [where 条件];

3.3.3 删除数据记录

delete from 表名 [where 条件]
truncate table 表名;

delete 和truncate对比:

1.相同:都能删除数据,不删表结构

2.不同:truncate重置自增列,执行速度比delete快,慎用

delete不会重置自增列

3.3 数据查询

3.3.1 查询语句

select 字段名列表
from 表名或视图名
[where 查询条件]
[group by 分组字段名]
[having 分组后筛选条件]
[order by 排序字段名 [asc/desc]]
[limit [位置偏移量,]行数]

3.3.2 limit子句

位置偏移量index,当前页码数 pageNum,每页显示条数pageSize关系:index = (pageNum-1)*pageSize

3.3.3常用函数

聚合函数:

求平均值:avg()

返回某字段的行数:count()

求最大值:max()

求最小值:min()

返回某字段的和:sum()

3.3.4 子查询

-- 在查询语句中嵌套查询语句,执行顺序为先执行内层查询(先查询子句),再执行外层查询
select * from student where studentNo  in (
select studentNo from result where studentresult<60
);

3.3.5 连接查询

内连接: A inner join B ... on 条件

左连接: A leftjoin B ... on 条件

右连接: A right join B ... on 条件

等值连接 : from A,B where 条件

举例:

-- 内连接
select * from student inner join result on student.studentNo=result.studentNo;
-- 左连接
select * from student left join result on student.studentNo=result.studentNo;
-- 右连接
select * from student right join result on student.studentNo=result.studentNo;
-- 等值连接
select * from student, result where  student.studentNo=result.studentNo;

3.5 in 和not in

比较运算符:=、 <、 > 、 >=、 <= 、 !=

当子查询返回值不唯一时,使用in

between...and ...区间范围取值

判断为空:is null /is not null

第四章

4.1 exists子查询/not exists

语法:select ...from 表名 where exists(子查询);

#exists后面的参数是一个任意的子查询,如果该子查询有返回行,则exists子查询的结果为true,此时再执行外层查询语句

4.2子查询注意事项

常用语法:

select 字段名列表 from 表名 where 条件字段 =(子查询)

select 字段名列表 from (子查询) as 表的别名;

#注意:使用第二种用法时,表的别名不能省略

第五章

事务的属性

  1. 原子性(Atomicity):事务是一个完整的操作,事务的各元素是不可分割的(原子的)。事务中的所有元素必须作为一个整体提交或回滚。

  2. 一致性(Consistency):当事务完成时,数据必须处于一致状态(最终结果一致性)。

  3. 隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的

  4. 持久性(Durability):事务的持久性指不管系统是否发生了故障,事务处理的结果都是永久的

第七章

7.1 JDBC访问数据库的步骤

  1. 加载JDBC驱动

  2. 与数据库进行连接,获取连接对象Connection

  3. 创建Statement对象,执行sql语句

  4. 处理返回结果,若是查询语句,得到结果集ResultSet对象进行处理

7.2 Statement接口和ResultSet接口

Connection常用方法:

  • close():释放资源

  • Statement createStatement():创建Statement对象用于执行SQL

  • PreparedStatement prepareStatement(String sql):创建PreparedStatement对象,预编译sql语句,执行sql语句

Statement常用方法:

  • ResultSet executeQuery(String sql):可以执行SQL查询并获取ResultSet结果集

  • int executeUpdate():执行增删改操作,返回受影响行数

使用Statement对象执行sql可能出现sql注入漏洞,如何解决?

PreparedStatement可以对sql进行预编译,避免sql参数拼接,安全性更高

常用方法:

  • ResultSet executeQuery():可以执行查询并获取ResultSet结果集

  • int executeUpdate():执行增删改操作,返回受影响行数

  • void setObject(int index,Object obj):为占位符赋值,index对应问号占位符的位置。int类型可以用setInt(),String 类型可以用setString()等等

  • void close():释放资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值