类型

  • 关系型数据库, Oracle、MySQL、SQLServer、Access
  • 非关系型数据库, MongoDB、Redis、Solr、ElasticSearch、Hive、HBase

SQL语句
定义
结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

SQL 是1986年10 月由美国国家标准局(ANSI)通过的数据库语言美国标准,接着,国际标准化组织(ISO)颁布了SQL正式国际标准。

分类
DML(Data Manipulation Language)数据操纵语言
如:insert,delete,update,select(插入、删除、修改、检索)简称CRUD操新增Create、查询Retrieve、修改Update、删除Delete

DDL(Data Definition Language)数据库定义语言
如:create table之类

DCL(Data Control Language)数据库控制语言
如:grant、deny、revoke等,只有管理员才有相应的权限

DQL(Data Query Language)数据库查询语言
如: select 语法
注意:SQL不区分大小写

dos窗口的命令:

创建库:create  database a(库名) default  character set  utf8;

展示库;show databases;

删除库:drop database a(库名);

使用库:use a(库名);

创建表:create table a( id int primary key auto_increment, door_name varchar(100), tel varchar(50) );

增数据;insert into;

查数据:select * from a(表名);(使用频次最高,其他不轻易使用,关于查询有很多优化);

删数据:delete from a(表名) where(条件)  (字段);

改数据;update  a(表名) set (字段);

字符:

char长度固定,不足使用空格填充,最多容纳2000个字符,char(11)存储abc,占11位。查询速度极快但浪费空间
varchar变长字符串,最多容纳4000个字符,varchar(11)存储abc,只占3位。查询稍慢,但节省空间。Oracle为varchar2
大文本: 大量文字(不推荐使用,尽量使用varchar替代)

数字

  • tinyint,int整数类型
  • float,double小数类型
  • numeric(5,2) decimal(5,2)—也可以表示小数,表示总共5位,其中可以有两位小数
  • decimal和numeric表示精确的整数数字

日期

  • date 包含年月日
  • time时分秒
  • datetime包含年月日和时分秒
  • timestamp时间戳,不是日期,而是从1970年1月1日到指定日期的毫秒数

图片

blob 二进制数据,可以存放图片、声音,容量4g。早期有这样的设计。但其缺点非常明显,数据库庞大,备份缓慢,这些内容去备份多份价值不大。同时数据库迁移时过大,迁移时间过久。所以目前主流都不会直接存储这样的数据,而只存储其访问路径,文件则存放在磁盘上。

约束

主键约束:如果为一个列添加了主键约束,那么这个列就是主键,主键的特点是唯一且不能为空。通常情况下,每张表都会有主键

非空约束:如果为一个列添加了非空约束,那么这个列的值就不能为空,但可以重复。

唯一约束:如果为一个列添加了唯一约束,那么这个列的值就必须是唯一的(即不能重复),但可以为空。

基础函数

lower:SELECT 'ABC',LOWER('ABC') from dept; --数据转小写

length:select length(dname) from dept --数据的长度

substr:SELECT dname,SUBSTR(dname,1,3) FROM dept; --截取[1,3]

concat:select dname,concat(dname,'123')  from dept --拼接数据

replace:select dname,replace(dname,'a','666') X from dept --把a字符替换成666

ifnull:select ifnull(comm,10) comm from dept2 #判断,如果comm是null,用10替换

round:四舍五入

ceil:向上取整

floor:向下取整

now:select now() -- 年与日 时分秒 select curdate() --年与日 select curtime() --时分秒

year & month & day:select now(),hour(now()),minute(now()),second(now()) from emp ;

条件查询

distinct:SELECT loc FROM dept; SELECT DISTINCT loc FROM dept;

where:

select * from emp

select * from emp where 1=1 --类似没条件

select * from emp where 1=0 --条件不成立

select * from emp where empno=100 --唯一条件

select * from emp where ename='tony' and deptno=2 --相当于两个条件的&关系

select * from emp where ename='tony' or deptno=1 --相当于两个条件的|关系

select name, sal from emp where sal=1400 or sal=1600 or sal=1800;

-- 或

select name, sal from emp where sal in(1400,1600,1800);

select name, sal from emp where sal not in(1400,1600,1800);

like:模糊查询

通配符%代表0到n个字符,通配符下划线_代表1个字符

select * from emp where ename like 'l%' --以l开头的

select * from emp where ename like '%a' --以a结束的

select * from emp where ename like '%a%' --中间包含a的

select * from emp where ename like 'l__' --l后面有两个字符的 _代表一个字符位置

null:

select * from emp where mgr is null --过滤字段值为空的

select * from emp where mgr is not null --过滤字段值不为空的

between and:

SELECT * FROM emp

select * from emp where sal<3000 and sal>10000

select * from emp where sal<=3000 and sal>=10000--等效

select * from emp where sal between 3000 and 10000--等效

limit:

select * from emp limit 2 --列出前两条

select * from emp limit 1,2 --从第二条开始,展示2条记录

select * from emp limit 0,3 --从第一条开始,展示3条记录--前三条

order by:

SELECT * FROM emp order by sal #默认升序

SELECT * FROM emp order by sal desc #降序

聚合 aggregation

count:

select count(*) from emp --底层优化了

select count(1) from emp --效果和*一样

select count(comm) from emp --慢,只统计非NULL的

max / min:

select max(sal) from emp --求字段的最大值

select max(sal) sal,max(comm) comm from emp

select min(sal) min from emp --获取最小值

select min(sal) min,max(sal) max from emp --最小值最大值

SELECT ename,MAX(sal) FROM emp group by ename --分组

sum / avg:

select count(*) from emp --总记录数

select sum(sal) from emp --求和

select avg(sal) from emp --平均数

group by:

SELECT deptno,MAX(sal),AVG(sal) FROM emp

GROUP BY deptno #按照deptno分组

SELECT job,MAX(sal),AVG(sal) FROM emp

GROUP BY job #按照job分组

SELECT deptno,job,MAX(sal),AVG(sal) FROM emp

GROUP BY deptno,job #deptno和job都满足的

having:

select deptno, AVG(sal) from emp
group by deptno #按部门分组
having AVG(sal)<8000 #查询条件,类似where,但是group by只能配合having

#deptno出现的次数
SELECT deptno,COUNT(deptno) FROM emp

GROUP BY deptno #按deptno分组

HAVING COUNT(deptno)>1 #次数多的

事务4个特性ACID

1,原子性: 多条SQL是一个密不可分的整体
2,一致性: 分布式系统里,数据的一致性
3,隔离性: 数据库支持高并发,使用了锁的机制保证了数据的安全
4,持久性: 是指对数据的增删改是持久生效的

隔离级别:
1,read uncommitted:读未提交, 安全性最差,但是效率高
2,read committed:读已提交, 安全性较好,但是效率较差,也是Oracle的默认级别
3,repeatable read:可重复读,安全性适中,但是效率一般,也是MySQL的默认级别
4,serializable:串行化,安全性最高,但是效率太差

MySQL已经为我们提供了事务管理,默认是一条SQL一个事务,如果想要自己管理事务必须有下面的步骤:
1,开启事务:start transaction;
2,执行SQL:增删改的SQL
3,结束事务:commit提交

表关联 association

  • 一对一 one to one QQ和QQ邮箱,员工和员工编号
  • 一对多 one to many 最常见,部门和员工,用户和订单
  • 多对一 many to one 一对多反过来,员工和部门,订单和用户
  • 多对多 many to many 老师和学生,老师和课程

多表联查 join

  • 内连接 inner join
  • 左(外)连接 left join
  • 右(外)连接 right join

索引 index

  • 单值索引:一个索引只包括一个列,一个表可以有多个列
  • 唯一索引:索引列的值必须唯一,但允许有空值;主键会自动创建唯一索引
  • 复合索引:一个索引同时包括多列

数据库查询及事务管理相关推荐

  1. 数据库语言与事务管理

    数据库查询 1.use [库名]/describle[表名] /desc[表名] desc/describle作用一样,desc 是describe的缩写,都是查询表的数据结构, use切换数据库名称 ...

  2. JDBC的数据库的基础事务管理

    Connection conn = JdbcUtils.getConnection(); try {conn.setAutoCommit(false); //设置为手动管理事务执行一系列的jdbc操作 ...

  3. Spring框架(下)JdbcTemplate、声明式事务管理

    Spring框架(下)JdbcTemplate.声明式事务管理 (一)使用JdbcTemplate 1.概述 为了使JDBC更加易于使用,Spring在JDBC API上定义了一个抽象层,以此建立一个 ...

  4. Spring-Boot + Atomikos 实现跨库的分布式事务管理

    一.何为事务 定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作成功,要么都不成功. 其必须遵循的四个原则(ACID): 原子性(Atomicity -- 美 [ˌætəˈ ...

  5. Spring事务管理--(一)数据库事务隔离级别与mysql引擎基础讲解

    一.前言 本篇文章来自网络整理,很简单,但是很实用对于初级和中级工程师. 原创地址1:http://www.cnblogs.com/hollen/archive/2012/05/13/2498309. ...

  6. Spring JDBC-Spring事务管理之数据库事务基础知识

    概述 数据库事务的概念 原子性 一致性 隔离性 持久性 数据并发的问题 脏读dirty read 不可重复读unrepeatable read 幻象读 phantom read 幻象读和不可重复度的区 ...

  7. Spring事务管理amp;数据库隔离级别

    一.spring事务管理 1. 什么是事务 事务(Transaction)是多个操作数据库的步骤(CRUD)的集合,是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可 ...

  8. 数据库 - 事务管理(ACID)隔离级别 事务传播行为

    转载自   数据库 - 事务管理(ACID)隔离级别 事务传播行为 总览: 事务的4大特性(ACID) 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前 ...

  9. Spring的事务管理和数据库事务相关知识

    1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱.         比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱. ...

最新文章

  1. POJ - 3538 - Domestic Networks
  2. 大数据量及海量数据处理算法总结
  3. ANNOTATION PROCESSING 101 by Hannes Dorfmann — 10 Jan 2015
  4. 系统分析与控制_质量体系文件:测量系统分析控制程序
  5. 向左向右向后转python_Turbot与python教程-实现左向旋转
  6. 由.Net类库提供的农历计算(C#农历)
  7. 游戏筑基开发之结构体定义动态数组及常见问题(C语言)
  8. Light Field 光场以及Matlab光场工具包(LightField ToolBox)的使用说明
  9. 华为笔试题 字符串解压缩(C语言解法)
  10. 企业信息管理系统(1)_系统页面框架分析
  11. 抖音小店商品如何挂到精选联盟上面?带货有什么技巧方法?
  12. 大数据知识的基本介绍,大数据的特点主要包含哪几个?
  13. 蓝桥杯及其搜索算法总结
  14. 华芯微特SWM181学习笔记--GPIO应用与环境搭建
  15. oracle dul for windows 一键打开,oracle 数据恢复
  16. 回溯法之递归回溯和迭代回溯
  17. 计算机专业看重CPU还是显卡,组装电脑时CPU和显卡选择哪个重要?
  18. Mongodb 安装详解
  19. 可动平行平板电容建模策略
  20. 【小白入门】Socket和webSocket入门 这一篇就够了!用php的Socket自己实现简单webSocket服务器!

热门文章

  1. python object对象转dict字典(支持递归)
  2. 2019年区块链技术趋势预测,加密货币将会大规模普及
  3. pyecharts绘制漏斗图
  4. 智慧屏鸿蒙,横空出世 揭开鸿蒙真容!荣耀智慧屏抢先体验
  5. 数分-理论-大数据3-HDFS
  6. python画四边形_Python之OpenGL笔记(12):画纹理四边形
  7. VBoxManage新建主机使用已有虚拟盘
  8. MySQL之INNER JOIN的用法
  9. Flash鼠绘入门第七课:绘制一串逼真的葡萄-Flash鼠绘一串逼真的葡萄1
  10. 泛读:基于机器学习的雷达辐射源识别方法综述