MySql笔记

必备知识

MySQL的增删改查

# 增
insert Course values (1,'语文课')
# 删
delete  from Course where c_id=1
# 改
update Course set name='音乐课' where c_id=1
# 查
select * from Course

MySQL的存储过程

# 最简单的存储过程
create procedure test ()
begin
select '许嵩';
end

# 调用存储过程
call test();
# 删除存储过程
drop procedure test;

扩展知识

使用命令框登陆MySqlsql

mysql -u root - p

显示目前全部的数据库数据库

show databases;

显示建立的数据库的编码格式并发

show create database shuyunquan;

引用数据库编码

use shuyunquan

查看当前引用的数据库code

select database();

建立表ip

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

显示当前引用的数据库的全部表内存

show tables;

显示指定数据库的全部的表资源

show tables from mysql;

显示表里面的全部列名rem

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
相关文章
相关标签/搜索