轉載:mysql存儲過程講解

記錄MYSQL存儲過程中的關鍵語法:

DELIMITER // 聲明語句結束符,用于區分;
CEATE PROCEDURE demo_in_parameter(IN p_in int) 聲明存儲過程
BEGIN …. END 存儲過程開始和結束符號
SET @p_in=1 變量賦值
DECLARE l_int int unsigned default 4000000; 變量定義


什么是mysql存儲例程?
存儲例程是存儲在數據庫服務器中的一組sql語句,通過在查詢中調用一個指定的名稱來執行這些sql語句命令.


為什么要使用mysql存儲過程?
我們都知道應用程序分為兩種,一種是基于web,一種是基于桌面,他們都和數據庫進行交互來完成數據的存取工作。假設現在有一種應用程序包含了這兩 種,現在要修改其中的一個查詢sql語句,那么我們可能要同時修改他們中對應的查詢sql語句,當我們的應用程序很龐大很復雜的時候問題就出現這,不易維 護!另外把sql查詢語句放在我們的web程序或桌面中很容易遭到sql注入的破壞。而存儲例程正好可以幫我們解決這些問題。
存儲過程(stored procedure)、存儲例程(store routine)、存儲函數區別
Mysql存儲例程實際包含了存儲過程和存儲函數,它們被統稱為存儲例程。
其中存儲過程主要完成在獲取記錄或插入記錄或更新記錄或刪除記錄,即完成select insert delete update等的工作。而存儲函數只完成查詢的工作,可接受輸入參數并返回一個結果。


創建mysql存儲過程、存儲函數
create procedure 存儲過程名(參數)
存儲過程體
create function 存儲函數名(參數)

下面是存儲過程的例子:

mysql> DELIMITER // 
mysql> CREATE PROCEDURE proc1(OUT s int) -> BEGIN -> SELECT COUNT(*) INTO s FROM user; -> END -> // mysql> DELIMITER ;

?

注:
(1)這里需要注意的是DELIMITER//和DELIMITER;兩句,DELIMITER是分割符的意思,因為MySQL默認以”;”為分隔 符,如果我們沒有聲明分割符,那么編譯器會把存儲過程當成SQL語句進行處理,則存儲過程的編譯過程會報錯,所以要事先用DELIMITER關鍵字申明當 前段分隔符,這樣MySQL才會將”;”當做存儲過程中的代碼,不會執行這些代碼,用完了之后要把分隔符還原。
(2)存儲過程根據需要可能會有輸入、輸出、輸入輸出參數,這里有一個輸出參數s,類型是int型,如果有多個參數用”,”分割開。
(3)過程體的開始與結束使用BEGIN與END進行標識。
這樣,我們的一個MySQL存儲過程就完成了,是不是很容易呢?看不懂也沒關系,接下來,我們詳細的講解。


參數

MySQL存儲過程的參數用在存儲過程的定義,共有三種參數類型,IN,OUT,INOUT,形式如:
CREATEPROCEDURE 存儲過程名([[IN |OUT |INOUT ] 參數名 數據類形…])
IN 輸入參數:表示該參數的值必須在調用存儲過程時指定,在存儲過程中修改該參數的值不能被返回,為默認值
OUT 輸出參數:該值可在存儲過程內部被改變,并可返回
INOUT 輸入輸出參數:調用時指定,并且可被改變和返回

. IN參數例子

創建:

1.  mysql > DELIMITER //  
2.  mysql > CREATE PROCEDURE demo_in_parameter(IN p_in int) 3. -> BEGIN 4. -> SELECT p_in; 5. -> SET p_in=2; 6. -> SELECT p_in; 7. -> END; 8. -> // 9. mysql > DELIMITER ; 

?

執行結果:

1.  mysql > SET @p_in=1;  
2.  mysql > CALL demo_in_parameter(@p_in);  
3.  +------+  
4. | p_in | 5. +------+ 6. | 1 | 7. +------+ 8. 9. +------+ 10.| p_in | 11.+------+ 12.| 2 | 13.+------+ 14. 15.mysql> SELECT @p_in; 16.+-------+ 17.| @p_in | 18.+-------+ 19.| 1 | 20.+-------+ 

?

以上可以看出,p_in雖然在存儲過程中被修改,但并不影響@p_id的值

.OUT參數例子

創建:

1.  mysql > DELIMITER //  
2.  mysql > CREATE PROCEDURE demo_out_parameter(OUT p_out int) 3. -> BEGIN 4. -> SELECT p_out; 5. -> SET p_out=2; 6. -> SELECT p_out; 7. -> END; 8. -> // 9. mysql > DELIMITER ; 

?

執行結果:

1.  mysql > SET @p_out=1;  
2.  mysql > CALL sp_demo_out_parameter(@p_out);  
3.  +-------+ 4. | p_out | 5. +-------+ 6. | NULL | 7. +-------+ 8. 9. +-------+ 10.| p_out | 11.+-------+ 12.| 2 | 13.+-------+ 14. 15.mysql> SELECT @p_out; 16.+-------+ 17.| p_out | 18.+-------+ 19.| 2 | 20.+-------+ 

?

INOUT參數例子

創建:

1.  mysql > DELIMITER //   
2.  mysql > CREATE PROCEDURE demo_inout_parameter(INOUT p_inout int) 3. -> BEGIN 4. -> SELECT p_inout; 5. -> SET p_inout=2; 6. -> SELECT p_inout; 7. -> END; 8. -> // 9. mysql > DELIMITER ; 

?

執行結果:

1.  mysql > SET @p_inout=1;  
2.  mysql > CALL demo_inout_parameter(@p_inout) ;  
3.  +---------+  
4. | p_inout | 5. +---------+ 6. | 1 | 7. +---------+ 8. 9. +---------+ 10.| p_inout | 11.+---------+ 12.| 2 | 13.+---------+ 14. 15.mysql > SELECT @p_inout; 16.+----------+ 17.| @p_inout | 18.+----------+ 19.| 2 | 20.+----------+ 

?

局部變量

變量定義

局部變量聲明一定要放在存儲過程體的開始
DECLAREvariable_name [,variable_name…] datatype [DEFAULT value];
其中,datatype為MySQL的數據類型,如:int, float, date,varchar(length)
例如:

1.  DECLARE l_int int unsigned default 4000000;  
2. DECLARE l_numeric number(8,2) DEFAULT 9.95; 3. DECLARE l_date date DEFAULT '1999-12-31'; 4. DECLARE l_datetime datetime DEFAULT '1999-12-31 23:59:59'; 5. DECLARE l_varchar varchar(255) DEFAULT 'This will not be padded'; 

?

變量賦值

SET 變量名 = 表達式值 [,variable_name = expression …]

用戶變量

在MySQL客戶端使用用戶變量

1.  mysql > SELECT 'Hello World' into @x;  
2.  mysql > SELECT @x; 3. +-------------+ 4. | @x | 5. +-------------+ 6. | Hello World | 7. +-------------+ 8. mysql > SET @y='Goodbye Cruel World'; 9. mysql > SELECT @y; 10.+---------------------+ 11.| @y | 12.+---------------------+ 13.| Goodbye Cruel World | 14.+---------------------+ 15. 16.mysql > SET @z=1+2+3; 17.mysql > SELECT @z; 18.+------+ 19.| @z | 20.+------+ 21.| 6 | 22.+------+ 

在存儲過程中使用用戶變量

1.  mysql > CREATE PROCEDURE GreetWorld( ) SELECT CONCAT(@greeting,' World'); 2. mysql > SET @greeting='Hello'; 3. mysql > CALL GreetWorld( ); 4. +----------------------------+ 5. | CONCAT(@greeting,' World') | 6. +----------------------------+ 7. | Hello World | 8. +----------------------------+ 

?

在存儲過程間傳遞全局范圍的用戶變量

1.  mysql> CREATE PROCEDURE p1() SET @last_procedure='p1'; 2. mysql> CREATE PROCEDURE p2() SELECT CONCAT('Last procedure was ',@last_procedure); 3. mysql> CALL p1( ); 4. mysql> CALL p2( ); 5. +-----------------------------------------------+ 6. | CONCAT('Last procedure was ',@last_proc | 7. +-----------------------------------------------+ 8. | Last procedure was p1 | 9. +-----------------------------------------------+ 

?

注意:
①用戶變量名一般以@開頭
②濫用用戶變量會導致程序難以理解及管理

注釋

MySQL存儲過程可使用兩種風格的注釋
雙模杠:–
該風格一般用于單行注釋
c風格: 一般用于多行注釋
例如:

1.  mysql > DELIMITER //  
2.  mysql > CREATE PROCEDURE proc1 --name存儲過程名 3. -> (IN parameter1 INTEGER) 4. -> BEGIN 5. -> DECLARE variable1 CHAR(10); 6. -> IF parameter1 = 17 THEN 7. -> SET variable1 = 'birds'; 8. -> ELSE 9. -> SET variable1 = 'beasts'; 10. -> END IF; 11. -> INSERT INTO table1 VALUES (variable1); 12. -> END 13. -> // 14.mysql > DELIMITER ; 

?

MySQL存儲過程的調用

用call和你過程名以及一個括號,括號里面根據需要,加入參數,參數包括輸入參數、輸出參數、輸入輸出參數。具體的調用方法可以參看上面的例子。

MySQL存儲過程的查詢

我們像知道一個數據庫下面有那些表,我們一般采用showtables;進行查看。那么我們要查看某個數據庫下面的存儲過程,是否也可以采用呢?答案是,我們可以查看某個數據庫下面的存儲過程,但是是令一鐘方式。
我們可以用
selectname from mysql.proc where db=’數據庫名’;
或者
selectroutine_name from information_schema.routines where routine_schema=’數據庫名’;
或者
showprocedure status where db=’數據庫名’;
進行查詢。
如果我們想知道,某個存儲過程的詳細,那我們又該怎么做呢?是不是也可以像操作表一樣用describe 表名進行查看呢?
答案是:我們可以查看存儲過程的詳細,但是需要用另一種方法:
SHOWCREATE PROCEDURE 數據庫.存儲過程名;
就可以查看當前存儲過程的詳細。

MySQL存儲過程的修改

ALTER PROCEDURE
更改用CREATE PROCEDURE 建立的預先指定的存儲過程,其不會影響相關存儲過程或存儲功能。

MySQL存儲過程的刪除

刪除一個存儲過程比較簡單,和刪除表一樣:
DROPPROCEDURE
從MySQL的表格中刪除一個或多個存儲過程。

MySQL存儲過程的控制語句

變量作用域

內部的變量在其作用域范圍內享有更高的優先權,當執行到end。變量時,內部變量消失,此時已經在其作用域外,變量不再可見了,應為在存儲
過程外再也不能找到這個申明的變量,但是你可以通過out參數或者將其值指派
給會話變量來保存其值。

1.  mysql > DELIMITER //  
2.  mysql > CREATE PROCEDURE proc3() 3. -> begin 4. -> declare x1 varchar(5) default 'outer'; 5. -> begin 6. -> declare x1 varchar(5) default 'inner'; 7. -> select x1; 8. -> end; 9. -> select x1; 10. -> end; 11. -> // 12.mysql > DELIMITER ; 

?

條件語句

if-then -else語句

1.  mysql > DELIMITER //  
2.  mysql > CREATE PROCEDURE proc2(IN parameter int) 3. -> begin 4. -> declare var int; 5. -> set var=parameter+1; 6. -> if var=0 then 7. -> insert into t values(17); 8. -> end if; 9. -> if parameter=0 then 10. -> update t set s1=s1+1; 11. -> else 12. -> update t set s1=s1+2; 13. -> end if; 14. -> end; 15. -> // 16.mysql > DELIMITER ; 

case語句:

1.  mysql > DELIMITER //  
2.  mysql > CREATE PROCEDURE proc3 (in parameter int) 3. -> begin 4. -> declare var int; 5. -> set var=parameter+1; 6. -> case var 7. -> when 0 then 8. -> insert into t values(17); 9. -> when 1 then 10. -> insert into t values(18); 11. -> else 12. -> insert into t values(19); 13. -> end case; 14. -> end; 15. -> // 16.mysql > DELIMITER ; case when var=0 then insert into t values(30); when var>0 then when var<0 then else end case

?

循環語句

while ···· end while:

1.  mysql > DELIMITER //  
2.  mysql > CREATE PROCEDURE proc4() 3. -> begin 4. -> declare var int; 5. -> set var=0; 6. -> while var<6 do 7. -> insert into t values(var); 8. -> set var=var+1; 9. -> end while; 10. -> end; 11. -> // 12.mysql > DELIMITER ; while條件 do --循環體 endwhile

repeat···· end repeat:

它在執行操作后檢查結果,而while則是執行前進行檢查。

1.  mysql > DELIMITER //  
2.  mysql > CREATE PROCEDURE proc5 () 3. -> begin 4. -> declare v int; 5. -> set v=0; 6. -> repeat 7. -> insert into t values(v); 8. -> set v=v+1; 9. -> until v>=5 10. -> end repeat; 11. -> end; 12. -> // 13.mysql > DELIMITER ; repeat --循環體 until循環條件 endrepeat;

?

loop ·····endloop:

loop循環不需要初始條件,這點和while 循環相似,同時和repeat循環一樣不需要結束條件, leave語句的意義是離開循環。

1.  mysql > DELIMITER //  
2.  mysql > CREATE PROCEDURE proc6 () 3. -> begin 4. -> declare v int; 5. -> set v=0; 6. -> LOOP_LABLE:loop 7. -> insert into t values(v); 8. -> set v=v+1; 9. -> if v >=5 then 10. -> leave LOOP_LABLE; 11. -> end if; 12. -> end loop; 13. -> end; 14. -> // 15.mysql > DELIMITER ; 

?

LABLES 標號:

標號可以用在begin repeat while 或者loop 語句前,語句標號只能在合法的語句前面使用。可以跳出循環,使運行指令達到復合語句的最后一步。

ITERATE迭代

ITERATE:

1.    通過引用復合語句的標號,來從新開始復合語句
2.  mysql > DELIMITER //  
3.  mysql > CREATE PROCEDURE proc10 () 4. -> begin 5. -> declare v int; 6. -> set v=0; 7. -> LOOP_LABLE:loop 8. -> if v=3 then 9. -> set v=v+1; 10. -> ITERATE LOOP_LABLE; 11. -> end if; 12. -> insert into t values(v); 13. -> set v=v+1; 14. -> if v>=5 then 15. -> leave LOOP_LABLE; 16. -> end if; 17. -> end loop; 18. -> end; 19. -> // 20.mysql > DELIMITER ; 

MySQL存儲過程的基本函數

字符串類

CHARSET(str) //返回字串字符集
CONCAT (string2 [,... ]) //連接字串
INSTR (string ,substring ) //返回substring首次在string中出現的位置,不存在返回0
LCASE (string2 ) //轉換成小寫 LEFT (string2 ,length ) //從string2中的左邊起取length個字符 LENGTH (string ) //string長度 LOAD_FILE (file_name ) //從文件讀取內容 LOCATE (substring , string [,start_position ] ) 同INSTR,但可指定開始位置 LPAD (string2 ,length ,pad ) //重復用pad加在string開頭,直到字串長度為length LTRIM (string2 ) //去除前端空格 REPEAT (string2 ,count ) //重復count次 REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替換search_str RPAD (string2 ,length ,pad) //在str后用pad補充,直到長度為length RTRIM (string2 ) //去除后端空格 STRCMP (string1 ,string2 ) //逐字符比較兩字串大小, SUBSTRING (str , position [,length ]) //從str的position開始,取length個字符, 注:mysql中處理字符串時,默認第一個字符下標為1,即參數position必須大于等于1 1. mysql> select substring('abcd',0,2); 2. +-----------------------+ 3. | substring('abcd',0,2) | 4. +-----------------------+ 5. | | 6. +-----------------------+ 7. 1 row in set (0.00 sec) 8. 9. mysql> select substring('abcd',1,2); 10.+-----------------------+ 11.| substring('abcd',1,2) | 12.+-----------------------+ 13.| ab | 14.+-----------------------+ 15.1 row in set (0.02 sec) TRIM([[BOTH|LEADING|TRAILING][padding] FROM]string2) //去除指定位置的指定字符 UCASE (string2 ) //轉換成大寫 RIGHT(string2,length) //取string2最后length個字符 SPACE(count) //生成count個空格

?

數學類

ABS (number2 ) //絕對值
BIN (decimal_number ) //十進制轉二進制
CEILING (number2 ) //向上取整
CONV(number2,from_base,to_base) //進制轉換
FLOOR (number2 ) //向下取整 FORMAT (number,decimal_places ) //保留小數位數 HEX (DecimalNumber ) //轉十六進制 注:HEX()中可傳入字符串,則返回其ASC-11碼,如HEX('DEF')返回4142143 也可以傳入十進制整數,返回其十六進制編碼,如HEX(25)返回19 LEAST (number , number2 [,..]) //求最小值 MOD (numerator ,denominator ) //求余 POWER (number ,power ) //求指數 RAND([seed]) //隨機數 ROUND (number [,decimals ]) //四舍五入,decimals為小數位數] 注:返回類型并非均為整數,如: (1)默認變為整形值 1. mysql> select round(1.23); 2. +-------------+ 3. | round(1.23) | 4. +-------------+ 5. | 1 | 6. +-------------+ 7. 1 row in set (0.00 sec) 8. 9. mysql> select round(1.56); 10.+-------------+ 11.| round(1.56) | 12.+-------------+ 13.| 2 | 14.+-------------+ 15.1 row in set (0.00 sec) (2)可以設定小數位數,返回浮點型數據 1. mysql> select round(1.567,2); 2. +----------------+ 3. | round(1.567,2) | 4. +----------------+ 5. | 1.57 | 6. +----------------+ 7. 1 row in set (0.00 sec) SIGN (number2 ) //

?

日期時間類

ADDTIME (date2 ,time_interval )//將time_interval加到date2
CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //轉換時區
CURRENT_DATE ( ) //當前日期
CURRENT_TIME ( ) //當前時間
CURRENT_TIMESTAMP ( ) //當前時間戳 DATE (datetime ) //返回datetime的日期部分 DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或時間 DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式顯示datetime DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上減去一個時間 DATEDIFF (date1 ,date2 ) //兩個日期差 DAY (date ) //返回日期的天 DAYNAME (date ) //英文星期 DAYOFWEEK (date ) //星期(1-7) ,1為星期天 DAYOFYEAR (date ) //一年中的第幾天 EXTRACT (interval_name FROM date ) //從date中提取日期的指定部分 MAKEDATE (year ,day ) //給出年及年中的第幾天,生成日期串 MAKETIME (hour ,minute ,second ) //生成時間串 MONTHNAME (date ) //英文月份名 NOW ( ) //當前時間 SEC_TO_TIME (seconds ) //秒數轉成時間 STR_TO_DATE (string ,format ) //字串轉成時間,以format格式顯示 TIMEDIFF (datetime1 ,datetime2 ) //兩個時間差 TIME_TO_SEC (time ) //時間轉秒數] WEEK (date_time [,start_of_week ]) //第幾周 YEAR (datetime ) //年份 DAYOFMONTH(datetime) //月的第幾天 HOUR(datetime) //小時 LAST_DAY(date) //date的月的最后日期 MICROSECOND(datetime) //微秒 MONTH(datetime) //月 MINUTE(datetime) //分返回符號,正負或0 SQRT(number2) //開平方

?

MySql分頁存儲過程

MySql測試版本:5.0.41-community-nt

DROP PROCEDURE IF EXISTS pr_pager; CREATE PROCEDURE pr_pager( IN p_table_name VARCHAR(1024), IN p_fields VARCHAR(1024), IN p_page_size INT, IN p_page_now INT, IN p_order_string VARCHAR(128), IN p_where_string VARCHAR(1024), OUT p_out_rows INT ) NOT DETERMINISTIC SQL SECURITY DEFINER COMMENT '分頁存儲過程' BEGIN DECLARE m_begin_row INT DEFAULT 0; DECLARE m_limit_string CHAR(64); SET m_begin_row = (p_page_now - 1) * p_page_size; SET m_limit_string = CONCAT(' LIMIT ', m_begin_row, ', ', p_page_size); SET @COUNT_STRING = CONCAT('SELECT COUNT(*) INTO @ROWS_TOTAL FROM ', p_table_name, ' ', p_where_string); SET @MAIN_STRING = CONCAT('SELECT ', p_fields, ' FROM ', p_table_name, ' ', p_where_string, ' ', p_order_string,m_limit_string); PREPARE count_stmt FROM @COUNT_STRING; EXECUTE count_stmt; DEALLOCATE PREPARE count_stmt; SET p_out_rows = @ROWS_TOTAL; PREPARE main_stmt FROM @MAIN_STRING; EXECUTE main_stmt; DEALLOCATE PREPARE main_stmt; END;

?

調用

mysql> call pr_pager("t","var",3,3,"","",@result); mysql> call pr_pager("t","var",3,2,"","",@result);

轉載于:https://www.cnblogs.com/zjdxr-up/p/8493527.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390120.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390120.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390120.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Diffie-Hellman:安全網絡通信背后的天才算法

Lets start with a quick thought experiment.讓我們從快速思考實驗開始。 You have a network of 3 computers, used by Alice, Bob, and Charlie. All 3 participants can send messages, but just in a way that all other clients who connected to the network can read …

掃盲丨關于區塊鏈你需要了解的所有概念

掃盲丨關于區塊鏈你需要了解的所有概念 如今存儲信息的方式有什么問題&#xff1f; 目前&#xff0c;支配我們生活的數據大部分都儲存在一個地方&#xff0c;不論是在私人服務器、云、圖書館或檔案館的紙上。大多數情況下這很好&#xff0c;但這也容易受到攻擊。 最近有消息稱&…

SpringBoot環境切換

2019獨角獸企業重金招聘Python工程師標準>>> 1.在application.yml中配置&#xff0c;如果java -jar banke-boot-bd-api-0.0.1-SNAPSHOT.jar&#xff0c;那么就是已application-test作為啟動的配置文件啟動 spring: profiles: active: test 2.如果java -jar banke-bo…

linux tar cvf_Linux中的Tar命令:Tar CVF和Tar XVF通過示例命令進行了解釋

linux tar cvfThe name tar is, by most accounts, short for tape archive. The "tapes" in question would be all those magnetic storage drives that were popular all the way back in the 1950s. 在大多數情況下&#xff0c; tar是磁帶歸檔的縮寫。 有問題的“…

1894. 找到需要補充粉筆的學生編號

1894. 找到需要補充粉筆的學生編號 一個班級里有 n 個學生&#xff0c;編號為 0 到 n - 1 。每個學生會依次回答問題&#xff0c;編號為 0 的學生先回答&#xff0c;然后是編號為 1 的學生&#xff0c;以此類推&#xff0c;直到編號為 n - 1 的學生&#xff0c;然后老師會重復…

[No0000B0]ReSharper操作指南1/16-入門與簡介

安裝指南 在安裝之前&#xff0c;您可能需要檢查系統要求。 ReSharper是一個VisualStudio擴展。它支持VisualStudio2010,2012,2013,2015和2017.安裝完成后&#xff0c;您將在VisualStudio的主菜單中找到新的ReSharper條目。大多數ReSharper命令都可以在這個菜單中找到。但是&a…

更改H2元素的顏色

In coding there are often many different solutions to a given problem. This is especially true when it comes to styling an HTML element.在編碼中&#xff0c;對于給定問題通常有許多不同的解決方案。 在樣式化HTML元素時&#xff0c;尤其如此。 One of the easiest …

[CTSC2008]圖騰totem

&#xff08;圖騰這題做的我頭疼 233&#xff09; 記 f(xxxx) 為 xxxx 出現的次數&#xff0c;那么題目就是要求 f(1324) - f(1243) - f(1432) 最有難度的是把上面的式子轉化一下&#xff0c;變成 f(1x2x) - f(14xx) - f(12xx) f(1234) 這點除非對 f 的求法能一眼看出來&#…

Box Shadow CSS教程–如何向任何HTML元素添加投影

We can add a drop shadow to any HTML element using the CSS property box-shadow. Heres how. 我們可以使用CSS屬性box-shadow將陰影添加到任何HTML元素。 這是如何做。 添加基本??投影 (Adding a Basic Drop Shadow) Lets first set up some basic HTML elements to add…

數據結構學習筆記(一)——《大話數據結構》

第一章 數據結構緒論 基本概念和術語 數據 描述客觀事物的符號&#xff0c;計算機中可以操作的對象&#xff0c;能被計算機識別并輸入給計算機處理的符號的集合。包括整型、實型等數值類型和字符、聲音、圖像、視頻等非數值類型。 數據元素 組成數據的、有一定意義的基本單位&a…

6. Z 字形變換

6. Z 字形變換 將一個給定字符串 s 根據給定的行數 numRows &#xff0c;以從上往下、從左到右進行 Z 字形排列。 比如輸入字符串為 “PAYPALISHIRING” 行數為 3 時&#xff0c;排列如下&#xff1a; P A H N A P L S I I G Y I R之后&#xff0c;你的輸出需要從…

java的垃圾回收機制包括:主流回收算法和收集器(jvm的一個主要優化方向)

2019獨角獸企業重金招聘Python工程師標準>>> java的垃圾回收機制是java語言的一大特色&#xff0c;解放了開發人員對內存的復雜控制&#xff0c;但如果你想要一個高級java開發人員&#xff0c;還是需要知道其機制&#xff0c;所謂不僅要會用還要知道其原理這樣才能用…

北京dns服務器ip地址_什么是DNS? 域名系統,DNS服務器和IP地址概念介紹

北京dns服務器ip地址介紹 (Introduction) By the end of this article, you should have a better understanding of:在本文末尾&#xff0c;您應該對以下內容有更好的了解&#xff1a; What DNS is and what it does 什么是DNS及其作用 What DNS servers do DNS服務器做什么 …

767. 重構字符串

767. 重構字符串 給定一個字符串S&#xff0c;檢查是否能重新排布其中的字母&#xff0c;使得兩相鄰的字符不同。 若可行&#xff0c;輸出任意可行的結果。若不可行&#xff0c;返回空字符串。 示例 1: 輸入: S “aab” 輸出: “aba” 示例 2: 輸入: S “aaab” 輸出: “…

長生生物狂犬病疫苗造假

這兩天暴發的長生生物狂犬病疫苗造假案真是很厲害&#xff0c;世人都說投資不過山海關還真有一定道理。 市場上長生生物的狂犬病疫苗約占1/4左右&#xff0c;是一個非常大的用量。 你別說&#xff0c;疫苗真的是非常適合造假&#xff1a; 1. 狂犬病有一定潛伏期&#xff0c;幾天…

小程序 雜記

調試打印測試的方法&#xff1a; 方法1、顯示提示框 &#xff08;微信自帶的API&#xff09; wx.showToast({title: 成功,icon: success,duration: 2000 }) 方法2、js的console.log()方法 //test.js Page({onLoad: function(option){console.log(option.query)} }) wx.showToa…

使用fetch封裝ajax_如何使用Fetch在JavaScript中進行AJAX調用

使用fetch封裝ajaxI will be sharing bite sized learnings about JavaScript regularly in this series. Well cover JS fundamentals, browsers, DOM, system design, domain architecture and frameworks. 在本系列中&#xff0c;我將定期分享有關JavaScript的小知識。 我們…

RxJS筆記

RxJS 《深入淺出RxJS》讀書筆記遺留問題 Observable的HOT與COLD對應的實際場景&#xff0c;以及在編碼中的體現chapter1 html部分 測試你對時間的感覺按住我一秒鐘然后松手你的時間&#xff1a;毫秒jquery實現 var time new Date().getTime(); $("#hold-me").moused…

滾動一定的高度底色遞增

$(window).scroll(function() {var swipeHeight 200;//完全變色高度var scrollTop $(document).scrollTop();//頁面滾動高度var x scrollTop/swipeHeight;$(".head-bg").css({"opacity":x}); }) 轉載于:https://www.cnblogs.com/lhj-blog/p/8521525.htm…

@hot熱加載修飾器導致static靜態屬性丟失(已解決)

react開發的時候&#xff0c;引入熱加載&#xff0c;用了修飾器的引入方式&#xff0c;發現了一個很有意思的問題&#xff0c;網上并沒有相關文章&#xff0c;所以拋出來探討下。 一段很簡單的測試代碼。但是經過babel編碼后&#xff0c;變得很有意思。假設編碼成es2016&#x…