主頁 > 資料庫 > SQL陳述句的整合

SQL陳述句的整合

2022-07-20 07:53:45 資料庫

基礎語法

https://blog.csdn.net/m0_37989980/article/details/103413942

CRUD

 提供給資料庫管理員的基本操作,CRUD(Create, Read, Update and Delete),
1. 語法:
	select  [distinct] 
		欄位串列
	from
		表名串列
	where
		條件串列
	group by
		分組欄位
	having
		分組之后的條件
	order by
		排序
	limit
		分頁限定
	offset 
    	位數

DDL:操作資料庫、表

DDL   Data Definition Language
1. 操作資料庫:CRUD
	1. C(Create):創建
		* 創建資料庫:
			* create database 資料庫名稱;
		* 創建資料庫,判斷不存在,再創建:
			* create database if not exists 資料庫名稱;
		* 創建資料庫,并指定字符集
			* create database 資料庫名稱 character set 字符集名;

		* 練習: 創建db4資料庫,判斷是否存在,并制定字符集為gbk
			* create database if not exists db4 character set gbk;
	2. R(Retrieve):查詢
		* 查詢所有資料庫的名稱:
			* show databases;
		* 查詢某個資料庫的字符集:查詢某個資料庫的創建陳述句
			* show create database 資料庫名稱;
	3. U(Update):修改
		* 修改資料庫的字符集
			* alter database 資料庫名稱 character set 字符集名稱;
	4. D(Delete):洗掉
		* 洗掉資料庫
			* drop database 資料庫名稱;
		* 判斷資料庫存在,存在再洗掉
			* drop database if exists 資料庫名稱;
	5. 使用資料庫
		* 查詢當前正在使用的資料庫名稱
			* select database();
		* 使用資料庫
			* use 資料庫名稱;


2. 操作表
	1. C(Create):創建
		1. 語法:
			create table 表名(
				列名1 資料型別1,
				列名2 資料型別2,
				....
				列名n 資料型別n
			);
			* 注意:最后一列,不需要加逗號(,)
			* 資料庫型別:
				1. int:整數型別
					* age int,
				2. double:小數型別
					* score double(5,2)
				3. date:日期,只包含年月日,yyyy-MM-dd
				4. datetime:日期,包含年月日時分秒	 yyyy-MM-dd HH:mm:ss
				5. timestamp:時間錯型別	包含年月日時分秒	 yyyy-MM-dd HH:mm:ss	
					* 如果將來不給這個欄位賦值,或賦值為null,則默認使用當前的系統時間,來自動賦值

				6. varchar:字串
					* name varchar(20):姓名最大20個字符
					* zhangsan 8個字符  張三 2個字符


		* 創建表
			create table student(
				id int,
				name varchar(32),
				age int ,
				score double(4,1),
				birthday date,
				insert_time timestamp
			);
		* 復制表:
			* create table 表名 like 被復制的表名;	  	
	2. R(Retrieve):查詢
		* 查詢某個資料庫中所有的表名稱
			* show tables;
		* 查詢表結構
			* desc 表名;
	3. U(Update):修改
		1. 修改表名
			alter table 表名 rename to 新的表名;
		2. 修改表的字符集
			alter table 表名 character set 字符集名稱;
		3. 添加一列
			alter table 表名 add 列名 資料型別;
		4. 修改列名稱 型別
			alter table 表名 change 列名 新列別 新資料型別;
			alter table 表名 modify 列名 新資料型別;
		5. 洗掉列
			alter table 表名 drop 列名;
	4. D(Delete):洗掉
		* drop table 表名;
		* drop table  if exists 表名 ;



DML:增刪改表中資料

DML         Data Manipulation Language        Manipulation:操縱;推拿;(熟練的)控制,使用;(對賬目等的)偽造,篡改;(對儲存在計算機上的資訊的)操作,處理
1. 添加資料:
	* 語法:
		* insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
	* 注意:
		1. 列名和值要一一對應,
		2. 如果表名后,不定義列名,則默認給所有列添加值
			insert into 表名 values(值1,值2,...值n);
		3. 除了數字型別,其他型別需要使用引號(單雙都可以)引起來
2. 洗掉資料:
	* 語法:
		* delete from 表名 [where 條件]
	* 注意:
		1. 如果不加條件,則洗掉表中所有記錄,
		2. 如果要洗掉所有記錄
			1. delete from 表名; -- 不推薦使用,有多少條記錄就會執行多少次洗掉操作
			2. TRUNCATE TABLE 表名; -- 推薦使用,效率更高 先洗掉表,然后再創建一張一樣的表,
3. 修改資料:
	* 語法:
		* update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 條件];

	* 注意:
		1. 如果不加任何條件,則會將表中所有記錄全部修改,



DQL:查詢表中的記錄

* select * from 表名;

1. 語法:
	select
		欄位串列
	from
		表名串列
	where
		條件串列
	group by
		分組欄位
	having
		分組之后的條件
	order by
		排序
	limit
		分頁限定


2. 基礎查詢
	1. 多個欄位的查詢
		select 欄位名1,欄位名2... from 表名;
		* 注意:
			* 如果查詢所有欄位,則可以使用*來替代欄位串列,
	2. 去除重復:
		* distinct
	3. 計算列
		* 一般可以使用四則運算計算一些列的值,(一般只會進行數值型的計算)
		* ifnull(運算式1,運算式2):null參與的運算,計算結果都為null
			* 運算式1:哪個欄位需要判斷是否為null
			* 如果該欄位為null后的替換值,
	4. 起別名:
		* as:as也可以省略


3. 條件查詢
	1. where子句后跟條件
	2. 運算子
		* > 、< 、<= 、>= 、= 、<>
		* BETWEEN...AND  
		* IN( 集合) 
		* LIKE:模糊查詢
			* 占位符:
				* _:單個任意字符
				* %:多個任意字符
		* IS NULL  
		* and  或 &&
		* or  或 || 
		* not  或 !


1. 排序查詢
	* 語法:order by 子句
		* order by 排序欄位1 排序方式1 ,  排序欄位2 排序方式2...

	* 排序方式:
		* ASC:升序,默認的,
		* DESC:降序,

	* 注意:
		* 如果有多個排序條件,則當前邊的條件值一樣時,才會判斷第二條件,


2. 聚合函式:將一列資料作為一個整體,進行縱向的計算,
	1. count:計算個數
		1. 一般選擇非空的列:主鍵
		2. count(*)
	2. max:計算最大值
	3. min:計算最小值
	4. sum:計算和
	5. avg:計算平均值
	

	* 注意:聚合函式的計算,排除null值,
		解決方案:
			1. 選擇不包含非空的列進行計算
			2. IFNULL函式

3. 分組查詢:
	1. 語法:group by 分組欄位;
	2. 注意:
		1. 分組之后查詢的欄位:分組欄位、聚合函式
		2. where 和 having 的區別?
			1. where 在分組之前進行限定,如果不滿足條件,則不參與分組,having在分組之后進行限定,如果不滿足結果,則不會被查詢出來
			2. where 后不可以跟聚合函式,having可以進行聚合函式的判斷,

創建資料庫

CREATE DATABASE `review`;
USE review;
CREATE TABLE `one`(
`id` INT,
`name` VARCHAR(40),
`pwd` VARCHAR(40)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

ALTER TABLE `one` MODIFY id INT PRIMARY KEY;


增加

insert
INSERT  INTO `one` VALUES(1,"第一個","123"),(2,"第二個","123");
replace
REPLACE INTO `one` VALUES(1,"第一個","123");
區別:  當插入時,如果有重復的資料,則先將重復的資料洗掉,然后再插入,所以相同時,他不會增加行數


洗掉

語法

DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]

語法說明如下:

- `<表名>`:指定要洗掉資料的表名,
- `ORDER BY` 子句:可選項,表示洗掉時,表中各行將按照子句中指定的順序進行洗掉,
- `WHERE` 子句:可選項,表示為洗掉操作限定洗掉條件,若省略該子句,則代表洗掉該表中的所有行,
- `LIMIT` 子句:可選項,用于告知服務器在控制命令被回傳到客戶端前被洗掉行的最大值,



# 注意:在不使用 WHERE 條件的時候,將洗掉所有資料,


alter 洗掉欄位

方法1

ALTER TABLE `one` ADD `mm` INT ;
ALTER TABLE `one` DROP `mm`

方法2

DELETE FROM `one` WHERE id=1;
delete洗掉表

下面是洗掉這個表

DELETE FROM `mm`;
里面也是可以使用not in 的
例如
DELETE FROM `mm` where id not in (1,3,4);   -- 除了1,3,4其他全部洗掉


更改

U(Update):修改
		1. 修改表名
			alter table 表名 rename to 新的表名;
		2. 修改表的字符集
			alter table 表名 character set 字符集名稱;
		3. 添加一列
			alter table 表名 add 列名 資料型別;
		4. 修改列名稱 型別
			alter table 表名 change 列名 新列別 新資料型別;
			alter table 表名 modify 列名 新資料型別;
		5. 洗掉列
			alter table 表名 drop 列名;

-- 修改表名
ALTER TABLE review rename to review_blog;
-- 修改字符集
ALTER TABLE review_blog character set utf8;
-- 添加欄位
ALTER TABLE review_blog add sex VARCHAR(30);
-- 修改欄位
ALTER TABLE review_blog change sex sexId VARCHAR(40);
-- 洗掉欄位
ALTER TABLE review_blog DROP sexId
更改欄位

更改欄位名

ALTER TABLE `one` CHANGE `mm` `sex` INT;

增加欄位

alter table 表名 add 欄位

洗掉欄位

alter table 表名 drop 欄位




關鍵字

distinct去重

SELECT  DISTINCT `name`,`sex` FROM `one`;


in

# in是在where查詢中,能夠賦值多個引數
select *  from 表 where id in(引數1,引數2)


order by排序

SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;

#以一個欄位進行排序,desc是降序


IFNULL

image-20220324173420355

mysql limit和offset用法
limit和offset用法

mysql里分頁一般用limit來實作

1. select* from article LIMIT 1,3

2.select * from article LIMIT 3 OFFSET 1

上面兩種寫法都表示取2,3,4三條條資料

 

當limit后面跟兩個引數的時候,第一個數表示要跳過的數量,后一位表示要取的數量,例如

select* from article LIMIT 1,3 就是跳過1條資料,從第2條資料開始取,取3條資料,也就是取2,3,4三條資料

當 limit后面跟一個引數的時候,該引數表示要取的資料的數量

例如 select* from article LIMIT 3  表示直接取前三條資料,類似sqlserver里的top語法,

當 limit和offset組合使用的時候,limit后面只能有一個引數,表示要取的的數量,offset表示要跳過的數量 ,

例如select * from article LIMIT 3 OFFSET 1 表示跳過1條資料,從第2條資料開始取,取3條資料,也就是取2,3,4三條資料
MySQL IFNULL函式是MySQL控制流函式之一,它接受兩個引數,如果不是NULL,則回傳第一個引數, 否則,IFNULL函式回傳第二個引數,兩個引數可以是文字值或運算式,以下說明了IFNULL函式的語法:IFNULL(expression_1,expression_2);
如果expression_1不為NULL,則IFNULL函式回傳expression_1; 否則回傳expression_2的結果,IFNULL函式根據使用的背景關系回傳字串或數字,如果要回傳基于TRUE或FALSE條件的值,而不是NULL,則應使用IF函式,
select ifnull((select distinct salary  from Employee order by salary desc limit 1 offset 1),null) as SecondHighestSalary;


IF

IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),則 IF()的回傳值為expr2; 否則回傳值則為 expr3,IF() 的回傳值為數字值或字串值,具體情況視其所在語境而定,
使用:如果id=1,則第一個值,否則第二個值
SELECT if(id=1,'123','000') FROM student;


通配符

%	替代 0 個或多個字符
_	替代一個字符
[charlist]	字符列中的任何單一字符

[^charlist]
或
[!charlist]	不在字符列中的任何單一字符

應該只需要講講最后2個就行了

#先看一條SQL陳述句
SELECT  * FROM `one`  WHERE `name` REGEXP '[abc]'
#查詢名字以a或者b或者c開頭的
//REGEXP是正則運算式

mysql中常用字符

MySQL REGEXP:正則運算式查詢 (biancheng.net)

image-20211030201023586



on和where的區別

  • on是使用,他在連接查詢里面使用,例如left join ......on

(63條訊息) SQL中JOIN操作后接ON和WHERE關鍵字的區別_liitdar的博客-CSDN博客

# ON 條件是在生成臨時表時使用的條件,它不管 ON 中的條件是否為真,都會回傳左邊表中的記錄;

WHERE 條件是在臨時表已經生成后,對臨時表進行的過濾條件,因為此時已經沒有 LEFT JOIN 的含義(必須回傳左側表的記錄)了,所以如果 WHERE 條件不為真的記錄就會被過濾掉,


連接查詢

SQL INNER JOIN 關鍵字 | 菜鳥教程 (runoob.com)

 注意:
 FULL OUTER JOIN  在MySQL中不支持

img



count(數量)

MySQL學習筆記:count(1)、count(*)、count(欄位)的區別 - Hider1214 - 博客園 (cnblogs.com)

#count的意思是 查詢回傳資料的數量  
方法如下
count(*)
count(1)
count(欄位)
#     COUNT(*) 的統計結果中,會包含值為NULL的行數,
#     count(欄位)會判斷他是否為空,如果為空,則不加
#     count(1)掃描主鍵
效率:count(欄位)慢于其他2個
1,比較count(*)和count(欄位名)的區別:前者對行的數目進行計算,包含null,后者對特定的列的值具有的行數進行計算,不包含null,得到的結果將是除去值為null和重復資料后的結果,

2.count(1)跟count(主鍵)一樣,只掃描主鍵

3.count(*)和count(主鍵)使用方式一樣,但是在性能上有略微的區別,mysql對前者做了優化,

count(主鍵)不一定比count(其余索引快),

count(欄位),該欄位非主鍵的情況最好不要出現,因為該方式不走索引,



group by 分組

# group by 對資料進行分組,分組的欄位必須在查詢的欄位中能夠找到,  分組的id在前面查詢必須要有
例如 select id,name from 表 group by id;

# 作用:
   只要是對里面的一個欄位進行細分時進行應用
   可以看看Case使用的最后一個SQL,case就在這章
   
# 小提示:
  分組可以清除重復的


having

# where不能在聚合函式中使用,所以使用Having

聚合函式

SQL聚合函式 - SQL教程? (yiibai.com)

包括:AVG(),COUNT(),MIN(),MAX()和SUM(),


limit

4. 分頁查詢
	1. 語法:limit 開始的索引,每頁查詢的條數;
	2. 公式:開始的索引 = (當前的頁碼 - 1) *     每頁顯示的條數
	3. limit 是一個MySQL"方言"


select * from article LIMIT 3 OFFSET 1


check

# 當你創建表時,需要對資料添加一些約束時,可以使用check(欄位加約束),多個里面可以添加in
mysql> CREATE TABLE tb_emp7
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> CHECK(salary>0 AND salary<100),
    -> FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
    -> );
Query OK, 0 rows affected (0.37 sec)


case運算式

CASE  <運算式>
   WHEN <值1> THEN <操作>
   WHEN <值2> THEN <操作>
   ...
   ELSE <操作>
END 
  1. 各個分支<運算式>回傳的資料型別要統一;
  2. CASE寫完后不能丟了END
  3. ELSE可省略但不建議省,沒有值時可寫 ELSE NULL,
--簡單格式 CASE運算式
CASE input_expression   
     WHEN when_expression THEN result_expression [ ...n ]   
     [ ELSE else_result_expression ]   
END   

--搜索模式
CASE  
     WHEN Boolean_expression THEN result_expression [ ...n ]   
     [ ELSE else_result_expression ]   
END 

input_expression(簡單格式):

指定一個有效的運算式(可以是常量、變數、列屬性),只要運算式回傳的是單個資料值,

when_expression(簡單格式):

在簡單格式中,此處填寫的內容是用于和input_expression運算式進行等值比較的,when_expression的內容可以是任何有效的運算式,可以指定多個,

input_expression和when_expression的注意事項(簡單格式):

在簡單模式中,input_expression和when_expression運算式計算的結果值,要求資料型別必須相同,如果不滿足則兩個結果值必須滿足隱式轉換的條件,如果兩個條件都不滿足,則會提示“資料型別轉換失敗”,

img

  • 區別

image-20220526105612505

  • 方式1

結合分組統計資料,把一個欄位的里面的資料進行分組和歸類

image-20220525215522581

  • 方式2

分條件更新欄位值

(一)需求: 將工資低于3000的員工漲幅工資20%,工資等于高于3000的員工漲幅8%,資料如下:

img

可能有人看到這個需求的第一反應,想直接可以直接通過如下兩條update陳述句直接更新:

update t_salary set salary = salary + (salary * 0.2) where salary < 3000;
update t_salary set salary = salary + (salary * 0.08) where salary >= 3000;

但是,如果是這樣執行的話實際上會存在問題,比如:原來工資在2900的員工,執行完第一條陳述句后工資會變成3480,此時,再執行第二條更新陳述句,因為滿足工資大于三千,則又會去添加多8%的工資,這樣明顯就是不符合我們的需求的,所以,如果想完成這個需求,又不想寫太復雜的sql,可以通過case函式完成這個功能,

image-20220526104507720

  • 方式

    (一)需求: 將表中資料按照每個學生姓名 、科目、成績進行排序,資料如下:

image-20220526111154568

dense_rank()

可以參考這片

https://www.cnblogs.com/rain-me/p/16195023.html





常用函式

year函式

SELECT YEAR(NOW())

專案使用

 select year(FROM_UNIXTIME(create_date/1000)) year,month(FROM_UNIXTIME(create_date/1000)) month, count(*) count
        from ms_article
        group by year,month;
        
# FROM_UNIXTIME函式是格式化:
#  FROM_UNIXTIME(unix_timestamp,format)他里面是一個時間戳,上面是一個毫秒,所有需要/1000

image-20220310174344865



時間戳

1. 秒級別時間戳
自19700101 00:00:00以來按秒算,SQL如下:

* mysql> select unix_timestamp(now());
+-----------------------+
| unix_timestamp(now()) |
+-----------------------+
|            1541604376 |
+-----------------------+
1 row in set (0.00 sec)

2. 當前時間戳

* mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2019-01-04 20:37:19 |
+---------------------+
1 row in set (0.00 sec)





約束

唯一約束

ALTER TABLE <資料表名> ADD CONSTRAINT <唯一約束名> UNIQUE(<列名>);

欄位的值不能重復
創建唯一約束

例如,下面的SQL創建一個新的表名為CUSTOMERS,并添加了五列,在這里,AGE列設定為唯一的,所以不能有兩個記錄使用相同的年齡:


CREATE TABLE CUSTOMERS(

       ID   INT              NOT NULL,

       NAME VARCHAR (20)     NOT NULL,

       AGE  INT              NOT NULL UNIQUE,

       ADDRESS  CHAR (25) ,

       SALARY   DECIMAL (18, 2),      

       PRIMARY KEY (ID));

    如果CUSTOMERS表已經創建,然后要將唯一約束添加到AGE列,類似如下的宣告:

ALTER TABLE CUSTOMERS
MODIFY AGE INT NOT NULL UNIQUE;

    還可以使用下面的語法,它支持命名的多個列的約束:

ALTER TABLE CUSTOMERS
ADD CONSTRAINT myUniqueConstraint UNIQUE(AGE, SALARY);

?

洗掉唯一約束


如果正在使用MySQL,那么可以使用下面的語法:
ALTER TABLE CUSTOMERS
DROP INDEX myUniqueConstraint;


外鍵約束

# 外鍵約束:foreign key,讓表于表產生關系,從而保證資料的正確性,
	1. 在創建表時,可以添加外鍵
		* 語法:
			create table 表名(
				....
				外鍵列
				constraint 外鍵名稱 foreign key (外鍵列名稱) references 主表名稱(主表列名稱)
			);

	2. 洗掉外鍵
		ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱;

	3. 創建表之后,添加外鍵
		ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵欄位名稱) REFERENCES 主表名稱(主表列名稱);
		
	4. 如果創建外鍵時忘記添加外鍵名,mysql 會給你一個默認的外鍵名,使用下面的SQL陳述句將他查詢出來
	SHOW CREATE TABLE em;

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/499800.html

標籤:MySQL

上一篇:MySQL實戰45講 1,2

下一篇:《最偉大的作品》,解密周杰倫新專輯背后的資料密碼

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more