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. C-当把数组传递给函数

    #include <stdio.h> /** * C语言中,数组的名称就是 一连串连续内存的起始地址, * 因此给数组传递给函数,传递的就是数组元素类型的指针 */ ]); void he ...

  2. 46 求1+2+3+...+n 静态成员函数和静态变量

    题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 思路: 1)使用构造函数的方法,需要使用sta ...

  3. 使用gitthub 创建项目搭建博客

    最近在学Andrew Ng 的机器学习,做了上买那个的练习题和变成作业,想着把自己做的编程作业放到GitHub,方便讨论,虽然之前注册了GitHub,但这两年整天在毕设方向的事,做的身心俱疲,再加上自 ...

  4. How to recover if NMC cound not connect

    Some times we suddently find that the NMC can not login,. You would see the sybase database error if ...

  5. C/C++网络编程1——linux下实现

    网络编程就是编写程序使两台联网的计算机相互交换数据. 例子:服务器端开启一个socket,监听9999端口.客户端向服务器端发起请求,服务器端收到请求以后,给客户端发送一句:"hello w ...

  6. ssh_crm项目

    1.代码 https://pan.baidu.com/s/1hudAhA8  密码:c7xu 2.总结 https://pan.baidu.com/s/1o9ArFf0 密码:hteu 3.资料 ht ...

  7. js判断数组中是否包含某个元素

    参考:http://www.runoob.com/jquery/misc-inarray.html js判断数组中是否包含某个元素 $.inArray( value, array [, fromInd ...

  8. ODT珂朵莉树

    关于ODT,据说是毒瘤lxl发明的,然后毒瘤鱼鱼因为我用ODT误导人D了我一回-- 这是一种基于 \(set\) 的暴力数据结构. 在使用时请注意,没看见这2东西千万别用-- 1.保证数据随机 2.有 ...

  9. kafka-console-consumer接收不到flume推送过来的消息

    原因和解决方法:需要先启动kafka,再启动flume,两者启动有先后顺序.

  10. vue移动端transition兼容

    vue移动端transition兼容 .face-recognition .wrapper(:style="{height: viewHeight+'px'}") .face-re ...