1 数据库简介

数据库就是存储数据,管理数据的仓库。

常见的数据库分为:

关系型数据库:Oracle、MySQL、SQLServer、Access

非关系型数据库:MongoDB、Redis、ElasticSearch、Hive、Solr、HBase

1.1 Mysql组成模块

视图:

视图本质就是一个查询,和我们自己查询的区别是,它执行完会有缓存,下次查询就直接使用。

视图只需创建一次,后面就可以类似表来使用,只是用来查询不能更新和删除

1.2 表设计

PowerDesinger设计工具。

1.3 表结构

1.3.1 字段类型

字符串类型:

(1)char(n)在保存数据时,如果存入的字符串长度小于指定的长度n,后面会用空

格补全,因此可能会造成空间浪费,但是char类型的存储速度较varchar和text快。

因此char类型适合存储长度固定的数据,这样就不会有空间浪费,存储效率比

后两者还快!

(2)varchar(n)保存数据时,按数据的真实长度存储,剩余的空间可以留给别的数

据用,因此varchar不会浪费空间。

因此varchar适合存储长度不固定的数据,这样不会有空间的浪费。

(3)text是大文本类型,一般文本长度超过255个字符,就会使用text类型存储。

数字

tinyint:占用1个字节,相对于java中的byte

smallint:占用2个字节,相对于java中的short

int:占用4个字节,相对于java中的int

bigint:占用8个字节,相对于java中的long

其次是浮点类型即:float和double类型

float:4字节单精度浮点类型,相对于java中的float

double:8字节双精度浮点类型,相对于java中的doubl

日期

date 包含年月日

datetime包含年月日和时分秒

timestamp时间戳,不是日期,而是从1970年1月1日到指定日期的毫秒数

图片

blob 二进制数据,可以存放图片、声音,容量4g。早期有这样的设计,但目前主流都不会直接存储这样的数据,而只存储其访问路径,文件放在磁盘上

1.3.2 约束

主键约束

如果为一个列添加了主键约束,那么这个列就是主键,主键的特点

是唯一且不能为空。

create table stu( id int primary key, ... );

唯一约束

如果为一个列添加了唯一约束,那么这个列的值就必须是唯一的

(即不能重复),但可以为空。

create table user( username varchar(50) unique not null, ... );

非空约束

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

以重复。

create table user( password varchar(50) not null, ... );

默认约束

外键其实就是用于通知数据库两张表数据之间对应关系的这样一个列。

2 数据库简单命令

2.1 CRUD

增加:

自增

insert into tb_stu(id,name,sex) values(1,'tony',1)

修改:

修改,修改字段,必须设置where条件

update tb_stu set name='jack',sex=1

where id =1

删除:

删除一条记录,必须有where条件

delete from student where id=3;

删除所有数据

delete from student;

查询:

#查询所有数据

SELECT * FROM student;

#id为1的记录

SELECT * FROM student WHERE id=1;

2.2 简单函数

UPPER()变大写 LOWER()变小写

SELECT ename,UPPER(ename),LOWER(ename) FROM emp

LENGTH()查长度

SELECT ename,LENGTH(ename)FROM emp

SUBSTR 子串,截串 第一个元素,要截的原串,从第几个开始截,截多少

SELECT ename,SUBSTR(ename,1,2)FROM emp

CONCAT 拼串 从哪里开始拼,拼什么

SELECT CONCAT(dname,'(',loc,')')FROM dept

replace 替换

SELECT loc,REPLACE(loc,'区','区域') FROM dept;

round 四舍五入/ceil 向上进位/floor 向下去掉

SELECT ename,

comm,ROUND(comm,1),ROUND(comm,2),

CEIL(comm),

FLOOR(comm) FROM emp;

uuid 生成一个唯一36位字符串

2.3 日期函数

SELECT NOW()

2020-02-10 12:20:00

SELECT CURRENT_DATE()

2020-02-10

SELECT CURRENT_TIME()

12:20:00

LAST_DAY(hiredate) 每月最大日期

SELECT ename,hiredate,LAST_DAY(hiredate) FROM emp

YEAR MONTH DAY

SELECT hiredate,YEAR(hiredate),MONTH(hiredate),DAY(hiredate) FROM emp

date_format 日期转字符串,注意格式的大小写

SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s')

str_to_date()字符串转日期

SELECT STR_TO_DATE('2020-05-08','%Y-%m-%d')

2.4 条件查询

distinct 去重

SELECT DISTINCT * FROM emp;

where 过滤数据

SELECT * FROM emp WHERE empno=100;

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

SELECT * FROM emp WHERE ename LIKE 't%'; #t字母开头,效率高

SELECT * FROM emp WHERE ename LIKE '%n%'; #中间含有n,惯用

SELECT * FROM emp WHERE ename LIKE 't___'; #3个下划线

SELECT * FROM emp WHERE ename LIKE '__n%'; #2个下划线

and&or 并且,或者

SELECT * FROM dept WHERE dname='accounting' AND loc='一区';

SELECT * FROM dept WHERE dname='accounting' OR loc='二区';

null 空

SELECT * FROM emp WHERE mgr IS NULL;

SELECT * FROM emp WHERE mgr IS NOT NULL;

nvl 如果为空进行替换,mysql不支持,可替换ifnull使用

SELECT ename,sal*13+nvl(comm,0)*13 FROM emp

SELECT mgr,nvl(mgr,'空')FROM emp

between-and 查询范围 上面的包括自身,下面更灵活

SELECT * FROM emp WHERE sal BETWEEN 5000 AND 10000

SELECT * FROM emp WHERE sal>=5000 AND sal<=10000

union 把多个结果集合并,前提条件,两个结果集列对应,类型可以不一致,个数需要一致

SELECT empno AS NO,job AS DNAME FROM emp

UNION

SELECT deptno AS NO,loc AS DNAME FROM dept

limit 列表分页,不是返回所有数据,当前页数据

SELECT * FROM emp LIMIT 1 返回一条记录

SELECT * FROM emp LIMIT 0,2 第一页数据

SELECT * FROM emp LIMIT 2,2 第二页数据

SELECT * FROM emp LIMIT 4,2 第三页数据

2.4 子查询

子查询是指嵌入在其他select语句中的select语句,也叫嵌套查询。

单行子查询 = 后面查询结果只为一个值

SELECT * FROM dept WHERE deptno=(SELECT deptno FROM emp WHERE ename = 'tony')

多行子查询 in

SELECT * FROM emp WHERE job IN('副总','总监','经理')

3 数据库高级命令

3.1 聚合

count 记录总数,习惯使用*的方式,推荐使用后两种方式

select * from emp;

select count(*) from emp;

select count(*) from emp where ename like 't%';

select count(1) from emp;

select count(empno) from emp;

max 最大值;min 最小值;avg 平均值;sum 总和

SELECT MAX(sal) FROM emp;

SELECT min(sal) FROM emp;

SELECT avg(sal) FROM emp;

SELECT sum(sal) FROM emp;

3.2 分组和排序

group by 用于对查询的结果进行分组统计

每个部门,每个岗位的最高工资和平均工资,并排序

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

GROUP BY deptno,job

ORDER BY MAX(sal)

统计时非统计字段必须分组

排序order by

order by ename ASC默认升序/DESC降序,

字符串按ascii顺序,数字按大小,日期字符串

3.3 集合

union 并集去重:

select * from dept where loc='一区'

union

select * from dept where loc='二区'

union all 并集:

会有重复数据,不进行合并

select * from dept

union all

select * from dept

intersect 交集:

select * from dept where loc is not null

intersect

select * from dept

3.4 多表联查

INNER JOIN 内链接

SELECT dept.dname,emp.empno,emp.ename FROM emp INNER JOIN dept ON emp.deptno=dept.deptno

LEFT JOIN 左链接,左边表为主,左边出现就列出,如果右边表没有对应记录,展示null

right join 右链接

SELECT d.dname,e.empno,e.ename FROM emp e LEFT JOIN dept d ON e.deptno=d.deptno

4 事务

4.1 事务的条件

一般来说,事务是必须满足4个条件(ACID):原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中如果发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

4.2 事务的隔离级别

脏读:事务A读取了事务B未提交的数据。

不可重复度:事务A多次读取同一份数据,事务B在此过程中对数据修改并提交,导致事务A多次读取同一份数据的结果不一致。

幻读:事务A修改数据的同时,事务B插入了一条数据,当事务A提交后发现还有数据没被修改,产生了幻觉。

不可重复读侧重于update操作,幻读侧重于insert或delete。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表。

5 索引

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。

索引的种类:

聚集索引(主键索引):在数据库里面,所有行数都会按照主键索引进行排序。

非聚集索引:就是给普通字段加上索引。

联合索引:就是好几个字段组成的索引,称为联合索引。

B+树索引。

文章来源: segmentfault.com,作者:木安,版权归原作者所有,如需转载,请联系作者。

原文链接:segmentfault.com/a/1190000038274475

mysql数据库deptno_数据库-Mysql相关推荐

  1. is this mysql server_远程连接MySQL数据库报错:is not allowed to connect to this MYSQL server的解决办法...

    1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入MySQL后,更改 "mysql" 数据库里的 " ...

  2. mysql注册数据库_基于mysql数据库的注册

    前期准备: 1.下载并安装mysql数据库5.X版本即可 2.学习相关的sql语法 3.在lib包导入mysql-connector-java-5.1.38-bin.jar数据库连接的jar包 创建数 ...

  3. Mysql备份还原数据库之mysqldump实例及参数详细说明

    我们在运营项目的过程中肯定会遇到备份数据库,还原数据库的情况,我们一般用一下两种方式来处理: 1.使用into outfile 和 load data infile导入导出备份数据 这种方法的好处是, ...

  4. java 操作mysql数据库得到错误码_[数据库/Java]数据库开发过程中产生的MySQL错误代码及其解决方案...

    前言 吐槽一下,均是这两天遇到的破烂事儿,搞定了也好,以后出现此类问题也就放心些了. 下列遇到的问题大都是因为MySQL从5.x版本升级到8.0.11(MySQL8.0涉及重大改版)后,跟着连带着出现 ...

  5. mysql管理用户数据库_MySQL 数据库管理(一)(用户与受权)

    前言 在企业信息化的过程当中,数据库中库和表都会大量存在,须要分配给管理者核实的权限进行操做 合理地分配权限,可使数据库管理井井有理,各个管理者只须要关注本身负责的内容,也可避免误操做对系统形成损失 ...

  6. mysql 多少个数据库_mysql数据库的几个基本概念

    1.表 数据库表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构.行是记录,列是字段,每一列表示记录的一个属性,都有相应的描述信息. 2.数据类型:数据类型决定了数据在计算机中的存储格式,代表 ...

  7. mysql 按日期删除数据库_DAY11 - MySQL入门(数据库的增、删、改、查 基本操作)...

    一. 数据库的介绍 二. MySQL的基本语法 l 注释: 单行注释: #注释内容 单行注释: -- 注释内容(注意,两个"--"之后有一个空格) 多行注释: /*注释内容*/ l ...

  8. MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限

    2019独角兽企业重金招聘Python工程师标准>>> 1.新建用户 //登录MYSQL @>mysql -u root -p @>密码 //创建用户 mysql> ...

  9. 热烈庆祝“mysql 集群数据库架构成功”

    坚持了两周,终于在linux下把mysql集群数据库给架起来了!下面简单说明下集群数据库原理 第一:集群数据库分MGM,NDBD,SQL 其中MGM是相当于"中央政府",维持NDB ...

最新文章

  1. owdcloud mysql_MySQL在Ubuntu远程配置
  2. GitLab基本设置-新增用户
  3. Mac下配置svn服务器
  4. mysql报警代码183_mysql启动报错:/usr/bin/mysqld_safe: line 183: 23716 Killed
  5. Java jar 修改(springfox-swagger-ui-2.9.2.jar 修改去掉顶部的绿色topbar,汉化)
  6. python中is、id、==与浅拷贝和深拷贝
  7. 华为 Mate 40 系列搭载麒麟 9000 芯片;短视频平台 Quibi 宣布关闭;Node.js 15 正式版发布|极客头条
  8. shell 面试题 (一) 待续
  9. 软件测试人员应具备的素质
  10. pytorch 中 torch.optim.Adam
  11. flash 倒计时功能
  12. JAVA 初级程序员常见问题分析
  13. 服务器项目管理软件,项目管理软件-Microsoft Project.pdf
  14. 有什么办法可以让微信群二维码永久有效?这类的二维码生成器怎么制作?
  15. 笃行务实 布萌区块链选择数字资产作为区块链行业突破口
  16. android 九宫格图片工具,Android 图片选择、预览、九宫格图片控件、拖拽排序九宫格图片控件...
  17. 台式计算机能不能安装蓝牙驱动,台式电脑没有蓝牙该怎么安装?安装台式电脑的蓝牙的方法...
  18. 【dp - 多重背包】575: Coin Changing
  19. Android实现更换头像功能(适配Android7.0版本)
  20. java如何利用rotate旋转图片_JAVA对图片的任意角度旋转,以及镜像操作

热门文章

  1. php mysql 免费_国内最常用的PHP+MySql免费CMS系统大全
  2. android对接华为游戏实名认证没有手动输入身份证的方式
  3. 校运动会c语言程序编写,C语言课程设计 校际运动会管理系统.pdf
  4. 区块链的关键技术是哪些技术
  5. ORALE11G数据导入ORACLE9i方法
  6. 【斯坦福CS224W】图机器学习图神经网络-Task01-图机器学习导论
  7. The super tiny compiler(超级小的编译器)
  8. 荣耀v30和红米k30pro的区别 哪个好
  9. 透露一下我分享文章的几个平台(附PDF文章下载)
  10. C语言实现的简易计算器