MySQL必会
SQL语言对大小写不敏感,但一般使用大。
1.创建数据库
CREATE DATABASE test;
2.授予权限
CRANT ALL ON test.* to user(s);
3.使用指定数据库
USE test;
4.删除数据库(可删除数据库里所有的表数据,并将其从系统中删除)
DROP DATABASE test;
5.创建一个字符串列,login,两个整形列,userid、projid
CREATE TABLE user (login VARCHAR(8),userid INT,projid INT);
6.删除数据库中的一个表,并清空其中的所有数据
DROP TABLE users;
7.向数据库插入一个新行,需要指定表名以及其中每列的值。
INSERT INTO users VALUES('leanna',211,1);
8.更新行
UPDATE users SET projid=4 WHERE projid=2;
UPDATE users SET projid=1 WHERE userid=311;
修改以及存在的行用UPDATE语句。使用SET来确定需要修改的列,并提供条件
来确定修改的行。在一个例子,所有的 project id为2的改为4.
在第二个例子中,将UID为311的用户移动到编号为#1的项目组中。
9.删除行
DELETE FROM users WHERE projid=%d;
DELETE FROM users;
例子1删除指定行,例子2没指定,将所有行删除。
******************************************************************************
例:
+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
| 4 | 微博 | http://weibo.com/ | 20 | CN |
| 5 | Facebook | https://www.facebook.com/ | 3 | USA |
+----+--------------+---------------------------+-------+---------+
10.从数据库中选取数据
SELECT name,country FROM Websites;
从Websites选取name,country
SELECT *FROM websites;
从Websites选取所有列。
11. SELECT DISTINCT country FROM Websites;
从websites选country取出唯一不同的值,也就是说去除重复的。
12.WHERE 用于过滤
SELECT * FROM websites WHERE country ='CN';
从websites取出,country为CN所有国家的网站。
13.''单引号只用作文本,如果是数字不可以用引号。
SELECT *FROM websites WHERE id=1;
14.AND 和 OR 运算符
在使用WHERE可以配上AND 和 OR以增加过滤条件
SELECT *FROM websites WHERE contry='CN' AND alexa > 50;
SELECT *FROM websites WHERE alexa >50 AND(country='CN' OR country='USA' );
15.ORDER BY 用于对结果集排序
ORDER BY 默认从小到大,若想从大到小,需在后面加上DESC
SELECT * FROM websites ORDER BY alexa;
按照alexa从小到大排序
SELECT * FROM websites ORDER BY alexa DESC;
按照alexa从大到小排序
SELECT * FROM websites ORDER BY country,alexa;
按照country和SELECT进行排序
16.INSERT INTO插入语句
不在指定列插入
INSERT INTO websites(name, url, alexa, country) VALUES('百度','https://www.baidu.com/','4','CN');
在指定列中插入行
INSERT INTO websites(name, url,country) VALUES('百度','https://www.baidu.com/',CN');
17.UPDATE 更新数据
UPDATE websites
SET alexa='5000',country='USA'
WHERE name='菜鸟教程';
如果不加WHERE会把表里所有所有alexa和country更改
18.DELETE 删除数据
DELETE FROM websites WHERE name='百度' AND country='CN';
如果要将所有行删除,则不需加WHERE。这个时候会保留表的结构、属性、索引。
DELETE FROM table_name;
DELETE * FROM table_name;
************************************************************************
+-----+---------+-------+------------+
| aid | site_id | count | date |
+-----+---------+-------+------------+
| 1 | 1 | 45 | 2016-05-10 |
| 2 | 3 | 100 | 2016-05-13 |
| 3 | 1 | 230 | 2016-05-14 |
| 4 | 2 | 10 | 2016-05-14 |
| 5 | 5 | 205 | 2016-05-14 |
| 6 | 4 | 13 | 2016-05-15 |
| 7 | 3 | 220 | 2016-05-15 |
| 8 | 5 | 545 | 2016-05-16 |
| 9 | 3 | 201 | 2016-05-17 |
+-----+---------+-------+------------+
SQL函数
19.SQL COUNT()函数 函数返回指定列值的数目
SQL COUNT(*)函数 返回所有行的数目
SQL COUNT(DISTINCT) 返回指定列不同行的数目
SELECT COUNT(count) AS nums FROM access_log //括号里的count什么意思。
WHERE site_id=3;
求sit_id=3时总访问量
SELECT COUNT(*) AS nums FROM access_log;
求"access_log" 表中总记录数
SELECT COUNT(DISTINCT site_id) As nums FROM access_log;
20.SQL SUM()函数 求 指定数字的那一列(count) 的总数。
SELECT SUM(count) As nums FROM access_log;
21.SQL SELECT LIMIT语句
从websites库中选取头两条
SELECT * FROM websites LIMIT 2;
当指定了位置偏移量时,从websites库第3条起取4条时,默认偏移量为0
SELECT * FROM websites LIMIT 1,4;
22.SQL SELECT TOP 语句 也表示取前多少数据
TOP PERCENT:SELECT TOP 50 PERCENT * FROM websites;
表示从websites取前百分之50
23.SQL GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
SELECT site_id,SUM(count) As nums FROM access_log GROUP BY sit_id;
24.SQL HAVING 语句 与WHERE关键字对比去记,因为WHERE无法与聚合函数一起使用。HAVING 子句可以让我们筛选分组后的各组数据。
25.WHERER 与 SELECT连用,在查询数据时做筛选的;在筛选的时候,除了用'=' '>' '<' and or等条件判断之外
还可以使用:'in' 'BETWEEN 1 AND 20' 表示范围。
26.在查询中涉及超过一个表,在查询中使用了函数,列名称很长或者可读性差,需要把两个列或者多个列结合在一起
以上四个条件适合将表或列改为别名。
AS +name
具体用法:SELECT name AS n, country AS c FROM Websites;
就是查询表Websites,将name列与country更名为n或c在输出。同理表的名也可如此更改。AS一般放FROM后使用
SELECT w.name, w.url, a.count,
a.date FROM Websites AS w, access_log AS a
WHERE a.site_id=w.id and w.name="菜鸟教程";
27.SQL INNER JOIN 连接两个表格
找到两个表格的公共部分,一般都是id。将两个表格连接成一个表格。并将将所需要信息提取出来。
SELECT websites.name,access_log.count, access_log.date
FROM websites INTER JOIN access_log
ON websites.id = access_log.site_id
ORDER BY access_log.count;
28.SQL CREATE DATABASE 语句 创建一个库
CREATE DATEBASE my_db; 创建一个名为 "my_db" 的数据库
29.SQL CREATE TABLE 语句 创建一个表
现在想要创建一个名为 "Persons" 的表,包含五列:PersonID、LastName、FirstName、Address 和 City。
CREATE TABLE Persons
(
【column_name1 data_type(size),】
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
30.LIKE 与WHERE 用于筛选字符串
'%a' //以a结尾的数据
'a%' //以a开头的数据
'%a%' //含有a的数据
‘_a_’ //三位且中间字母是a的
'_a' //两位且结尾字母是a的
'a_' //两位且开头字母是a的
SELECT * FROM Websites
WHERE name LIKE '%k';
输出name以k结尾的的行。
--------------------------------------------
1.事物---->保证业务逻辑的完整性
四大特性ACID
1)原子性:数据库操作是不可分割的,要么全做完,要么不执行
2)一致性:数据库操作的顺序与结果无关
3)隔离性:加锁,不受其他事物干扰
4)持久性:任意提交事物,系统保证改变不被丢失,即使数据库出现故障。
2.数据库引擎
* 引擎:数据库操作的底层代码,内部设计数据结构与算法
3.使用事物的情况:当数据被更改时:insert update delete
* 表锁--------必须等到一个人操作完了解锁以后另一个人才能操作
* 行锁--------允许多个人操作一张表,即只要不操作被锁的那一行即可。
* begin开始事物------>上锁----->sql语句---------->产生内存级临时表
* commit------------->将刚刚临时表里的数据转移到数据库
* rollback-------->撤销刚刚操作
4.索引----索引是一种加快检索速度的数据结构
* 数据默认是按照主键索引存储的。
* 索引的分类:
按照建索引的方式
单列索引,即索引只包含一个类
组合索引,即一个索引包含多个列
聚集索引
非聚集索引
* 使用索引的缺点:
建立太多了索引会导致物理开销太大,即会占用太多的内存空间。
增加了对表的维护成本。在对表更改时,不仅要保存数据,还有保存索引文件。
* 对某个列建索引,尽量让这个有比较间单的数据类型,越小处理越快,避开NULL
* 没有索引WHERE一行一行查,有了索引一步到位。
* 对于范围查找的字段索引可能会失效,等值往前写,范围往后写,尽量不用or
* 查看索引 show index from 字段名;
* 创建索引 create index 索引名 on 表名(字段名(字段长度)) 数字可以不用指定长度
* 删除索引 DROP index [索引名] on 表名
5.最左前缀原则
如果对column1,column2,column3建立了联合索引,那么在使用该索引时只有三种组合,它们分别是:column1 、column1 and column2、column1 and column2 and column3,
概括起来就是想要使用右边的索引,必须用上左边的所有索引。如果只使用column2作为where的查询条件,将不会用到所建好的索引。这是为什么呢?请看表2。这就好比直接用月薪作为查询条件,
有没有发现月薪是呈全局乱序的状态,尽管它是局部有序的。
如果业务上要求只能用月薪来查询,可行的解决办法是在建立联合索引时把月薪放在最左边,或者直接建立单列索引。
建立联合索引时,数据粒比较小的放大左边
6.索引的本质其实就是新建了一张表,而表本质上的数据结构就是树形结构,所以索引也是树形结构
7.聚集索引:聚集索引的顺序就是数据存储的物理顺序,一个表只能包含一个聚集索引。所以查找更快
非聚集索引:非聚集索引存储在一个地方,数据存储在另一个地方,索引带有指针指向数据存储位置。
索引中的项目按引健值的顺序存储,而表中的信息按另一种顺序存储。
InnoDB的数据文件本身就是索引文件。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。
8.聚合
COUNT\MAX\MIN\(id) SUM\AVG---必须是(int 或 double)
原始数据看到了,只能看结果。
9.子查询,查询里面嵌套查询
10.分组
分组一般与聚合连用。分组的目的为了更好的统计,非聚合字段不能出现结果集。
分组依据一般是一个字段里相同的会被分到一块去
11.分组后筛选用WHERE
WHERE对原始集进行筛选,HAVING 对分组后的结果集进行筛选。
12.关联表查询
连接分为内链接inner JOIN、左连接 left JOIN 、 右right JOIN
三种连接的差异就在于结果集能显示出来的数据不同,使用内链接,结果集只能显示出两个表匹配上的信息。
使用left join 在显示两个表匹配上信息的基础上,额外还会增加的是左边表独有的信息,没匹配上的用NULL
使用right join 在显示两个表匹配上信息的基础上,额外还会增加的是右边表独有的信息,没匹配上的用NULL
具体操作方式 SELECT 查询的信息用.表示 FROM tablename1
INNER JOIN/LAFT JOIN/ RIGHT JOIN ON tablename1. = tablename2.
13.查询语句顺序
先结果集——然后关联——然后WHERE 筛选——然后GROUP BY/ORDER BY ——然后HVING 对分组过的结果集筛选
14.分页用limit 每页m条数据,当前显示n页
limit n *m ,m n从0开始
15.一索引二级索引
一级索引:
innoDB会自动建立聚集索引,即将数据与索引存放在一起。使用B+tree的数据结构,将数据存储在叶子结点,
各个叶子结点通过指针相连。
1) InnoDB通常根据主键值(primary key)进行聚簇
2) 如果没有创建主键,则会用一个唯一且不为空的索引列做为主键,成为此表的聚簇索引-----自增id
3) 上面二个条件都不满足,InnoDB会自己创建一个虚拟的聚集索引,隐藏。
辅助索引:
在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找。辅助索引叶子节点存储的不再是行的物理位置,而是主键值。
通过辅助索引首先找到的是主键值,再通过主键值找到数据行的数据叶,再通过数据叶中的Page Directory找到数据行。
即二级索引是我们后建的,它只存储了部分的数据。如果根据键值查找到的数据不能包括全部目标数据时
(就是无法使用到覆盖索引),就需要通过二级索引的指针,也就是键值对中的值,来找到聚簇索引的全部数据,
然后根据完整的数据取出所需要的列的过程就称之为回表。
16.行级锁和页级锁会出现死锁,表锁不会。
表锁的好处是上锁解锁快,并且能避免出现死锁。
17.使用锁是为了保持数据的一致性,但要避免死锁,死锁是两个或多个事物在同一资源上相互占用,并请求锁定对方的资源,
从而导致恶性循环的现象。
常见的解决死锁的方法
1、如果不同程序会并发存取多个表,尽量约定以相同的顺序访问表,可以大大降低死锁机会。
2、在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率;
3、对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率;
如果业务处理不好可以用分布式事务锁或者使用乐观锁
18.乐观锁与悲观锁
悲观锁:
悲观锁指对数据被意外修改持保守态度,依赖数据库原生支持的锁机制来保证当前事务处理的安全性,
防止其他并发事务对目标数据的破坏或破坏其他并发事务数据,
将在事务开始执行前或执行中申请锁定,执行完后再释放锁定。这对于长事务来讲,
可能会严重影响系统的并发处理能力。 自带的数据库事务就是典型的悲观锁。
乐观锁:
乐观锁(Optimistic Lock),顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,
但是在提交更新的时候会判断一下在此期间别人有没有去更新这个数据。乐观锁适用于读多写少的应用场景,这样可以提高吞吐量。
一般是加一个版本号字段 每次更新时候比较版本号
19.innodb的主键是主索引,MyISAM的主键与辅助没什么区别,存的是数据的地址。
所以InnoDB要求表必须有主键(MyISAM可以没有)InnoDB的所有辅助索引都引用主键作为data域。
聚集索引搜索是很高效的,而辅助索引必须遍历两遍。遍历第一遍获得主键,根据主键检索。
MySQL必会的更多相关文章
- 《MySQL 必知必会》读书总结
这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...
- mysql学习--mysql必知必会1
例如以下为mysql必知必会第九章開始: 正則表達式用于匹配特殊的字符集合.mysql通过where子句对正則表達式提供初步的支持. keywordregexp用来表示后面跟的东西作为正則表達式 ...
- 《MySQL必知必会》[01] 基本查询
<MySQL必知必会>(点击查看详情) 1.写在前面的话 这本书是一本MySQL的经典入门书籍,小小的一本,也受到众多网友推荐.之前自己学习的时候是啃的清华大学出版社的计算机系列教材< ...
- mysql必知必会系列(一)
mysql必知必会系列是本人在读<mysql必知必会>中的笔记,方便自己以后查看. MySQL. Oracle以及Microsoft SQL Server等数据库是基于客户机-服务器的数据 ...
- 《mysql必知必会》读书笔记--存储过程的使用
以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...
- mysql必知必会
春节放假没事,找了本电子书mysql必知必会敲了下.用的工具是有道笔记的markdown文档类型. 下面是根据大纲已经敲完的章节,可复制到有道笔记的查看,更美观. # 第一章 了解SQL## 什么是S ...
- 《MySQL必知必会》官方提供的数据库和表
数据用于配合<MySQL必知必会>(MySQL Crash Course)这本书使用,配套SQL文件也可在Ben Forta网站下载. Ben Forta网址:http://forta.c ...
- mysql学习--mysql必知必会
上图为数据库操作分类: 下面的操作參考(mysql必知必会) 创建数据库 运行脚本建表: mysql> create database mytest; Query OK, 1 row ...
- MySQL必会的28条经典查询
MySQL必会的28条经典查询 原创作品.转载请注明出处https://blog.csdn.net/kk123k 表结构及测试数据请看我上一篇文章:学生选修成绩表测试数据 Student(Sno, ...
- MySQL使用和操作总结(《MySQL必知必会》读书笔记)
简介 MySQL是一种DBMS,即它是一种数据库软件.DBMS可分为两类:一类是基于共享文件系统的DBMS,另一类是基于客户机——服务器的DBMS.前者用于桌面用途,通常不用于高端或更关键应用. My ...
随机推荐
- RecycleView + SwipeRefreshLayout 实现下拉刷新和底部自动加载
前段时间项目里面使用了RecycleView 但是里面的刷新和加载都是框架里面封装好的,直接使用 这几天比较闲就自己来实现以下. 因为SwipeRefreshLayout是一个下拉刷新控件所有直接和R ...
- ubuntu14.04安装rabbitmq
ubuntu14.04安装rabbitmq及配置 1.修改/etc/apt/sources.list文件 命令:vi /etc/apt/sources.list 在最后一行加上:deb http: ...
- (四)svn 服务器端的使用之创建工程目录
仓库中存放开发项目代码.文档等,需要创建一个工程目录. 在之前创建的仓库中右键点击: 创建成功 trunk:项目开发代码的主体,是从项目开始直到当前都处于活动的状态,从这里可以获得项目最新的源代码以及 ...
- oracle-2_dblink的创建和使用
一.创建dblink 1.查询创建dblink表 SELECT * FROM DBA_DB_LINKS; ); BEGIN SELECT COUNT(*) INTO I FROM DBA_DB_LIN ...
- python常用模块(二)
1.ConfigParser模块 用于生成和修改配置文档,在python3.x中变更为configparser 1 [DEFAULT] 2 ServerAliveInterval = 45 3 Com ...
- May 16th 2017 Week 20th Tuesday
The most fearful enemy is not having a firm conviction. 最可怕的敌人,就是没有坚强的信念. A firm conviction or belie ...
- 从产品展示页面谈谈Hybris的特有概念和设计结构
今天这篇文章来自我的同事,SAP成都研究院Hybris开发团队的开发人员Zhang Jonathan(张健).需要特别介绍的是,张健和成都研究院的其他开发同事不同,张健毕业于电子科技大学,读的专业是英 ...
- IOS UIDevice距离传感器(打开 关闭)
● 什么是传感器 ● 传感器是一种感应\检测装置, 目前已经广泛应用于智能手机上 ● iPhone5中内置的传感器有 ● 运动传感器\加速度传感器\加速计(Motion/Acceleromet ...
- bzoj4999 This Problem Is Too Simple!
Description 给您一颗树,每个节点有个初始值. 现在支持以下两种操作: 1. C i x(0<=x<2^31) 表示将i节点的值改为x. 2. Q i j x(0<=x&l ...
- PIL 图像字符画绘制
from PIL import Image ascii_char = list('"$%_&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]? ...