Mysql基本sql知识

Navicat快捷方式:

选中当前行

在行尾:shift+home

在行首:shift+end

执行当前行:ctrl+shift+R

复制当前行:ctrl+D

显示所有数据库

Show databases;

创建数据库

Cteate database 数据库名;

删除数据库

Drop database 数据库名;

创建表(not null如果加上,添加数据的时候必须不能为空,否则添加数据的时候就会报错  tabname:表名 col:字段名称  type:类型)

Create table tabname(

Col1 type1 ,

Col2 type2 not tull,

Col3 type3 not null

);

根据已有的表创建新的表(table_new:新表名  table_old:旧表名)

Create table table_new like table_old;

删除表(tabname:表名)

Drop table tabname;

增加一个列(tabname:表名  col:字段名称  type:类型)

Alter table tabname add column col type;

单表查询(select)

1.1 查询所有字段

Select * from 表名;

1.2 查询指定字段

Select 字段1,字段2,字段3, from 表名;

1.3 where条件查询语句

Select * from 表名 where 条件表达式;

1.4 带in 关键字查询

Select * from 表名 where 字段 in (元素1,元素2)

Ps:select * from tabname where age in (25,35) 查询年龄22-35之间的数据。同理,还有一个not in 就是查询25-35之外的数据

1.5 带 between and 的范围查询

Select * from 表名where 字段 between 元素1 and 元素2;

Ps:select * from tabname where age between 20 and 30;

同理,还有一个not between and 就是查询不在20-30之外的数据

1.6 带like的模糊查询

Select 字段1,字段2,字段3 from 表名 where 字段 [not]like字符串;

“%”代表任意字符串 “_”代表单个字符串

Ps:

select * from tabname where t_name like ‘张三*’; 张三丰,张三疯小,张三疯大

Select * from tabname where t_name like ‘张三_’;  张三丰,张三疯

Select * from tabname where t_name like ‘张三__’; 张三疯小,张三疯大

Select * from tabname where t_name like ‘%张三%’; 小张三,张三疯,张三疯小大......

1.7 空值查询

Select * from 表名 where 字段 is null;

Select * from 表名 where 字段 is not null;

1.8 带and的多条件查询

Select * from 表名 where 条件表达式1 and 条件表达式2 and......条件表达式n;

1.9 带or的多条件查询

Select * from 表名 where 条件表达式1 and 条件表达式2 and......条件表达式n;

2.0 去重复查询 (distinct)

Select distinct字段 from 表名;

Ps: select distinct t_name from users

2.1 对查询结果进行排序(asc:升序 desc:降序)

Select * from 表名 order by 属性名 asc; (默认是升序);

Select * from 表名 order by 属性名 desc;

2.2 group by 分组查询

  1. 单独使用 (毫无意义)
  2. 与group_concat()函数一起使用;

Ps: select grade group_concat(t_name) from tabname group by grade;

  1. 与聚合函数一起使用(group by);

Ps: select gradename count(t_name) from tabname group by gradename;

  1. Having 筛选

Ps: select gradename count(t_name) from tabname group by gradename having count(t_name)>3;

E. 与with rollup 一起使用(最后加入一个总行数)

Ps:select gradename count(t_name) from tabname group by gradename with rollup;

2.3  limit分页查询

Select * from 表名 limit 初始位置,记录数;

Ps: select * from tabname limit 0,5;

Select * from tabname limit 5,5;

Select * from tabname limit 10,5;

注解:这是一个分页查询的sql语句,其中“,”前面的0,5,10都是每页的起始位置, “,”后面的5是每页分5条数据。

使用聚合函数查询 (聚合函数通常都是和group by一起使用)

3.1 count()函数:用来统计记录的条数

3.2 sum()函数:求和函数

3.3 avg()函数:求平均值的函数

3.4 max()函数:求最大值的函数

3.5 min()函数:求最小值的函数

连接查询

内连接查询:是一种常用的连接查询,内连接查询可以查询两个或两个以上的表

SELECT * FROM t_book,t_bookType where t_book.bookTypeId=t_bookType.id;

左连接

SELECT*FROM t_book tb LEFT JOIN t_bookType tbt ON tb.bookTypeId=tbt.id;

右连接

SELECT * FROM t_book tb RIGHT JOIN t_bookType tbt ON tb.bookTypeId=tbt.id;

多条件查询

SELECT * FROM t_book,t_bookType where t_book.bookTypeId=t_bookType.id and ...and...;   (在后面跟上and+条件)

子查询

带in关键字的子查询

取别名

给表取别名:...表名 表的别名...

给字段取别名:...字段名 as 字段的别名...  (as 不是必须的)

索引

1.普通索引

这类索引可以创建在任意数据类型中;

2.唯一性索引

使用UNIQUE参数可以设置,在创建唯一性索引时,限制该索引的值必须是唯一的;

3.全文索引

使用FULLTXT参数可以设置,全文索引只能创建在char,varchar,txt类型的字段上,主要作用就是提高查询较大字符串类型的速度,只有MAISAM引擎支持该索引,mysql默认引擎不支持

4.单列索引

在表中给单个字段创建索引,单列索引可以是普通索引,可以是全文索引,也可以是全文索引。

5.多列索引

多列索引是在表的多个字段创建一个索引。

6.空间索引

使用SPATLAL参数可以设置空间索引。空间索引只能创建在空间数据类型上,这样可以提高系统获取空间数据的效率。只有MAISAM引擎支持该索引,mysql默认引擎不支持。

话不多说,创建索引吧!

Create table 表名(

属性名 数据类型 限制性条件(如:not null,primary key...),

属性名 数据类型 限制性条件(如:not null,primary key...),

......

属性名 数据类型 限制性条件(如:not null,primary key...),

index 别名(属性名)

)

总的来说,用语句创建索引,其实就是正常创建表的时候在后面加上 index (表名);  唯一性索引在index前面加UNIQUE,全文索引在index前面加FULLTXT,空间索引在前面加SPATLAL,多列索引是index(属性名1,属性名2)。

Create table 表名(

属性名 数据类型 限制性条件(如:not null,primary key...),

属性名 数据类型 限制性条件(如:not null,primary key...),

......

属性名 数据类型 限制性条件(如:not null,primary key...),

UNIQUE | FULLTXT | SPATLAL index 别名(属性名)

)

别名这个东西看自己需求,不起的话也有默认的。

如果表已经创建好了,如何再用语句给字段加索引呢? 看下面语句,一共是两种方法,实现的效果都是一样的。

第一种:

Create UNIQUE | FULLTXT | SPATL index 索引名 on 表名(属性名);

第二种:

Alter table 表名 add index 别名(属性名);

删除索引

Drop index 索引名 on 表名;

视图

1.视图是一个虚拟的表,是从数据库中一个或多个表导出来的表。

2.数据库中只存放了视图的定义,而并没有存放视图中的数据,这些数据都放在原来的表中。

3.使用数据查询数据时,数据库系统会从原来的表中取出相应的数据。

视图的作用:

1.使操作简便化。

2.增加数据的安全性。

3.提高表的逻辑独立性。

创建视图

CREATE [ALGORITHM={UNDEFIEND | MERGE | TEMPTABLE}]

VIEW 视图名[(属性清单)]

AS SELECT语句

[WITH  [ CASCADED | LOCAL] CHECK OPTION ];

ALGORITHM 是可选参数,表示视图所选的算法;

“视图名”参数表示要创建视图的名称;

“属性清单是可选参数,其指定了视图中各个属性的名词,默认情况下,与SELECT 语句参数是一个完整的查询语句,标识从某个表查出某些满足条件的记录,将这些记录导入视图中,WITH CHECK OPTION是可选参数,表示更新视图时要保证在该视图的权限范围内”;

ALGORITHM 包括3个选项  UNDEFIEND 、MERGE、 TEMPTABLE。

其中,UNDEFIEND 选项表示mysql将自动选择所需要使用的算法;MERGE选项表示将使用视图的语句和视图定义合并起来,使得视图定义的某一部分取代语句的对应部分;TEMPTABLE选项表示把视图的结果存入临时表,然后使用临时表执行语句;

CASCADED 是可选参数,表示更新视图时要满足所有所有视图和表的条件,该参数为默认值;LOCAL表示更新视图时,要满足该视图本身定义的条件即可。

当然,上述讲的我也不是特别理解,了解点基础的视图创建吧!

Create view 视图名 as select语句。

Ps:CREATE VIEW v1 AS SELECT * FROM t_book;

CREATE VIEW v1(a,b...) AS SELECT id,name FROM t_book;

这样其实就已经实现视图的创建了,第二个例子中的a,b 其实也是字段重命名,把后面的id和name改成了a,b。(注:多表也可以创建一个视图,后面的select语句不变)

输入:select * from v1;  这样就可以查看你刚才所建的视图了。

其实后面的select语句就是我们正常所需要查询的语句,只不过用视图建了一个虚拟的表,这里面是没有物理数据的,你可以通过如下的方法来查看视图和正常表的区别:

Describe 视图名;       ------查看视图的基本信息

Show table status like ‘视图名’;      ------查看视图的状态

Show table status like ‘表名’;   两者对比,可以发现视图只是个虚表

Show create view 视图名;      ------查看视图详细信息

在数据库中自带的information_schema数据库中有一个VIEWS 也可以查看已经创建视图的信息

修改视图

1.1 create or replace view 视图名(属性名1,属性名2...属性名n) as select ...    ------有则修改,无则创建

Ps:CREATE OR REPLACE VIEW v1(bookName,price) AS SELECT bookName,price FROM t_book;

1.2 alter view 视图名 as select...      ------在已有视图中修改,视图必须存在

Ps:ALTER VIEW v1 AS SELECT * FROM t_book;

更新视图

更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为视图是一个虚拟的表,其中没有数据。通过视图更新时,都是转换基本表来更新。更新视图时,只能更新权限范围以内的数据,超出了范围,就不能更新。

其实更新视图你就把它当做数据库表的更新

Ps:insert into v1 values(属性名1,属性名2...属性名n);

------插入

update v1 set 属性名=’字段1,字段2...字段n’ where id = 1;      ------更新

delete from v1 where id=1;      ------删除

删除视图

drop view v1;       ------删除视图不会影响数据库中表的数据,因为视图本身只是一个虚拟的表

触发器

Mysql常用函数

存储过程和函数

数据备份和还原

mysql基本知识的总结的更多相关文章

  1. Mysql数据库知识-Mysql索引总结 mysql mysql数据库 mysql函数

    mysql数据库知识-Mysql索引总结: 索引(Index)是帮助MySQL高效获取数据的数据结构. 下边是自己整理的资料与自己的学习总结,,做一个汇总. 一.真的有必要使用索引吗? 不是每一个性能 ...

  2. Mysql存储过程知识,案例--mysql存储过程基本函数

    Mysql存储过程知识,案例: create procedure delete_setting(in p_settingid integer) begin delete from setting wh ...

  3. MySQL高级知识(十六)——小表驱动大表

    前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里.在查询的优化中永远小表驱动大表. 1.为什么要小表驱动大表呢 类似循环嵌套 for(int i=5 ...

  4. MySQL高级知识(十五)——主从复制

    前言:本章主要讲解MySQL主从复制的操作步骤.由于环境限制,主机使用Windows环境,从机使用用Linux环境.另外MySQL的版本最好一致,笔者采用的MySQL5.7.22版本,具体安装过程请查 ...

  5. MySQL高级知识(十四)——行锁

    前言:前面学习了表锁的相关知识,本篇主要介绍行锁的相关知识.行锁偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突的概率低,但并发度高. 0.准备 #1.创建相关测试表tb_ ...

  6. MySQL高级知识(十三)——表锁

    前言:锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算机资源(如CPU.RAM.I/O等)的争用外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是 ...

  7. MySQL高级知识系列目录

    MySQL高级知识(一)——基础 MySQL高级知识(二)——Join查询 MySQL高级知识(三)——索引 MySQL高级知识(四)——Explain MySQL高级知识(五)——索引分析 MySQ ...

  8. MySQL高级知识(十二)——全局查询日志

    前言:全局查询日志用于保存所有的sql执行记录,该功能主要用于测试环境,在生产环境中永远不要开启该功能. 1.如何开启 #1.通过my.cnf配置开启该功能. 注:对my.cnf文件配置后,需重启my ...

  9. MySQL高级知识(十一)——Show Profile

    前言:Show Profile是mysql提供的可以用来分析当前会话中sql语句执行的资源消耗情况的工具,可用于sql调优的测量.默认情况下处于关闭状态,并保存最近15次的运行结果. 1.分析步骤 # ...

  10. MySQL高级知识(十)——批量插入数据脚本

    前言:使用脚本进行大数据量的批量插入,对特定情况下测试数据集的建立非常有用. 0.准备 #1.创建tb_dept_bigdata(部门表). create table tb_dept_bigdata( ...

随机推荐

  1. FFmpeg——命令笔记

    1. 获取 dshow设备列表 ffmpeg -list_devices true -f dshow -i dummy 2. 通过UDP流推ts文件: ffmpeg.exe -re -i zhen.t ...

  2. Using webpack-dev-server

    官方讲解地址:https://webpack.js.org/guides/development/#using-webpack-dev-server The webpack-dev-server pr ...

  3. Day11 - N - Game HDU - 3389

    题目链接 题意是说有1到n个标号的盒子,选择一个非空的盒子A,B是否空无所谓,满足(A+B)%2=1,(A+B)%3=0,A>B 解上面的同余方程组,最小解为3,循环为2*3=6,那我们可以把前 ...

  4. springcloud-zuul进阶篇

    一 前言 经过zuul初级篇(博客或者公主号springcloud专栏可以找到)的学习,读者都懂得如何简单的使用zuul进行路由网关配置,在进阶篇中你将获得zuul核心功能过滤器的基本使用,通过zuu ...

  5. C语言笔记 13_排序算法

    排序算法 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小.首字母从A到Z)错误就把他们交换过来. 过程 ...

  6. python的沙盒环境--virtualenv

      VirtualEnv用于在一台机器上创建多个独立的python运行环境,VirtualEnvWrapper为前者提供了一些便利的命令行上的封装. 使用 VirtualEnv 的理由: 隔离项目之间 ...

  7. No module named 'PyQt5.QtWebEngineWidgets' 解决方法

    “No module named 'PyQt5.QtWebEngineWidgets”报错的原因是PyQt5版本过高,解决方法主要有两大类方法: [方法一] 指定安装5.10.1版本的pyqt5 pi ...

  8. Linux--add the PPA to your system

    Add a PPA to your system with a single line in your terminal step1:on the PPA's overview page,look f ...

  9. 二、多线程基础-乐观锁_悲观锁_重入锁_读写锁_CAS无锁机制_自旋锁

    1.10乐观锁_悲观锁_重入锁_读写锁_CAS无锁机制_自旋锁1)乐观锁:就像它的名字一样,对于并发间操作产生的线程安全问题持乐观状态,乐观锁认为竞争不总是会发生,因此它不需要持有锁,将 比较-设置 ...

  10. 「BJWC2012」冻结

    传送门 Luogu 解题思路 分层图最短路,层与层之间的边的边权减半,然后就是板子了. 细节注意事项 咕咕咕. 参考代码 #include <algorithm> #include < ...