mysql基本知识的总结
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 分组查询
- 单独使用 (毫无意义)
- 与group_concat()函数一起使用;
Ps: select grade group_concat(t_name) from tabname group by grade;
- 与聚合函数一起使用(group by);
Ps: select gradename count(t_name) from tabname group by gradename;
- 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基本知识的总结的更多相关文章
- Mysql数据库知识-Mysql索引总结 mysql mysql数据库 mysql函数
mysql数据库知识-Mysql索引总结: 索引(Index)是帮助MySQL高效获取数据的数据结构. 下边是自己整理的资料与自己的学习总结,,做一个汇总. 一.真的有必要使用索引吗? 不是每一个性能 ...
- Mysql存储过程知识,案例--mysql存储过程基本函数
Mysql存储过程知识,案例: create procedure delete_setting(in p_settingid integer) begin delete from setting wh ...
- MySQL高级知识(十六)——小表驱动大表
前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里.在查询的优化中永远小表驱动大表. 1.为什么要小表驱动大表呢 类似循环嵌套 for(int i=5 ...
- MySQL高级知识(十五)——主从复制
前言:本章主要讲解MySQL主从复制的操作步骤.由于环境限制,主机使用Windows环境,从机使用用Linux环境.另外MySQL的版本最好一致,笔者采用的MySQL5.7.22版本,具体安装过程请查 ...
- MySQL高级知识(十四)——行锁
前言:前面学习了表锁的相关知识,本篇主要介绍行锁的相关知识.行锁偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定粒度小,发生锁冲突的概率低,但并发度高. 0.准备 #1.创建相关测试表tb_ ...
- MySQL高级知识(十三)——表锁
前言:锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算机资源(如CPU.RAM.I/O等)的争用外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是 ...
- MySQL高级知识系列目录
MySQL高级知识(一)——基础 MySQL高级知识(二)——Join查询 MySQL高级知识(三)——索引 MySQL高级知识(四)——Explain MySQL高级知识(五)——索引分析 MySQ ...
- MySQL高级知识(十二)——全局查询日志
前言:全局查询日志用于保存所有的sql执行记录,该功能主要用于测试环境,在生产环境中永远不要开启该功能. 1.如何开启 #1.通过my.cnf配置开启该功能. 注:对my.cnf文件配置后,需重启my ...
- MySQL高级知识(十一)——Show Profile
前言:Show Profile是mysql提供的可以用来分析当前会话中sql语句执行的资源消耗情况的工具,可用于sql调优的测量.默认情况下处于关闭状态,并保存最近15次的运行结果. 1.分析步骤 # ...
- MySQL高级知识(十)——批量插入数据脚本
前言:使用脚本进行大数据量的批量插入,对特定情况下测试数据集的建立非常有用. 0.准备 #1.创建tb_dept_bigdata(部门表). create table tb_dept_bigdata( ...
随机推荐
- C-当把数组传递给函数
#include <stdio.h> /** * C语言中,数组的名称就是 一连串连续内存的起始地址, * 因此给数组传递给函数,传递的就是数组元素类型的指针 */ ]); void he ...
- 46 求1+2+3+...+n 静态成员函数和静态变量
题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 思路: 1)使用构造函数的方法,需要使用sta ...
- 使用gitthub 创建项目搭建博客
最近在学Andrew Ng 的机器学习,做了上买那个的练习题和变成作业,想着把自己做的编程作业放到GitHub,方便讨论,虽然之前注册了GitHub,但这两年整天在毕设方向的事,做的身心俱疲,再加上自 ...
- 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 ...
- C/C++网络编程1——linux下实现
网络编程就是编写程序使两台联网的计算机相互交换数据. 例子:服务器端开启一个socket,监听9999端口.客户端向服务器端发起请求,服务器端收到请求以后,给客户端发送一句:"hello w ...
- ssh_crm项目
1.代码 https://pan.baidu.com/s/1hudAhA8 密码:c7xu 2.总结 https://pan.baidu.com/s/1o9ArFf0 密码:hteu 3.资料 ht ...
- js判断数组中是否包含某个元素
参考:http://www.runoob.com/jquery/misc-inarray.html js判断数组中是否包含某个元素 $.inArray( value, array [, fromInd ...
- ODT珂朵莉树
关于ODT,据说是毒瘤lxl发明的,然后毒瘤鱼鱼因为我用ODT误导人D了我一回-- 这是一种基于 \(set\) 的暴力数据结构. 在使用时请注意,没看见这2东西千万别用-- 1.保证数据随机 2.有 ...
- kafka-console-consumer接收不到flume推送过来的消息
原因和解决方法:需要先启动kafka,再启动flume,两者启动有先后顺序.
- vue移动端transition兼容
vue移动端transition兼容 .face-recognition .wrapper(:style="{height: viewHeight+'px'}") .face-re ...