必备知识

MySQL的增删改查

# 增
insert Course values (1,'语文课')
# 删
delete from Course where c_id=1
# 改
update Course set name='音乐课' where c_id=1
#多表更新
update mmpp mp, mm m set mp.name = m.name where mp.id=m.id and mp.name='' # 查
select * from Course

MySQL的存储过程

# 最简单的存储过程
create procedure test ()
begin
select '许嵩';
end # 调用存储过程
call test();
# 删除存储过程
drop procedure test;

扩展知识

使用命令框登录MySql

mysql -u root - p

显示目前所有的数据库

show databases;

显示创建的数据库的编码格式

show create database shuyunquan;

引用数据库

use shuyunquan

查看当前引用的数据库

select database();

创建表

create table userInfo(
username varchar(20),
userage int
)

显示当前引用的数据库的所有表

show tables;

显示指定数据库的所有的表

show tables from mysql;

显示表里面的所有列名

show columns from user;

向表中插入一条数据

insert user values(1,'许嵩',32,'男');

向表中添加新列

alter table user add telphone int not null first;

删除某列

alter table user drop telphone;

只查询表中的若干条记录,limit加数字(SQL Server是top)

select * from user limit 2;

创建一个无参的存储过程

create procedure getVersion()
select version();

调用这个无参的存储过程,无参的加不加()都可以

call getVersion();

创建一个有参数的存储过程,这里需要讲一下,参数分为in和out两种,in是输入的参数,out是作为返回的参数,变量。下面这个存储过程就是,删除某个id的用户,返回当前用户的总个数,unsigned是非负数的意思

create procedure removeuserById(in id int unsigned,out counts int unsigned)
begin
delete from user where id=id;
select count(*) from user into counts;
end
//

调用的时候

call removeuserById (1,@count);
select @count;

移除存储过程

drop procedure removeuserById;

MySql的存储引擎,所谓的存储引擎就是把数据存储到内存或者文件中采用到技术和方式,有以下几种

  1. MyISAM
  2. InnoDB
  3. Memory
  4. CSV
  5. Archive

MySql并发操作

什么是并发操作呢?例如两个用户同时访问我的表,一个删除id为1的数据,一个访问id为1的数据,这就叫做并发,这样显然是会出错的,解决办法是锁。

锁机制

锁分为两种

  1. 共享锁(读锁):同一时间段内,多个用户可以读取同一条数据
  2. 排他锁(写锁):在任何时候,只能有一个用户写入资源,当进行写锁的时候会阻塞其他用户的读锁或写锁操作

锁颗粒

表锁,是一种开销最小的锁策略

行锁,是一种开销最大的锁策略

注意事项

插入必须写name,多条insert必须加分号

Mysql插入信息的时候,必须写name,不写字段name的话插入不了数据,主键还要插数据?

INSERT MemoryDocument (`MemoryCategoryId`, `Name`, `Description`, `Url`, `ApproveStatus`, `CreateManagerId`, `CreateTime`, `UpdateManagerId`, `UpdateTime`) VALUES(1,'文档9','描述内存信息描述内存信息描述内存信息描述内存信息描述内存信息描述内存信息描述内存信息描述内存信息','asd',1,1,'2019/10/15',1,'2019/10/19');

还要,如果我想插入多条数据,必须每一条数据后面加上一个分号 ???这是啥操作

INSERT MemoryDocument (`MemoryCategoryId`, `Name`, `Description`, `Url`, `ApproveStatus`, `CreateManagerId`, `CreateTime`, `UpdateManagerId`, `UpdateTime`) VALUES(1,'文档9','描述内存信息描述内存信息描述内存信息描述内存信息描述内存信息描述内存信息描述内存信息描述内存信息','asd',1,1,'2019/10/15',1,'2019/10/19');
INSERT MemoryDocument (`MemoryCategoryId`, `Name`, `Description`, `Url`, `ApproveStatus`, `CreateManagerId`, `CreateTime`, `UpdateManagerId`, `UpdateTime`) VALUES(1,'文档10','描述内存信息描述内存信息描述内存信息描述内存信息描述内存信息描述内存信息描述内存信息描述内存信息','asd',1,1,'2019/10/15',1,'2019/10/20');

不加分号的话无法执行多条insert.......

拼接字符串不能使用+,使用concat方法

我的mysql语句是这样的

UPDATE MemoryCategory set Remark=Remark+'test';

这样是错误的,因为mysql拼接字符串使用的不是+,而是 concat ,报的错误:截断了错误的DOUBLE值

正确的写法如下

UPDATE MemoryCategory set Remark=CONCAT(Remark,'test');

分组之后获取每组的前30条数据

这个写法我看不懂

select * from (select MemoryParameterName, MemoryParameterValue, count(MemoryParameterValue) as num from MemoryParameter where MemoryCategoryId=1 group by  MemoryParameterName, MemoryParameterValue) as t
where (
select count(*)
from (select MemoryParameterName, MemoryParameterValue, count(MemoryParameterValue) as num from MemoryParameter where MemoryCategoryId=1 group by MemoryParameterName, MemoryParameterValue) as tt
where tt.MemoryParameterName = t.MemoryParameterName
and tt.num > t.num
) < 30
order by MemoryParameterName,num desc

字段去除最后一个字符

select name, left(name,length(name)-1) from Vae.Student where namelike '%-'

Mysql删除delete in 超级慢

我的MySQL语句是这样的

delete from VaeDB.Person where Id in (
SELECT id
FROM VaeDB.Person
WHERE status = 0
);

因为数据量比较大,结果你猜咋滴,执行了几十分钟还没有结果.........

原因就是因为我delete in里面的查询是直接查询的原表,我写的是select ... from VaeDB.person,这样不好,特别慢,可以写一个临时表,把数据全部读取到内存里面,这样就快了

delete from VaeDB.Person where Id in (
select id from(
SELECT id
FROM VaeDB.Person
WHERE status = 0
) t
);

速度从几十分钟执行不完到现在10s执行完成,看来我的数据库能力急需突破菜鸟级别

MySql笔记二:命令简介的更多相关文章

  1. Mysql 笔记二

    Mysql 笔记二 Mysql 笔记二 Table of Contents 1. 前言 2. Master Thread 工作方式 2.1. 主循环(loop) 2.2. 后台循(backgroup ...

  2. MySql笔记(二)

    目录 MySQL笔记(二) 一幅画,一次瞬间的回眸,就在那次画展上,那个眼神,温柔的流转,还是那干净的皮鞋,一尘不染,俊朗的眉宇性感的唇,悄悄走近,牵手一段浪漫 MySQL笔记(二) 13.条件查询 ...

  3. MySQL优化Explain命令简介(二)

    type列 MySQL手册上注明type列用于描述join type,不过我们认为把这一列视为对access type--即MySQL决定如何在表中寻找数据的方式的描述,更加合适一些,以下所示从最坏情 ...

  4. MySQL优化Explain命令简介(一)

    最近碰到MySQL需要写入大量数据并查询的场景,于是学习了一下MySQL的查询优化,想找关于explain命令的详细资料,然而网上并没有找全,最后终于在<高性能MySQL>中找到了对这一命 ...

  5. MySQL笔记二

    Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...

  6. [嵌入式培训笔记]----Linux命令简介

    Linux文件系统的结构类似一棵树,是从一个树根生长出来的.树根叫做/.从树根长出很多分叉,就这么一直生长下去.我们使用Linux操作系统的时候总是落在某个分叉上.ls命令可以帮助我们查看当前分叉上所 ...

  7. MySQL--高性能MySQL笔记二

    人们通常使用varchar(15):来存储IP地址,然而它们其实是32位无符号整数,不是字符串,所以应该使用无符号整数存储IP地址,MySQL 提供 INET_ATON() 和 INET_NTOA() ...

  8. linux 学习笔记二

    笔记二 命令行格式 command [-options] parameter1 parameter2 ... 命令 选项 参数(1) 参数(2) options 和 参数 不是必须的 帮助命令 man ...

  9. python3.4学习笔记(二十五) Python 调用mysql redis实例代码

    python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...

随机推荐

  1. python之旅5【第五篇】

    装饰器详解 函数刚开始不解析内部,只是放进内存 装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以在函数执行前和执行后添加相应操作. 1 下面以一个函数开始,理解下面 ...

  2. 微信小程序——安装开发工具和环境【二】

    准备 开发工具下载 获取APPID 安装工具 安装 接受协议 选择安装位置 等待安装完成 安装完成 选择项目 选择小程序 填写信息 确定 无误后,点击确定进入开发页面 建立普通快速启动模板界面

  3. Appium环境的安装以及一路上的坑

    Appium环境的安装以及一路上的坑 第一步环境的安装 l  javaJDK的安装以及环境变量的配置这个我就不说了网上的教程全都是,搜一个安装一下吧 l  AndroidSDK的安装也是如此我是直接安 ...

  4. Destroying the bus stations HDU - 2485(最小割点)

    题意: 就是求最小割点 解析: 正向一遍spfa 反向一遍spfa  然后遍历每一条边,对于当前边 如果dis1[u] + dis2[v] + 1 <= k 那么就把这条边加入到网络流图中, 每 ...

  5. 【BZOJ1580】【USACO2009Hol】杀手游戏 计算几何

    题目描述 一个平面上有很多个点在运动.给你每个点的初始坐标和每个点的速度,求出最多有多少个点到\(0\)号店的距离同时不超过\(r\). \(n\leq 50000\) 题解 我们先把\(0\)号点平 ...

  6. zabbix 自定义 windows 监控项

    zabbix获取windows服务器上数据C:\zabbix_agents\conf\zabbix_agentd.win.confUserParameter=conncount,d:\\tools\\ ...

  7. Android LinearLayout 渐变背景

    更多  参考 Drawable Resources | Android Developers main_header.xml: <?xml version="1.0" enc ...

  8. 51nod 1081 子段求和(线段树 | 树状数组 | 前缀和)

    题目链接:子段求和 题意:n个数字序列,m次询问,每次询问从第p个开始L长度序列的子段和为多少. 题解:线段树区间求和 | 树状数组区间求和 线段树: #include <cstdio> ...

  9. POJ 1845 Sumdiv(逆元)

    题目链接:Sumdiv 题意:给定两个自然数A,B,定义S为A^B所有的自然因子的和,求出S mod 9901的值. 题解:了解下以下知识点   1.整数的唯一分解定理 任意正整数都有且只有唯一的方式 ...

  10. 单片机的外围功能电路 LET′S TRY“嵌入式编程”: 2 of 6

    单片机的外围功能电路 LET′S TRY“嵌入式编程”: 2 of 6 本连载讲解作为嵌入式系统开发技术人员所必需具备的基础知识.这些基础知识是硬件和软件技术人员都应该掌握的共通技术知识. 上期在&l ...