《MYSQL必知必会》
1、 同一个数据库中不允许出现同名表;不同的数据库中可以出现同名表
2、 每一行记录都用有一个key(一列或一组列作为key)
3、 作为key的列不允许值为空(NULL)
4、 多个列作为key时,多个列的组合必须唯一,但其中单个列的值可以不唯一
5、 好习惯:作为key的列的取值最好不要变
6、 SQL是操作数据库的结构化查询语言;MYSQL是一种数据库管理系统,即是一种数据库软件
7、 MYSQL、 Oralcle、SQL Server等数据库都是基于客户机-服务器的数据库
8、 查看所有数据库:show databases;
切换数据库:use 数据库名;
切换到某个数据库后,看数据库中的所有表:show tables;
查看表中所有列:show columns from 表名;或者:describe 表名
显示允许的show语句:help show
9、 SQL语言不区分大小写 如select和SELECT 意思是一样的
10、除非确实需要表中的每个列,否则别用*,检视不需要的列会降低性能
11、去掉重复的行:select distinct vend_id from products;
Distinct 放在列的前面;distinct应用于所有列,不仅是前置它的列
12、只要查询结果中的前几行:select name from produdct limit 5 order by time;
只要查询结果中的第4~9行:Select name form product limit 5,5 order by time;
Limite + 开始行+行数
13、一般order by后面接的是查询的列,其实用非检索的列也是可以的!!!
14、默认按升序排序;明确指定按升序排:asc
15、按降序排:select price,name for product order by price desc,name;
Distinct是对所有列有效,desc只对其前面的那一列有效
Distinct加在列名前面,desc加在列名后面
若多个列想按降序排,则多个列都要在后面加上desc
16、Select name,price from prodct where name = ‘fuses’;
用来筛选的列是字符串类型,所以要加单引号
17、Select price from product where price between 5 and 10;
18、若列中不包含值,则称其包含空值NULL
空值检查:select price from product where price is null;
19、NULL与不匹配:在通过过滤选择不具有特定值的行时,你可能希望返回具有NULL值的行,但是,不行
20、where中的字句可以用and 或or 方式连接
select * from product where price>10 and id = 1003;
select * from product where id =1003 or id =1006;
21、where子句中即有and也有or时,应该用圆括号明确的进行分组
where (id =1002 or id=1003) and price >=10;
22、in和or的功能相当,但in更快,且in可以包含其他select语句
where id in (1002,1003)
23、not 常与 in、between、exists 一起用
where id not in (1003,1004)
24、% 表示任何字符出现任意次数(当然报错0次)
-下划线只匹配单个字符
Select name form product where name like ‘jet%’;
Where name like ‘jet-‘;
25、若数据库中的anvil后面有空格,用’%anvil’是匹配不上的
26、尽量不要使用通配符,因为有了通配符,搜索速度会很慢;
把通配符置于搜索模式的开始处,搜索速度最慢
27、第9章正则表达式没怎么看
28、将字段进行拼接时,多数数据库管理系统使用+或||来实现拼接,但MYSQL则使用concat函数来拼接
Select concat(name,country) as title from vendors;
用AS定义列名,亦可用AS修改当前的列名(重命名)
29、去掉查询结果中字段的空格:RTrim、LTrim、Trim
30、Select quantity ,price,quantity*price as expand_price from order;
MYSQL支持 + - * /
31、对日期操作时,建议使用yyyy-mm-dd这种格式,消除了多义性
32、数据库中存的是2005-09-01 11:30:05,用date()获取日志部分
Where date(order_date)=’2001-09-01’
可以通time()获取时间部分
33、检索2005年9月下的订单:where year(order_date)=2005 and month(order_date)=9
34、SQL常用聚集函数:AVG、COUNT、MAX、MIN、SUM
35、COUNT(*)不忽略值为NULL的列;COUNT(列名)忽略值为NULL的列
36、统计数量和:select sum(quantity) as test from order
统计总价:select sum(price*quantiry) as totalprice from order
37、计算各个不同价格的平均值:select sum(distinct price) form order
38、分组:group by ; 过滤分组having
按id进行分组,计算每组的行数:Select id,count(*) from order group by id
39、Having类似where,以为差别是where过滤的是行,having过滤的是分组
Where在分组前进行过滤;having在分组后进行过滤
列出具有2个以上,价格为10以上的产品供应商:
Select id,cout(*) from order where price>10 group by id having count(*)>2;
40、Select id, sum(quantiry*price) as total from order group by id order by total
41、Select 子句顺序:
Select ->from ->where ->group by ->having ->order by->limit
42、外键:外键为某表中的一列,它包含另一个表的主键值,定义了两个表之间的关系
43、联结:从多个表中查数据:select vend_name,product_name price from vend, product where vend.vend_id=product.vend_id;
所有联结都应该有where语句,否则返回的是笛卡尔积
44、联结是耗时的,联结的表越多,性能下降的越厉害!
45、外部联结:联结包含了那些在相关表中没有关联行的行
如查询每个客户下单数量,包括尚未下过单的,一个是客户表一个是订单表,有的客户在订单表中无相应记录
Select customers.id ,orders.num from customers left outer join orders on orders.id=customers.id
46、使用外部联结outer join,必需包含关键字right或left
47、union组合查询等价于多一个where条件,这两种技术在不同的查询中性能也不通;但where代替不了union all
48、Union中的每个查询必需包含相同的列、表达式或聚集函数
49、Union主要用于如下两种场景:
1) 从不同的表返回类似数据
2) 对同张表执行多个查询
Select id from order where id in(1002,1005) union select id from order where price >100;
50、Union从查询结果中自动去掉了重复的行,若不想去掉重复行,可以用union all
51、第18章,全文搜索 需要再看
52、全文搜索类似like,但比like要快,因为它建立了索引
53、当数据库被多个客户访问时,若select是最重要的,则可以在insert和into之间天爱关键词low_priority,指示MYSQL降低insert语句的优先级,update、delete也是
54、Insert into 表名(列名)values(列值),(列值)
Update tbl_order set name =’11’ where id =0;
Delete from tbl_order where id = 0;
55、从一个表中读数据,插入到另一个表中:Insert select
Insert into order (name,age) select id,old from customers;
56、更新多行时,若某一行更新失败,则整改更新失败,错误之前更新的行也被恢复成原来的值。
即使某条更新错误,也要继续更新,可以使用ignore关键字,如:
Update ignore tbl_name ……..
57、删除表中所有行,可以用truncate table;这个速度更快。他是删掉原表,再建一个新表
58、创建表:create table 表名
(列名 列的属性 是否可以为空 默认值 ,
Id int not null default 1 ,
…….,
Primary key (id))
59、仅在不存在时创建:creat table if not exists 表名
《MYSQL必知必会》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- Spring容器AOP的理解
一句话理解:根据被代理对象信息通过Proxy动态生成我们具体的代理类. 实现就动态代理.那动态代理是什么呢? 动态代理其实并不是什么新鲜的东西,学过设计模式的人都应该知道代理模式,代理模式就是一种静态 ...
- SpringBoot(五)-- 整合Spring的拦截器
一.步骤 1.创建我们自己的拦截器类并实现 HandlerInterceptor 接口. 2.创建一个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptor ...
- CentOS7--配置时间和日期
CentOS7提供三个命令行工具,可用于配置和显示有关系统日期和时间的信息. timedatectl:Linux 7中的新增功能,也是systemd其中的一部分. date:系统时钟,也成为软件时钟, ...
- (iOS)使用auto layout进行复杂布局时,UILabel的相关trick
本文转载至 http://blog.csdn.net/madongchunqiu/article/details/47960745 本文首发于CSDN:http://blog.csdn.net/ma ...
- MySql数据库设计表添加字段
当要添加的字段属于整型,需要设置默认值 或者: alter table fp_user_base add hasPwd tinyint(4) not null default 0;
- WP8.1学习系列(第二十三章)——到控件的数据绑定
在本文中 先决条件 将控件绑定到单个项目 将控件绑定到对象的集合 通过使用数据模板显示控件中的项目 添加详细信息视图 转换数据以在控件中显示 相关主题 本主题介绍了如何在使用 C++.C# 或 Vis ...
- WP8.1学习系列(第六章)——中心控件Hub面板部分交互UX
本主题中呈现的模型类似于适用于 Windows Phone 的具有主页菜单(中心或透视控件)的中心应用中描述的模型.正如之前的案例所示,你要向用户呈现不同的功能区域.此处的区别在于你可以在顶层呈现所有 ...
- 【抓包分析】 charles + 网易mumu 模拟器数据包
charles 的使用.我就不再多说了.可以参考以往文章,传送门: https://www.cnblogs.com/richerdyoung/p/8616674.html 此处主要说网易模拟器的使用 ...
- 支持向量机SVM进阶
本文适合于对SVM基本概念有一点了解的童鞋. SVM基本概念: 最大边缘平面--基本原理:结构风险最小化 分类器的泛化误差 支持向量 问题描述: 请对一下数据,利用svm对其进行分类. 最 ...
- 分布式实时日志系统(一)环境搭建之 Jstorm 集群搭建过程/Jstorm集群一键安装部署
最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式 ...