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
相關文章
相關標籤/搜索