MySql(干貨)

? ? ? ? 寫這篇博客的目的不是為了將介紹原理,而是為了Sql中的代碼操作屬實太多了,在這里進行一個匯總,方便查閱!!!

Sql分類
分類全稱說明

DDL

Data Definintion Language數據定義語言,用來定義數據庫對象
DMLData Manipulation Language數據庫操作語言,用來對數據庫表中的數據進行增刪改
DQLData Query Language數據查詢語言,用來查詢數據庫的表的記錄
DCLData Control Language數據庫控制語言,用來創建數據庫用戶,控制數據庫的訪問權限

DDL:

數據庫操作

1.查詢所有數據庫

SHOW DATABASES

2.查詢當前數據

select database() 

3.創建數據庫

create database [ if not exists ] 數據庫名 [ default charset 字符集 ] [ collate 排序
規則 ] #如果wincast存在的話則不用創建,不存在的話則直接創建
create database if not extists wincast#創建一個wincast數據庫并指定字符集
create database wincast default charset utf8mb4;

?案例:

create database if not extists itcast;

4.刪除數據庫desc 表名 ;

DROP DATABASE [IF EXISTS] 數據庫名

5.切換數據庫

use 數據庫名

表操作

1.查詢當前數據庫中的所有表

show tables;

2.查看指定表結構

desc 表名 ;

3.查詢指定表的建表語句

show create table 表名 ;

4.創建表的結構

CREATE TABLE 表名(
字段1 字段1類型 [ COMMENT 字段1注釋 ],
字段2 字段2類型 [COMMENT 字段2注釋 ],
字段3 字段3類型 [COMMENT 字段3注釋 ],
......
字段n 字段n類型 [COMMENT 字段n注釋 ]
) [ COMMENT 表注釋 ]

?案例:

create table tb_user(
id int comment '編號',
name varchar(50) comment '姓名',
age int comment '年齡',
gender varchar(1) comment '性別'
) comment '用戶表';

5.添加字段

ALTER TABLE 表名 ADD 字段名 類型 (長度) [ COMMENT 注釋 ] [ 約束 ];

?案例:

#為emp表增加一個新的字段”昵稱”為nickname,類型為varchar(20)
ALTER TABLE emp ADD nickname varchar(20) COMMENT '昵稱';

6.修改數據類型

ALTER TABLE 表名 MODIFY 字段名 新數據類型 (長度);

7.修改字段名和字段類型

ALTER TABLE 表名 CHANGE 舊字段名 新字段名 類型 (長度) [ COMMENT 注釋 ] [ 約束 ];

?案例:

#將emp表的nickname字段修改為username,類型為varchar(30)
ALTER TABLE emp CHANGE nickname username varchar(30) COMMENT '昵稱';

8.刪除字段

ALTER TABLE 表名 DROP 字段名;

?案例:

#將emp表的字段username刪除
ALTER TABLE emp DROP username;

9.修改表名

ALTER TABLE 表名 RENAME TO 新表名;

?案例:

#將emp表的表名修改為 employee
ALTER TABLE emp RENAME TO employee;

10.刪除表

DROP TABLE [ IF EXISTS ] 表名;

?案例:

#如果tb_user表存在,則刪除tb_user表
DROP TABLE IF EXISTS tb_user;

11.刪除指定表,并重新創建表

TRUNCATE TABLE 表名;

DML

添加數據

1.給指定字段添加數據

INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);

?案例:

#給employee表所有的字段添加數據 
insert into employee(id,workno,name,gender,age,idcard,entrydate)
values(1,'1','Itcast','男',10,'123456789012345678','2000-01-01');

2.給全全部字段添加數據

INSERT INTO 表名 VALUES (值1, 值2, ...);

?案例:

#插入數據到employee表
insert into employee values(2,'2','張無忌','男',18,'123456789012345670','2005-01-
01');

3.批量的添加數據

INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值
1, 值2, ...) ;INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...) ;

案例:

#批量插入數據到employee表
insert into employee values(3,'3','韋一笑','男',38,'123456789012345670','2005-01-
01'),(4,'4','趙敏','女',18,'123456789012345670','2005-01-01');

?修改數據

UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 條件 ] ;

刪除數據

DELETE FROM 表名 [ WHERE 條件 ] ;

DQL

基礎語法

SELECT字段列表
FROM表名列表
WHERE條件列表
GROUP BY分組字段列表
HAVING分組后條件列表
ORDER BY排序字段列表
LIMIT分頁參數

基礎查詢

1.查詢多個字段

SELECT 字段1, 字段2, 字段3 ... FROM 表名 ;
SELECT * FROM 表名 ;

2.字段設置別名

SELECT 字段1 [ AS 別名1 ] , 字段2 [ AS 別名2 ] ... FROM 表名;
SELECT 字段1 [ 別名1 ] , 字段2 [ 別名2 ] ... FROM 表名;

3.去除重復記錄

SELECT DISTINCT 字段列表 FROM 表名;

條件查詢

1.語法

SELECT 字段列表 FROM 表名 WHERE 條件列表 ;

2.條件

比較運算符功能
>大于
>=大于等于
<小于
<=小于等于
<>或!=不等于
BETWEEN...AND...在某個范圍之內(含最小、最大值)
IN(...)在in之后的列表中的值,多選一
LIKE 占位符模糊匹配(_匹配單個字符,%匹配任意一個字符)
IS NULL是NULL
==等于
常用邏輯運算符
運算符功能
ADD 或&&并且(多個條件同時成立)
OR 或 ||或者(多個條件任意一個成立)
NOT 或!非,不是

聚合函數

語法:

SELECT 聚合函數(字段列表) FROM 表名 ;
常見的聚合函數
函數功能
count統計數量
max最大值
min最小值
avg平均值
sum求和

分組查詢

語法

SELECT 字段列表 FROM 表名 [ WHERE 條件 ] GROUP BY 分組字段名 [ HAVING 分組
后過濾條件 ];# 根據性別分組 , 統計男性員工 和 女性員工的數量
select gender, count(*) from emp group by gender ;

排序查詢

語法

#ASC:升序(默認值) DESC:降序SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ; 1#根據年齡對公司的員工進行升序
select * from emp order by age asc;
select * from emp order by age;

分頁查詢

語法

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查詢記錄數 ;
# 查詢第1頁員工數據, 每頁展示10條記錄
select * from emp limit 0,10;
select * from emp limit 10;

執行順序

?DCL

查詢用戶

select * from mysql.user;

創建用戶

CREATE USER '用戶名'@'主機名' IDENTIFIED BY '密碼';

?案例:

#創建用戶itcast,只能夠在當前主機localhost進行訪問,密碼123456
create user 'itcast'@'localhost' identified by '123456';

修改用戶密碼

# 修改用戶heima的訪問密碼為1234;
ALTER USER '用戶名'@'主機名' IDENTIFIED WITH mysql_native_password BY '新密碼' ;

?案例:

alter user 'heima'@'%' identified with mysqlnativepassword by '1234';

刪除用戶

DROP USER '用戶名'@'主機名' ;

案例:

drop user 'itcast'@'localhost';

權限控制

權限說明
ALL、ALL PRIVLEGES所有權限
SELECT查詢數據
INSERT插入數據
UPDATE修改數據
ALTER修改表
DROP刪除數據庫/表/視圖
CREATE創建數據庫/表
DELETE刪除數據

1.查詢權限

SHOW GRANTS FOR '用戶名'@'主機名' ;

?案例:

#查詢 'heima'@'%' 用戶的權限
show grants for 'heima'@'%';

2.授予權限

GRANT 權限列表 ON 數據庫名.表名 TO '用戶名'@'主機名';

案例:

#授予 'heima'@'%' 用戶itcast數據庫所有表的所有操作權限
grant all on itcast.* to 'heima'@'%';

3.撤銷權限

REVOKE 權限列表 ON 數據庫名.表名 FROM '用戶名'@'主機名';

案例:

#撤銷 'heima'@'%' 用戶的itcast數據庫的所有權限
revoke all on itcast.* from 'heima'@'%';

函數

1.字符串函數

函數功能
CONCAT(S1,S2,...,Sn)字符串拼接,將S1,S2,...,Sn拼接成一個字符串
LOWER(str)將字符串str全部轉為小寫
UPPER(str)將字符串str全部轉換為大寫
LPAD(str,n,pad)左填充,用字符串pad對str的右邊進行填充,達到n個字符串長度
RPAD(str,n,pad)右填充,用字符串pad對str的右邊進行填充,達到n個字符串長度
TRIM(str)去掉字符串頭部和尾部的空格
SUBSTRING(str,start,len)返回從字符串str從start位置起的len個長度的字符串

案例:

  • concat:字符串拼接
select concat('Hello' , ' MySQL');
  • lower:全部轉小寫
select lower('Hello');
  • upper:全部轉大寫
select upper('Hello');
  • lpad:左填充
select lpad('01', 5, '-');
  • rpad:右填充
select rpad('01', 5, '-');
  • trim:去除空格
select trim(' Hello MySQL ');
  • substring:截取子字符串
select substring('Hello MySQL',1,5);

2.數值函數

常見的數值函數
函數功能
CEIL(x)向上取整
FLOOR(x)向下取整
MOD(x,y)返回x/y的模
RAND()返回0-1內的隨機數
ROUND(x,y)求參數x的四舍五入的值,保留y位小數
  • ceil:向上取整
select ceil(1.1);
  • floor:向下取整
select floor(1.9);
  • mod:取模
select mod(7,4);
  • rand:獲得隨機數
select rand();
  • round:四舍五入
select round(2.344,2);

3.日期函數

常見的日期函數
函數功能
CURDATE()
返回當前日期
CURTIME()
返回當前時間
NOW()
返回當前日期和時間
YEAR(date)
獲取指定 date 的年份
MONTH(date)
獲取指定 date 的月份
DAY(date)
獲取指定 date 的日期
DATE_ADD(date, INTERVAL expr type)
返回一個日期 / 時間值加上一個時間間隔 expr 后的時間值
DATEDIFF(date1,date2)
返回起始時間 date1 和 結束時間 date2 之間的天數
  • curdate :當前日期
select curdate();
  • curtime :當前時間
select curtime();
  • now :當前日期和時間
select now();
  • YEAR、MONTH、DAY:當前年、月、日
select YEAR(now());
select MONTH(now());
select DAY(now());
  • date_add:增加指定的時間間隔
select date_add(now(), INTERVAL 70 YEAR )
  • datediff:獲取兩個日期相差的天數
select datediff('2021-10-01', '2021-12-01');

流程函數

常見的流程函數
函數
功能
IF(value , t , f)
如果 value true ,則返回 t ,否則返回
f
IFNULL(value1 , value2)
如果 value1 不為空,返回 value1 ,否則
返回 value2
CASE WHEN [ val1 ] THEN [res1] ...
ELSE [ default ] END
如果 val1 true ,返回 res1 ...
則返回 default 默認值
CASE [ expr ] WHEN [ val1 ] THEN
[res1] ... ELSE [ default ] END
如果 expr 的值等于 val1 ,返回
res1 ... 否則返回 default 默認值
  • if
select if(false, 'Ok', 'Error');
  • ifnull
select ifnull('Ok','Default');
select ifnull('','Default');
select ifnull(null,'Default');
  • case when then else end
#需求: 查詢emp表的員工姓名和工作地址 (北京/上海-> 一線城市,其他-> 二線城市)
select
name,
( case workaddress when '北京' then '一線城市' when '上海' then '一線城市' else '二線城市' end ) as '工作地址' from emp;

約束

約束分類
約束描述關鍵字
非空約束限制該字段的所有數據都是唯一,不重復的NOT NULL
唯一約束
保證該字段的所有數據都是唯一、不重復的
UNIQUE
主鍵約束
主鍵是一行數據的唯一標識,要求非空且唯一
PRIMARY
KEY
默認約束
保存數據時,如果未指定該字段的值,則采用默認值
DEFAULT
檢查約束 (8.0.16 版本
之后 )
保證字段值滿足某一個條件
CHECK
外鍵約束
用來讓兩張表的數據之間建立連接,保證數據的一致 性和完整性
FOREIGN
KEY

語法

1.添加外鍵

CREATE TABLE 表名(
字段名 數據類型,
...
[CONSTRAINT] [外鍵名稱] FOREIGN KEY (外鍵字段名) REFERENCES 主表 (主表列名)
);
ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段名)
REFERENCES 主表 (主表列名) ;

案例:

alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references
dept(id);

2.刪除外鍵

ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱;
#刪除emp表的外鍵fk_emp_dept_id。
alter table emp drop foreign key fk_emp_dept_id;

3.刪除/更新行為

行為說明
NO
ACTION
當在父表中刪除 / 更新對應記錄時,首先檢查該記錄是否有對應外鍵,如果有則不允許刪除/ 更新。 ( RESTRICT 一致 ) 默認行為
RESTRICT
當在父表中刪除 / 更新對應記錄時,首先檢查該記錄是否有對應外鍵,如果有則不允許刪除/ 更新。 ( NO ACTION 一致 ) 默認行為
CASCADE
當在父表中刪除 / 更新對應記錄時,首先檢查該記錄是否有對應外鍵,如果有,則也刪除/ 更新外鍵在子表中的記錄。
SET NULL
當在父表中刪除對應記錄時,首先檢查該記錄是否有對應外鍵,如果有則設置子表中該外鍵值為null (這就要求該外鍵允許取 null )。
SET
DEFAULT
父表有變更時,子表將外鍵列設置成一個默認的值 (Innodb 不支持 )

語法:

ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段) REFERENCES
主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;
  • CASCADE
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references
dept(id) on update cascade on delete cascade ;
  • SET NULL
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references
dept(id) on update set null on delete set null ;

多表查詢

內連接

1.隱式內連接

SELECT 字段列表 FROM 表1 , 表2 WHERE 條件 ... ;

2.顯示內連接

SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 連接條件 ... ;

外連接

1.左外連接

SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 條件 ... ;

2.右外連接

SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 條件 ... ; 1

3.自連接

SELECT 字段列表 FROM 表A 別名A JOIN 表A 別名B ON 條件 ... ;

4.聯合查詢

SELECT 字段列表 FROM 表A ...
UNION [ ALL ]
SELECT 字段列表 FROM 表B ....;

案例:

#將薪資低于 5000 的員工 , 和 年齡大于 50 歲的員工全部查詢出來
select * from emp where salary < 5000
union all
select * from emp where age > 50;

5.子查詢

SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 );

6.列子查詢

操作符描述
IN
在指定的集合范圍之內,多選一
NOT IN
不在指定的集合范圍之內
ANY
子查詢返回列表中,有任意一個滿足即可
SOME
ANY 等同,使用 SOME 的地方都可以使用 ANY
ALL
子查詢返回列表的所有值都必須滿足

存儲引擎

1.建表時指定存儲引擎

CREATE TABLE 表名(
字段1 字段1類型 [ COMMENT 字段1注釋 ] ,
......
字段n 字段n類型 [COMMENT 字段n注釋 ]
) ENGINE = INNODB [ COMMENT 表注釋 ] ;

案例:

#創建表 my_myisam , 并指定MyISAM存儲引擎
create table my_myisam(
id int,
name varchar(10)
) engine = MyISAM ;

索引

1.創建索引

CREATE [ UNIQUE | FULLTEXT ] INDEX index_name ON table_name (
index_col_name,... ) ;

2.查看索引

SHOW INDEX FROM table_name ;

3.刪除索引

DROP INDEX index_name ON table_name ;

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

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

相關文章

微信小程序(由淺到深)

文章目錄 一. 項目基本配置1. 項目組成2. 常見的配置文件解析3. app.json全局的五大配置4.單個頁面中的page配置5. App函數6.tabBar配置 二. 基本語法&#xff0c;事件&#xff0c;單位1. 語法2. 事件3. 單位 三. 數據響應式修改四 . 內置組件1. button2. image3. input4. 組件…

k8s常用資源管理 控制

目錄 Pod&#xff08;容器組&#xff09;&#xff1a;Pod是Kubernetes中最小的部署單元&#xff0c;可以包含一個或多個容器。Pod提供了一種邏輯上的封裝&#xff0c;使得容器可以一起共享網絡和存儲資源 1、創建一個pod 2、pod管理 pod操作 目錄 創建Pod會很慢 Pod&…

什么是事務,并發帶來的事務問題以及事務隔離級別(圖文詳解)

一、什么是事務&#xff1f; 簡單說就是邏輯上的一組操作&#xff0c;要么都執行&#xff0c;要么都不執行。 舉個例子&#xff0c;假如小明要給小紅轉賬100元&#xff0c;這個轉賬會涉及到兩個關鍵操作&#xff1a;①將小明的余額減少100元。 ②將小紅的余額增加100元 。但…

學習筆記整理-JS-04-流程控制語句

文章目錄 一、條件語句1. if語句的基本使用2. if else if多條件分支3. if語句算法題4. switch語句5. 三元運算符 二、循環語句1. for循環語句2. for循環算法題3. while循環語句4. break和continue5. do while語句 三、初識算法1. 什么是算法2. 累加器和累乘器3. 窮舉法4. 綜合算…

給大家推薦一些文本翻譯、文檔翻譯API接口

最近在項目中要接入文本翻譯和文檔翻譯功能&#xff0c;滿足在工作時使用&#xff0c;又需要了解每個人的使用情況&#xff0c;所以采用了集成翻譯API的方式&#xff0c;我再調研時也查了比較多的資料&#xff0c;總結了我感覺比較好的網站。 推薦網站 1、百度翻譯&#xff0…

設計模式(2)工廠方法模式

一、 1、介紹&#xff1a;定義一個用于創建對象的接口&#xff0c;讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。簡單工廠模式的最大優點在于工廠類中包含了必要的邏輯判斷&#xff0c;根據客戶端的選擇條件動態實例化相關的類&#xff0c;對于客戶端來說…

odoo-034 float 浮點數比較

文章目錄 前提問題解決總結 前提 odoo 版本&#xff1a;13 python&#xff1a;3.6.9 問題 比較銷售訂單行中已送貨跟已開票&#xff0c;在 tree 視圖顯示搜索后的結果。發現搜索條件為已送貨 > 已開票時&#xff0c;結果中會包含已送貨已開票的。 解決 把這兩個值打印出…

LeNet中文翻譯

Gradient-Based Learning Applied to Document Recognition 基于梯度的學習應用于文檔識別 摘要 使用反向傳播算法訓練的多層神經網絡構成了成功的基于梯度的學習技術的最佳示例。給定適當的網絡架構&#xff0c;基于梯度的學習算法可用于合成復雜的決策表面&#xff0c;該決策…

【Vue-Router】使用 prams 路由傳參失效

報錯信息&#xff1a; [Vue Router warn]: Discarded invalid param(s) “name”, “price”, “id” when navigating. list.json {"data": [{"name": "面","price":300,"id": 1},{"name": "水",&quo…

node獲取微信小程序登錄用戶的openid

前提準備&#xff1a; 1、需要知道AppID(小程序ID) 2、AppSecret(小程序密鑰) 3、調wx.login成功后返回的code 代碼如下&#xff1a; const express require(express); const router express.Router(); const request require(request) const APP_URL https://api.wei…

考研408 | 【計算機網絡】 網絡層

導圖 網絡層&#xff1a; 路由器功能&#xff1a;轉發&路由選擇 數據平面 數據平面執行的主要功能是根據轉發表進行轉發&#xff0c;這是路由器的本地動作。 控制平面 1.傳統方法/每路由器法&#xff1a; 2.SDN方法&#xff08;Software-Defined Networking) 控制平面中的…

C++并發多線程--多個線程的數據共享和保護

目錄 1--創建并等待多個線程 2--數據共享 2-1--數據只讀 2-2--數據讀寫 2-3--共享數據保護簡單案例 1--創建并等待多個線程 創建多個線程時&#xff0c;可以使用同一個線程入口函數&#xff1b; 多個線程的執行順序與操作系統的調度機制有關&#xff0c;并不和創建線程的先…

html實現商品圖片放大鏡,html圖片放大鏡預覽

效果 實現 復制粘貼&#xff0c;修改圖片路徑即可使用 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>商品圖片放大鏡</title></head><style>body {margin: 0;padding: 0;}#app {padding: 10px;posit…

關于青少年學習演講與口才對未來的領導力的塑造的探析

標題&#xff1a;青少年學習演講與口才對未來領導力的塑造&#xff1a;一項探析 摘要&#xff1a; 本論文旨在探討青少年學習演講與口才對未來領導力的塑造的重要性和影響。通過分析演講和口才對青少年的益處&#xff0c;以及如何培養這些技能來促進領導力的發展&#xff0c;我…

Harmony創建項目ohpm報錯

Harmony創建FA模型的項目時報如下錯&#xff1a; The registry is empty - edit .ohpmrc file or use "ohpm config set registry your_registry" command to set registry.解決方法&#xff1a; File -> Settings -> Build,Execution,Deployment -> Ohpm …

機器學習基礎(五)

決策樹 決策樹是一種預測模型,它代表著對象屬屬性與對象值之間的一種映射關系。樹中的每個節點代表一個對象,分叉路徑(或者叫樹枝)則代表一個屬性值。 決策樹常用方法: 分類樹分析,是一種監督學習,用于預計結果可能為離散類型。 回歸樹分析,用于預計結果為實數。 CART,…

Mysql事務及其隔離機制/隔離級別

mysql事務特性是什么&#xff1f; 原子性(atomicity)&#xff1a;一個事務必須視為一個不可分割的最小工作單元&#xff0c;整個事務中的所有操作要么全部提交成功&#xff0c;要么全部失敗回滾&#xff0c;對于一個事務來說&#xff0c;不可能只執行其中的一部分操作&#xf…

docker可視化工具Portainer

1:Portainer簡介 Portainer是一個docker可視化管理工具&#xff0c;可以非常方便地管理docker鏡像容器。官網地址&#xff1a;https://www.portainer.io/ 注&#xff1a;現在Portainer有BE&#xff08;收費&#xff09;和CE&#xff08;免費&#xff09;版本&#xff0c;安裝的…

【音視頻、chatGpt】h5頁面最小化后,再激活后視頻停住問題的解決

目錄 現象 觀察 解決 現象 頁面有時候要切換&#xff0c;要最小化&#xff1b;短時間或者幾個小時內切換回來&#xff0c;視頻可以正常續上&#xff1b;而放置較長時間&#xff0c;幾個小時或者一晚上&#xff0c;切換回來后&#xff0c;視頻可能卡死 觀察 切換頁面&#x…

【解讀Spikingjelly】使用單層全連接SNN識別MNIST

原文檔&#xff1a;使用單層全連接SNN識別MNIST — spikingjelly alpha 文檔 代碼地址&#xff1a;完整的代碼位于activation_based.examples.lif_fc_mnist.py GitHub - fangwei123456/spikingjelly: SpikingJelly is an open-source deep learning framework for Spiking Neur…