SQL語句的整合

来源:https://www.cnblogs.com/rain-me/archive/2022/05/25/16311142.html
-Advertisement-
Play Games

# 基礎語法 https://blog.csdn.net/m0_37989980/article/details/103413942 CRUD 提供給資料庫管理員的基本操作,CRUD(Create, Read, Update and Delete)。 1. 語法: select [distinct ...


基礎語法

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;

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本篇關鍵詞:內核重定位、MMU、SVC棧、熱啟動、內核映射表 內核彙編相關篇為: v74.01 鴻蒙內核源碼分析(編碼方式) | 機器指令是如何編碼的 v75.03 鴻蒙內核源碼分析(彙編基礎) | CPU上班也要打卡 v76.04 鴻蒙內核源碼分析(彙編傳參) | 如何傳遞複雜的參數 v77.01 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 部署rocketmq和可視化客戶端 一、 伺服器資源 服務名稱:Linux伺服器 IP:[請查看資源分配文檔] 操作系統:CentOS 7.8 x64 二、rocketmq安裝 2.1下載 下載地址:rocketmq.apache.org/dow ...
  • tree Linux tree命令用於以樹狀圖列出目錄的內容。 執行tree指令,它會列出指定目錄下的所有文件,包括子目錄里的文件。 語法 tree [-aACdDfFgilnNpqstux][-I <範本樣式>][-P <範本樣式>][目錄...] 參數說明: - -a 顯示所有文件和目錄。 - ...
  • 一、ZooKeeper概述 Apache ZooKeeper 是一個集中式服務,用於維護配置信息、命名、提供分散式同步和提供組服務,ZooKeeper 致力於開發和維護一個開源伺服器,以實現高度可靠的分散式協調,其實也可以認為就是一個分散式資料庫,只是結構比較特殊,是樹狀結構。官網文檔:https: ...
  • Explain簡介 MySQL優化器在基於成本的計算和基於規則的SQL優化會生成一個所謂的執行計劃,我們就可以使用執行計劃查看MySQL對該語句具體的執行方式。 介紹這個好啰嗦就是了,我們可以通過這個優化器展示的執行計劃,查看優化器對我們的SQL進行優化的步驟,連接轉換成單表訪問時的優化。以及對於之 ...
  • 我們在上一篇博客中學習瞭如何用Hadoop-MapReduce實現單詞計數,現在我們來看如何用Spark來實現同樣的功能。Spark框架也是MapReduce-like模型,採用“分治-聚合”策略來對數據分佈進行分佈並行處理。不過該框架相比Hadoop-MapReduce,具有以下兩個特點:對大數據... ...
  • ClickHouse高級 1. 執行計劃 在 ClickHouse 20.6 版本之前要查看 SQL 語句的執行計劃需要設置日誌級別為 TRACE 才可以看到,並且只能真正執行 SQL,在執行日誌裡面查看。在 20.6 版本引入了原生的執行計劃語法,併在 20.6.3.28 版本成為正式功能。 1. ...
  • ClickHouse入門 1. 簡介 ClickHouse 是俄羅斯的 Yandex 於 2016 年開源的列式存儲資料庫(DBMS),使用 C++ 語言編寫,主要用於線上分析處理查詢(OLAP),能夠使用 SQL 查詢實時生成分析數據報告。 1.1 列式存儲 以下麵的表為例: Id Name Ag ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...