学习mysql笔记

用的是mysql数据库
SQL数据化查询语言
DDL 数据定义语言 建库建表
DML 数据操作 增删改
DQL 数据查询 查询select
数据类型:数字/字符串/日期时间
数字 :标记unsingned 无符号 只有正数
标记zerofill 配合显示位数,如果不足补0
tinyint smallint int { int(3)不足3位按3位显示 } bigint (对应java4种整数类型)
float double (浮点数类型) 运算不精确
decimal { decimal(8,2)总共8位.整数6位,小数两位 }运算精确
字符串: char 定长字符串, 存储访问效率高,字符串长度不足会补空格
超出定长,根据数据库设置可能出错,也可能截断
最长255个字符
varchar 变长字符串 存储访问效率比char低
最大长度限制65535个字节
超过255个字节使用text类型
text 保存长文本,最长65535字节
日期时间
date 年月日
time 时分秒
datetime年月日时分秒
timestamp 时间戳 最大表示到2038年 ,在插入和修改时自动更新系统当前时间
insert 插入
插入中文先告诉服务器,客户端是什么编码
set names gbk
连接断开之前,服务器可以记住这个编码
insert into 表名 values( , , , )
insert into 表名( 指定字段 ) values( 内容)
update 修改
update 表名 set 修改字段=新内容 where 过滤条件
delete 删除
delete from 表名 where 删除条件
select 查询
select 所查字段 from 表名 where 查询条件
导入数据文件 source 文件地址.sql
查看表 show tables
查看库 show databases
进入库 use xx
查看表结构 desc xx
where 条件
xx<>99 字段xx内容不等于99

= > < <=
Xx between 小值 and 大值 xx在小值和大值之间,包含
and 并且
xx in(a,b,c, ) 字段xx在是a,b,c之间的一个
or 或
判断是否是空值用is null 是null is not null 不是null
like 字符串模糊匹配 %通配多个 _通配单个字符 用\转译
包含a like ‘%a%’
第34个字符是a like ‘__a%’
not 做相反判断 not between and
and 与or 使用多加小括号
distinct 去除重复
select distinct a from 去除a字段重复值
select distinct a,b from 去除a,b字段组合重复值
order by 对查询结果进行排序
order by a, 默认按a字段升序排序
order by a,b 先按a字段升序排列当a字段相同按b的升序排列
asc 升序
desc 降序
order by a desc 按a的降序排列
order by a desc ,b desc
单引号
字符串内容中有单引号 ,用两个单引号转义
字符串’I’mAVS’
转 ‘I’’mAVS’
Sql注入攻击
在sql语句中注入单引号来改变sql语句结构
例子: 登录中 密码 1’or’1’=’1’ 过滤条件 where password=’ 1’or’1’=’1’’
防止注入攻击用户填写的内容中所有的单引号都变成俩个单引号插入
函数 字符串函数 数字函数 日期函数 null值函数
字符串函数
char_length(字符串)字符数
lengtn(字符串) 字节数
left(字符串,截取长度)获得左侧字符
substring(字符串,起始位置,个数)截取字符串
instr(字符串,子串)查找子串位置
concat() 字符串的拼接
lpad(字符串,长度,’填充内容’)左侧填充
数字函数
ceil(数字) 向上取整
floor(数字) 向下取整
round(数字,四舍五入位数)
truncate(数字,舍弃位数)
rand() 随机数[)
日期函数
now()系统当前时间
currdate()系统当前时间年月日
currtime()时分秒系统当前时间
extract(字段 from 日期)
date_add(指定日期,interval 字段 值) 字段年 值10 指定日期的年加10
datediff(日期1,日期2)间隔天数
null值函数
ifnull(a,b) a不是null返回a a是null返回b
多行函数/聚合函数 多个函数求一个值,
多行函数不能和其他字段一起查询 select id ,fname ,min(sal) from emps 错的
多个多行函数可以一起查
多行函数会忽略null值 当不存在
sum()求和
avg()平均 求平均时忽略null 只会除以没被忽略的个数而不是所有
max()最大
min() 最小
count()行数 count() 函数不会忽略null,会计算存在null的行数
count(distinct a) 去除a的重复再计数
group by子句分组求多行函数
按指定字段中相同的值进行分组
分组后分别求多行函数
分组字段可以查询
having 子句 用来对多行函数进行过滤
例: select count(
) c from emps where group by mgr_id having c=1
where 和 having 作用相同 都是条件过滤
where 对普通条件进行过滤 ,最早执行
having对多行函数进行过滤,分组求完多行函数后才执行
having 是跟在group by后的
子查询:
查询嵌套 :
条件子查询
From子查询 /行内视图
Select子查询(不常用)
条件子查询
一个查询的结果,作为另一个查询的过滤条件
Select … where a=(select ….)
单值子查询
多值子查询 in >all(select…)大于最大 >any()大于最小
多列子查询 字段加小括号
From子查询/行内视图
从查询的查询结果再查询
Select … from (select…) 别名
select mgr_id ,count () c from emps where mgr_id is not null group by mgr_id
having c=( select max© from (
select mgr_id ,count(
) c from emps where mgr_id isnot null group by mgr_id ) t)

约束 : 限制字段中的取值
主键 : 数据表中对一行数据的唯一标识
不重复,不能是null值
自动生成索引
一般使用非业务数据作为主键值(自动增加/随机生成)
primary key 主键 auto_increment自增
alter table xuesheng modif id int auto_increment 修改为自增
获得刚刚插入数据产生的主键值
Select last_insert_id(); 只获得当前会话产生的自增值
会话:从连接到断开是一个会话过程
外键 限制一个字段,只能取指定的主键字段中存在的值
foreige key(字段) references 表名(字段)
自动生成索引
非空 不为null
name char(3) not null
唯一 不重复 会自动创建索引
email char(4) unique
unique not null 唯一非空
检查 设置检查条件来约束字段的取值
Mysql 不支持检查约束
Mariadb支持检查约束
age int
gender char(1) , check(age>=7&& age<=60), check(gender in(‘男’,’女’));

多表的连接查询
内连接 连接条件
自连接 一张表看做两张表来连接
外连接和内连接的区别
内连接 只查询满足连接条件的数据
外连接 不满足连接条件非数据也要查询
左/右连接 查询左侧/右侧表条件外的数据
外连接: 非标准sql连接语句,每种数据库连接语法都不同
Mysql没有外连接的非标准语法
ta使用标准的表连接语法:
select … from a join b on(a.id=b.xid) join c on()
select … from b left/right join b on (a.id=b.xid)
事务:
事务由组sql语句组成
事务的sql语句整体成功,整体失败
数据操作的最小单元是事物,而不是sql语句
事物操作:
启动事物…提交事物…回滚事物
启动事物:
begin
start transaction
数据启动后,执行的sql会暂时记录在日志文件中,不会被操作
提交事物:
commit
日志中记录的数据操作会被执行,并且清空日志文件
回滚事物
rollback
日志被清空
事务特性ACID
A 原子性 数据操作的最小单元是事物
C 一致性 数据要保持逻辑的一致性
I 隔离性 一个事务操作数据时,其他事务要等待
D 持久性 事务成功,数据被永久的保存
数据访问冲突问题:
三种问题
脏数据……不可重复读……幻觉读
脏数据 :一个事务未提交的数据,被另一个事务查询到
不可重复读: 针对数据修改 update操作
查询过的数据,再次查询时,与之前的查询结果不一致
幻觉读
针对数据的插入和删除
新插入的数据,查询不到
删除的数据能查询到
隔离级别:
为了避免数据访问冲突的问题,避免数据的混乱,数据库会让事务进行隔离
为了兼顾数据安全,和性能数据库提供了四中隔离级别,
级别越高越安全性能越差
级别越低越不安全,性能越高
Mysql设置隔离级别
set tx_isolation=’read-uncommitted’ 完全不隔离
三种都有
set tx_isolation=’read-committed’
不可重复读,幻觉读
set tx_isolation=’repeatable-read’ 默认级别
幻觉读
set tx_isolation=’serialiable’ 排队读 级别最高
都没有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值