MySQL基础 快速浏览 加深印象

93 阅读9分钟

建库:create database 库名;

使用库:use 库名;

建表: create table 表名(

.........,

........,

........

);

修改表结构:

修改表名:alter table 表名 rename 新表名;

添加字段:alter table 表名 add(...........);

删除字段:alter table 表名 drop 字段名;

等等。。。。

对表数据操作:

添加新数据:insert into 表名 values(所有字段数据);

            insert into 表名(字段名) value(字段数据);

查询表数据:select * from 表名;(查看所有数据信息)

            Select 字段名 from 表名;(多个字段用逗号隔开)

修改/更新:update 表名 set 字段=新值,字段2=新值 where 字段=值;

删除表的全部数据:delete from 表名 ;

索引 索引的唯一作用是查询时提高效率,索引是某列或某些列

上的一个“目录”

手动创建索引:create index 索引名 on 表名(字段名);

查询索引:show index from 表名;

视图: 视图看上去像一个数据表,但是他不是数据表,因为他本身不能存储数据,视图只是一个或多个数据表中数据的逻辑显示,使一个查询结果的表,方便以后查询,经常在多表联查时使用,字段较多时使用

   使用视图的好处:

        可以限制对数据的访问

        可以使复杂的查询变得简单

        提供了数据的独立性

        提供了对相同数据的不同显示

  创建视图:create or replace view 视图名 as 语句 ;

例如:create view chaxun as SELECT *FROM stu;

创建了一个名为chaxun的视图用来查看stu表所有数据信息

添加外键:

  constraint外键名 foreign key(表字段) references 主表名(主表字段) on update cascade on delete CASCADE

 表和表之间的关系通过外键来产生

数据备份:

cmd:数据备份:mysqldump -u用户名 -p密码 数据库名> 将要存放的位置;

取出:建个新库   source 你存放备份的位置;

使用小黄(Navicat Premium):

image.png

在要备份的数据处右键 有转储sql文件选项 选择你要备份的文件名和位置

取出:新建一个库 右键运行sql文件

image.png

查询:

 

基础查询:

image.png

条件查询:

条件查询就是在查询时给出where子句,在where子句中可以使用如下运算符及关键字--

=、!=、<>、<、>、<=、>=;

Between---and;   between a and b; a和b的值都能取到;

In(set);

Is null;

And;

Or;

Not;

模糊查询:

对字符串类型的列值进行的

Like(像) ‘_’代表一个任意字符  ‘%’代表任意个任意字符

字段控制查询

去除重复记录

select deptno from emp;

select distinct  deptno from emp;

去空,select字段和 

from emp; //一个列值是null 再跟其他的非null列值 如果做加法运算 结果是null

select,sal+ifnull(comm,0) from emp; //如果comm字段中有空值的话就用0来代替空

起别名 给列起别名,给表起别名  as可以省略

select sal+ifnull(comm,0) as '月薪与奖金和' from emp;

select sal+ifnull(comm,0) '月薪与奖金和' from emp;

select e.ename, e.sal+comm from emp e; --给表起别名 用在多表查询时

排序 ;

  order BY 某列    asc升序(默认 可以省略) desc降序

select *from 表名 order by 列名 desc,列名 desc;//先在表中按第一个列降序排序,如果出现相等的情况就再按第二个列值的降序排

聚合函数:

image.png

聚合函数通常跟分组函数一起使用

分组: group by 某列

--按照工作种类分组查询每个工作及整个组中的人数

select 工作列,count() from 表名 group by 工作列 order by count();

--按照部门号分组,查部门号和整个部门中入职日期最晚的那个日期

Select 部门号列,MAX(日期列) from 表名 group by 部门号列;

--按照部门号分组,查部门号和每个个部门的最大薪资,薪资总和,最小薪资,平均薪资

select 部门号列,MAX(薪资列),SUM(薪资列),MIN(薪资列),AVG(薪资列) from 表名group by 部门号列;

--分组查询带条件的

--1分组前条件 对进行分组的记录进行筛选,符合条件的才进组 使用where

--按照部门号进行分组,查部门号和部门里薪资>=15000的人数

select 部门号列,COUNT(*) from 表名where 薪资>=15000 group by 部门号列;

--2分组后条件  having子句

select 部门号列,MAX(薪资列),SUM(薪资列),MIN(薪资列),AVG(薪资列) from 表名group by 部门号列having sum(薪资列)<=90000;

分页查询

limit 下标开始位置,长度

在查询的最后使用limit 下标,条数   限制查询结果

-公式 查第M页 每页N条记录 limit (M-1)*N,N;0.   

Mysql数据库常用函数:

image.png

image.png

image.png

image.png

image.png

image.png

image.png

连接查询:

合并结果集:

先查询多个结果,然后将查询的结果 纵向叠在一起要求多个结果的结构一致

 作用:合并结果集就是把两个select语句的查询结果合并到

一块

合并结果集有两种方式:

UNION:去除重复记录

UNION ALL;不去除重复记录

要求:被合并的两个结果:列数、列类型必须相同

内连接:

先把多个表的字段横向连接起来,再把数据进行结合

mysql 方言: 表一,表二

select *from 表一 ,表二;

Sql: 表一 inner join 表二

select *from 表一 inner join 表二;

 

根据表之间的关联列(外键列) 去除无用的组合数据

 select *from 表一,表二 where 关联列;

Select * from 表一 inner join 表二 on 关联列;

 

自然连接:

帮你自动去除无用的组合数据 natual join

Select *from 表一 natual join 表二;

 


外连接:

以某个表为主要查询表 其他表为次要表,主要表里的数据必须查出来,次要表里如果没有与之对应的数据,则添加null

 左外连接

 表一 lift join 表二 on 关联列

 表一 right join 表二 on 关联列

 

子查询(嵌套查询):

 就是在一个查询里嵌套另一个查询语句

 

事务:

事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃。程序和事务是两个不同的概念。一般而言:一段程序中可能包含多个事务,事务具有四个特性ACID

原子性Atomicity:事务是应用中最小的执行单位,事务是应用中不可再分的最小逻辑执行体。

一致性Consistency:事务执行的结果,必须使数据库从一个一致性状态,变到另一个一致性状态

隔离性Isolation:各个事务的执行互不干扰,任意一个事务的内部操作对其他并发的事务,都是隔离的。也就是说:并发执行的事务之间不能看到对方的中间状态,并发执行的事务之间不能相互影响。

持续性Durability:持续性也成为持久性,指事务一旦提交,对数据所作的任何改变,都要记录到永久存储器中,通常是保存进物理数据库。


三种隔离性问题:

1.脏读问题: B事务读取了A事务中未提交的数据,又做了进一步处理

2.不可重复读:不是一个问题,会在特殊条件下成为问题

B事务在自己的事务时间内,先后两次读取数据的结果不一致,原因是读取了A事务的新修改的数据

3.虚读幻读:不是一个问题,会在特殊条件下成为问题

B事务在自己的事务时间内,先后两次读取数据的结果不一致,原因是读取了A事务的新增的数据

 

数据库提供了四个隔离级别

read uncommitted :什么都不防止

read committed :防止脏读

repeatable :防止脏读和不可重复读

serialization :串行化读 :最高隔离级别,数据库的效率最低

在串行读的情况下 为查询加共享锁,为修改加排他锁,共享锁和共享锁能共存 排他锁和谁都不共存

 

一般的mysql数据库的默认引擎是innodb(事务,外键) 默认的隔离级别是repeatable

一般使用默认的就可以因为串行化防止一切但是效率太低

 

关闭本会话的自动提交

set autocommit=0;

开始事务

start transaction;

事务的提交(commit)和回滚(rollback)

没提交或回滚之前都是一个事务

 

存储过程:

为了完成复杂的数据库操作的一种类似于java方法的语句

一般的存储过程是多句sql所以不能以分号来结束,需要重新定义分隔符,navciat里自动识别存储过程

创建存储过程:

create procedure 存储过程名()

Begin

 

End;

 

调用存储过程:

call 存储过程名();

触发器:

触发器(trigger) 是个特殊的存储过程 ,它的执行不是由程序调用,也不是手工启动而是由事件来触发

触发器经常用于加强数据的完整性约束以及业务规则等

触发器的作用:

1,安全性:可以基于数据库的值使用户具有操作数据库的某种权力。可以基于时间限制用户操作,可以基于数据库中的数据限制用户的操作

2,审计:可以跟踪用户对数据库的操作

3,实现复杂的数据完整性规则

4,实现复杂的非标准的数据库相关完整性规则,触发器可以对数据库相关的表进行连环更新

5,同步的实时复制表中的数据

6,自动计算数据值

创建触发器的sql语句:

Create trigger 触发器名称 触发器执行时间 触发事件 on 表名 for each row

触发器的执行时间,它的值为before或者after是指在激活它的语句之前还是之后执行

触发器的触发事件,它的值可以是insert  update  delete。在这三个动作上我们需要了解数据库里两个临时的虚拟表,在mysql中使用old和new关键字来表示