MySql笔记二:命令简介
必备知识
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的存储引擎,所谓的存储引擎就是把数据存储到内存或者文件中采用到技术和方式,有以下几种
- MyISAM
- InnoDB
- Memory
- CSV
- Archive
MySql并发操作
什么是并发操作呢?例如两个用户同时访问我的表,一个删除id为1的数据,一个访问id为1的数据,这就叫做并发,这样显然是会出错的,解决办法是锁。
锁机制
锁分为两种
- 共享锁(读锁):同一时间段内,多个用户可以读取同一条数据
- 排他锁(写锁):在任何时候,只能有一个用户写入资源,当进行写锁的时候会阻塞其他用户的读锁或写锁操作
锁颗粒
表锁,是一种开销最小的锁策略
行锁,是一种开销最大的锁策略
注意事项
插入必须写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笔记二:命令简介的更多相关文章
- Mysql 笔记二
Mysql 笔记二 Mysql 笔记二 Table of Contents 1. 前言 2. Master Thread 工作方式 2.1. 主循环(loop) 2.2. 后台循(backgroup ...
- MySql笔记(二)
目录 MySQL笔记(二) 一幅画,一次瞬间的回眸,就在那次画展上,那个眼神,温柔的流转,还是那干净的皮鞋,一尘不染,俊朗的眉宇性感的唇,悄悄走近,牵手一段浪漫 MySQL笔记(二) 13.条件查询 ...
- MySQL优化Explain命令简介(二)
type列 MySQL手册上注明type列用于描述join type,不过我们认为把这一列视为对access type--即MySQL决定如何在表中寻找数据的方式的描述,更加合适一些,以下所示从最坏情 ...
- MySQL优化Explain命令简介(一)
最近碰到MySQL需要写入大量数据并查询的场景,于是学习了一下MySQL的查询优化,想找关于explain命令的详细资料,然而网上并没有找全,最后终于在<高性能MySQL>中找到了对这一命 ...
- MySQL笔记二
Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...
- [嵌入式培训笔记]----Linux命令简介
Linux文件系统的结构类似一棵树,是从一个树根生长出来的.树根叫做/.从树根长出很多分叉,就这么一直生长下去.我们使用Linux操作系统的时候总是落在某个分叉上.ls命令可以帮助我们查看当前分叉上所 ...
- MySQL--高性能MySQL笔记二
人们通常使用varchar(15):来存储IP地址,然而它们其实是32位无符号整数,不是字符串,所以应该使用无符号整数存储IP地址,MySQL 提供 INET_ATON() 和 INET_NTOA() ...
- linux 学习笔记二
笔记二 命令行格式 command [-options] parameter1 parameter2 ... 命令 选项 参数(1) 参数(2) options 和 参数 不是必须的 帮助命令 man ...
- python3.4学习笔记(二十五) Python 调用mysql redis实例代码
python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...
随机推荐
- Hibernate中的Entity类之间的继承关系之一MappedSuperclass
在hibernate中,Entity类可以继承Entity类或非Entity类.但是,关系数据库表之间不存在继承的关系.那么在Entity类之间的继承关系,在数据库表中如何表示呢? Hibernate ...
- BZOJ3165[Heoi2013]Segment——李超线段树
题目描述 要求在平面直角坐标系下维护两个操作: 1.在平面上加入一条线段.记第i条被插入的线段的标号为i. 2.给定一个数k,询问与直线 x = k相交的线段中,交点最靠上的线段的编号. 输入 第一行 ...
- BZOJ2616 SPOJ PERIODNI(笛卡尔树+树形dp)
考虑建一棵小根堆笛卡尔树,即每次在当前区间中找到最小值,以最小值为界分割区间,由当前最小值所在位置向两边区间最小值所在位置连边,递归建树.那么该笛卡尔树中的一棵子树对应序列的一个连续区间,且根的权值是 ...
- Android 控件绑定封裝
最近刚开始写android 随便记录一下,以后还会修改 绑定ListView,Spinner 先创建绑定项: BaseItem public class BaseItem { public BaseI ...
- P1282 多米诺骨牌 dp
思路:dp[i][j] 的j是上半段的和的值 这里表示的是达到上半段值是j的最小次数 答案在最小的可达到的j #include<bits/stdc++.h> using namespa ...
- Codeforces1101F Trucks and Cities 【滑动窗口】【区间DP】
题目分析: 2500的题目为什么我想了这么久... 考虑答案是什么.对于一辆从$s$到$t$的车,它有$k$次加油的机会.可以发现实际上是将$s$到$t$的路径以城市为端点最多划分为最大长度最小的$k ...
- verilog parameter 位宽问题
前言 一直以为parameter 的位宽是无限的,其实不然. 流程: 仿真一下就知道啦: 用处: 精准控制位宽理论上会占用更少的内存,其他好像并没有什么卵用,注意不要越界,我这里系统默认32bit位宽 ...
- 【XSY1529】小Q与进位制 分治 FFT
题目大意 小Q发明了一种进位制,每一位的变化范围是\(0\)~\(b_i-1\),给你一个这种进位制下的整数\(a\),问你有多少非负整数小于\(a\).结果以十进制表示. \(n\leq 1 ...
- 微信小程序Dom事件实现
面对微信小程序,可能没有像我们平时使用JQuery那样随心所欲.本篇就是为了解决这个问题. 请合理使用工具! 细节就不说了,直接备份一个实现的案例: wxml <view class=" ...
- Github Desktop 克隆新项目 Authentication failed. You may not have permission to access the repository or the repository may ha
原来:ssh://git@github.com/xxx.git 改成:https://git@github.com/xxx.git