MySQL 複製表結構和表數據

1、前言

  在功能開發完畢,在本地或者測試環境進行測試時,經常會遇到這種情況:有專門的測試數據,測試過程會涉及到修改表中的數據,經常不能一次測試成功,所以,每次執行測試后,原來表中的數據其實已經被修改了,下一次測試,就需要將數據恢復。

  我一般的做法是:先創建一個副本表,比如測試使用的user表,我在測試前創建副本表user_bak,每次測試后,將user表清空,然後將副本表user_bak的數據導入到user表中。

  上面的操作是對一個table做備份,如果涉及到的table太多,可以創建database的副本。

  接下來我將對此處的表結構複製以及表數據複製進行闡述,並非數據庫的複製原理!!!!

  下面是staff表的表結構

create table staff (
	id int not null auto_increment comment '自增id',
	name char(20) not null comment '用戶姓名',
	dep char(20) not null comment '所屬部門',
	gender tinyint not null default 1 comment '性別:1男; 2女',
	addr char(30) not null comment '地址',
	primary key(id),
	index idx_1 (name, dep),
	index idx_2 (name, gender)
) engine=innodb default charset=utf8mb4 comment '員工表';

 

2、具體方式 

  2.1、執行舊錶的創建SQL來創建表

  如果原始表已經存在,那麼可以使用命令查看該表的創建語句:

mysql> show create table staff\G
*************************** 1. row ***************************
       Table: staff
Create Table: CREATE TABLE `staff` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `name` char(20) NOT NULL COMMENT '用戶姓名',
  `dep` char(20) NOT NULL COMMENT '所屬部門',
  `gender` tinyint(4) NOT NULL DEFAULT '1' COMMENT '性別:1男; 2女',
  `addr` char(30) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_1` (`name`,`dep`),
  KEY `idx_2` (`name`,`gender`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='員工表'
1 row in set (0.01 sec)

  可以看到,上面show creat table xx的命令執行結果中,Create Table的值就是創建表的語句,此時可以直接複製創建表的SQL,然後重新執行一次就行了。

  當數據表中有數據的時候,看到的創建staff表的sql就會稍有不同。比如,我在staff中添加了兩條記錄:

mysql> insert into staff values (null, '李明', 'RD', 1, '北京');
Query OK, 1 row affected (0.00 sec)

mysql> insert into staff values (null, '張三', 'PM', 0, '上海');
Query OK, 1 row affected (0.00 sec)

mysql> select * from staff;
+----+--------+-----+--------+--------+
| id | name   | dep | gender | addr   |
+----+--------+-----+--------+--------+
|  1 | 李明   | RD  |      1 | 北京   |
|  2 | 張三   | PM  |      0 | 上海   |
+----+--------+-----+--------+--------+
2 rows in set (0.00 sec)

  此時在執行show create table命令:

mysql> show create table staff\G
*************************** 1. row ***************************
       Table: staff
Create Table: CREATE TABLE `staff` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `name` char(20) NOT NULL COMMENT '用戶姓名',
  `dep` char(20) NOT NULL COMMENT '所屬部門',
  `gender` tinyint(4) NOT NULL DEFAULT '1' COMMENT '性別:1男; 2女',
  `addr` char(30) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_1` (`name`,`dep`),
  KEY `idx_2` (`name`,`gender`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='員工表'
1 row in set (0.00 sec)

  注意,上面結果中的倒數第二行

    ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT=’員工表’

  因為staff表的id是自增的,且已經有了2條記錄,所以下一次插入數據的自增id應該為3,這個信息,也會出現在表的創建sql中。

    

  2.2、使用like創建新表(僅包含表結構)

  使用like根據已有的表來創建新表,特點如下:

  1、方便,不需要查看原表的表結構定義信息;

  2、創建的新表中,表結構定義、完整性約束,都與原表保持一致。

  3、創建的新表是一個空表,全新的表,沒有數據。

  用法如下:

mysql> select * from staff;  #舊錶中已有2條數據
+----+--------+-----+--------+--------+
| id | name   | dep | gender | addr   |
+----+--------+-----+--------+--------+
|  1 | 李明   | RD  |      1 | 北京   |
|  2 | 張三   | PM  |      0 | 上海   |
+----+--------+-----+--------+--------+
2 rows in set (0.00 sec)

mysql> create table staff_bak_1 like staff;  # 直接使用like,前面指定新表名,後面指定舊錶(參考的表)
Query OK, 0 rows affected (0.02 sec)

mysql> show create table staff_bak_1\G
*************************** 1. row ***************************
       Table: staff_bak_1
Create Table: CREATE TABLE `staff_bak_1` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `name` char(20) NOT NULL COMMENT '用戶姓名',
  `dep` char(20) NOT NULL COMMENT '所屬部門',
  `gender` tinyint(4) NOT NULL DEFAULT '1' COMMENT '性別:1男; 2女',
  `addr` char(30) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_1` (`name`,`dep`),
  KEY `idx_2` (`name`,`gender`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='員工表'  # 注意沒有AUTO_INCREMENT=3
1 row in set (0.00 sec)

mysql> select * from staff_bak_1; # 沒有包含舊錶的數據
Empty set (0.00 sec)

  

  2.3、使用as來創建新表(包含數據)

  使用as來創建新表,有一下特點:

  1、可以有選擇性的決定新表包含哪些字段;

  2、創建的新表中,會包含舊錶的數據;

  3、創建的新表不會包含舊錶的完整性約束(比如主鍵、索引等),僅包含最基礎的表結構定義。

  用法如下:

mysql> create table staff_bak_2 as select * from staff;
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from staff_bak_2;
+----+--------+-----+--------+--------+
| id | name   | dep | gender | addr   |
+----+--------+-----+--------+--------+
|  1 | 李明   | RD  |      1 | 北京   |
|  2 | 張三   | PM  |      0 | 上海   |
+----+--------+-----+--------+--------+
2 rows in set (0.00 sec)

mysql> show create table staff_bak_2\G
*************************** 1. row ***************************
       Table: staff_bak_2
Create Table: CREATE TABLE `staff_bak_2` (
  `id` int(11) NOT NULL DEFAULT '0' COMMENT '自增id',
  `name` char(20) CHARACTER SET utf8mb4 NOT NULL COMMENT '用戶姓名',
  `dep` char(20) CHARACTER SET utf8mb4 NOT NULL COMMENT '所屬部門',
  `gender` tinyint(4) NOT NULL DEFAULT '1' COMMENT '性別:1男; 2女',
  `addr` char(30) CHARACTER SET utf8mb4 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

  

  利用as創建表的時候沒有保留完整性約束,其實這個仔細想一下也能想明白。因為使用as創建表的時候,可以指定新表包含哪些字段呀,如果你創建新表時,忽略了幾個字段,這樣的話即使保留了完整約束,保存數據是也不能滿足完整性約束。

  比如,staff表有一個索引idx1,由name和dep字段組成;但是我創建的新表中,沒有name和dep字段(只選擇了其他字段),那麼新表中保存idx1也沒有必要,對吧。

mysql> --  只選擇id、gender、addr作為新表的字段,那麼name和dep組成的索引就沒必要存在了
mysql> create table staff_bak_3 as (select id, gender, addr from staff);
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> show create table staff_bak_3\G
*************************** 1. row ***************************
       Table: staff_bak_3
Create Table: CREATE TABLE `staff_bak_3` (
  `id` int(11) NOT NULL DEFAULT '0' COMMENT '自增id',
  `gender` tinyint(4) NOT NULL DEFAULT '1' COMMENT '性別:1男; 2女',
  `addr` char(30) CHARACTER SET utf8mb4 NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

mysql> select * from staff_bak_3;
+----+--------+--------+
| id | gender | addr   |
+----+--------+--------+
|  1 |      1 | 北京   |
|  2 |      0 | 上海   |
+----+--------+--------+
2 rows in set (0.00 sec)

  

  2.4、使用like+insert+select創建原表的副本(推薦)

  使用like創建新表,雖然保留了舊錶的各種表結構定義以及完整性約束,但是如何將舊錶的數據導入到新表中呢?

  最極端的方式:寫一個程序,先將舊錶數據讀出來,然後寫入到新表中,這個方式我就不嘗試了。

  有一個比較簡單的命令:

mysql> select * from staff; #原表數據
+----+--------+-----+--------+--------+
| id | name   | dep | gender | addr   |
+----+--------+-----+--------+--------+
|  1 | 李明   | RD  |      1 | 北京   |
|  2 | 張三   | PM  |      0 | 上海   |
+----+--------+-----+--------+--------+
2 rows in set (0.00 sec)

mysql> select * from staff_bak_1; # 使用like創建的表,與原表相同的表結構和完整性約束(自增除外)
Empty set (0.00 sec)

mysql> insert into staff_bak_1 select * from staff;  # 將staff表的所有記錄的所有字段值都插入副本表中
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from staff_bak_1;
+----+--------+-----+--------+--------+
| id | name   | dep | gender | addr   |
+----+--------+-----+--------+--------+
|  1 | 李明   | RD  |      1 | 北京   |
|  2 | 張三   | PM  |      0 | 上海   |
+----+--------+-----+--------+--------+
2 rows in set (0.00 sec)

  

  其實這條SQL語句,是知道兩個表的表結構和完整性約束相同,所以,可以直接select *。

insert into staff_bak_1 select * from staff;

  

  如果兩個表結構不相同,其實也是可以這個方式的,比如:

mysql> show create table demo\G
*************************** 1. row ***************************
       Table: demo
Create Table: CREATE TABLE `demo` (
  `_id` int(11) NOT NULL AUTO_INCREMENT,
  `_name` char(20) DEFAULT NULL,
  `_gender` tinyint(4) DEFAULT '1',
  PRIMARY KEY (`_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)

# 只將staff表中的id和name字段組成的數據記錄插入到demo表中,對應_id和_name字段
mysql> insert into demo (_id, _name) select id,name from staff;
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from demo;
+-----+--------+---------+
| _id | _name  | _gender |
+-----+--------+---------+
|   1 | 李明   |       1 |
|   2 | 張三   |       1 |
+-----+--------+---------+
2 rows in set (0.00 sec)

  這是兩個表的字段數量不相同的情況,此時需要手動指定列名,否則就會報錯

 

  另外,如果兩個表的字段數量,以及相同順序的字段類型相同,如果是全部字段複製,即使字段名不同,也可以直接複製

# staff_bak_5的字段名與staff表並不相同,但是字段數量、相同順序字段的類型相同,所以可以直接插入
mysql> show create table staff_bak_5\G
*************************** 1. row ***************************
       Table: staff_bak_5
Create Table: CREATE TABLE `staff_bak_5` (
  `_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `_name` char(20) NOT NULL COMMENT '用戶姓名',
  `_dep` char(20) NOT NULL COMMENT '所屬部門',
  `_gender` tinyint(4) NOT NULL DEFAULT '1' COMMENT '性別:1男; 2女',
  `_addr` char(30) NOT NULL,
  PRIMARY KEY (`_id`),
  KEY `idx_1` (`_name`,`_dep`),
  KEY `idx_2` (`_name`,`_gender`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='員工表'
1 row in set (0.00 sec)

mysql> insert into staff_bak_5 select * from staff;
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from staff_bak_5;
+-----+--------+------+---------+--------+
| _id | _name  | _dep | _gender | _addr  |
+-----+--------+------+---------+--------+
|   1 | 李明   | RD   |       1 | 北京   |
|   2 | 張三   | PM   |       0 | 上海   |
+-----+--------+------+---------+--------+
2 rows in set (0.00 sec)

  

  

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

電動車商機大、日電池材料商瘋增產

 

日本鋰離子電池材料商W-Scope於9月4日發布新聞稿宣布,因來自電動車的需求急增,加上家電產品、電動工具需求持續強勁,故決議投下200億日圓擴增鋰離子電池關鍵材料分隔膜(separator)產能,計畫在南韓子公司W-SCOPE CHUNGJU PLANT CO., LTD.增設四條產線,其中第12-13號產線預計2019年下半年量產、第14-15號產線預計2020年上半年量產。

W-Scope指出,除上述四條新產線之外,該公司之前已進行增產投資,興建第8-11號分隔膜產線,其中第8-9號產線預計2017年下半年量產、第10-11號預計2018年上半年量產,而待上述八條產線全數導入量產後,2020年末整體分隔膜產能將擴增至2016年末的3.6倍水準。

在電動車市場持續擴大的背景下,日本其他鋰電池材料廠紛紛傳出增產消息。日刊工業新聞8月1日報導,Toray計畫在2020年結束前總計砸下約1,200億日圓擴增車用鋰離子電池關鍵材料分隔膜產能,目標將分隔膜年產能擴增至19.5億平方公尺、將達現行的約五倍。

日刊工業新聞6月23日報導,因車廠加快電動車的研發腳步、帶動電池材料市場成長速度超乎預期,故旭化成(Asahi Kasei)計畫上修鋰離子電池關鍵材料分隔膜的增產計畫,目標在2020年結束前將分隔膜年產能最高擴增至15億平方公尺、將達現行的2.5倍,且將遠高於原先規劃的11億平方公尺目標,期望藉由積極投資、鞏固全球龍頭位置。預估追加擴產所需的投資額約300億日圓。

鋰離子電池四大關鍵材料分別為正極材、負極材、分隔膜和電解液,而這些電池材料皆由日系廠商握有高市佔率,其中,在全球分隔膜市場上,旭化成為龍頭廠、Toray緊追在後。

根據日本市調機構富士經濟(Fuji Keizai)預估,2020年全球分隔膜市場規模將增至3,000億日圓、將達2015年的2倍水準,而電動車、混合動力車等車用用途是推動分隔膜需求急增的最大功臣,預估2020年車用分隔膜佔整體市場比重將達約45%。

富士經濟6月22日公布調查報告指出,預估2030年時電動車年銷售量將增至407萬台、超越混合動力車,且之後雙方的差距將持續擴大。富士經濟預估,在中國需求增加加持下,2035年電動車全球銷售量將擴大至630萬台、將達2016年的13.4倍。

(本文內容由授權使用。首圖為鋰電池材料分隔膜,出處:MoneyDJ)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

趨勢無法擋!BMW、JLR宣布自2020年起力推電動車

Thomson Reuters報導,英國最大汽車製造商Jaguar Land Rover(JLR)7日宣布,2020年起旗下所有新車都將具備電動或油電混合驅動選項。英國跟隨法國以及馬德里、墨西哥城和雅典等城市的抗空汙腳步,7月宣布將自2040年起禁止販售汽油和柴油新車。

德國車廠BMW 7日宣布將自2020年起開始量產電動車、預估到2025年將有12種純電動車款。BMW執行長Harald Krueger表示,電動車續航力將上看700公里。電池成本約占電動車造價的30到50%。巴克萊(Barclays)預估電池產能的大幅提升將可令電動車、內燃引擎車在2020到2030年間達到「成本平價」。ING預估歐洲有望在2035年成為100%的電動車市場。

BBC News報導,BMW研發部負責人Klaus Froehlich 日前表示,電動移動趨勢是不可逆轉的,自2020年起BMW所有車款都將擁有電動驅動選項。

(本文內容由授權使用。)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

戴姆勒打造豪華電動SUV,砸10億美元在美國擴廠

 

德國豪華車廠戴姆勒(Daimler)於9月21日宣布,將加碼十億美元投資位在美國阿拉巴馬州(Alabama)的廠房,計畫生產純電動休旅車。

擴廠是戴姆勒電動化策略的一環,今年七月,戴姆勒已宣布在中國蓋電池組裝廠,並計畫2022年於全球推出50款純電動或部份電動車。

道瓊社報導,戴姆勒董事Markus Schafer在受訪時表示,車業正處在大轉變階段,戴姆勒在高階市場位處領先,但也明顯感受到新競爭者的威脅。

按照戴姆勒計畫,電動休旅車將在2020年初進入量產,連同廠旁明年動工的電池系統產線,估計可創造最多600個新工作機會。

(本文內容由授權使用。圖片出處:Daimler)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

貿協領軍,台菲擬聯手搶攻電動車商機

電動車產業拚新南向市場,外貿協會董事長黃志芳於9月28日表示,近期貿協已與菲律賓和印度洽談合作商機,並與國內廠商組成「電動車聯盟」,第一站將進軍菲律賓,與菲律賓合作搶攻逾百億元商機。

黃志芳昨日拜訪菲律賓電動車協會(Evap),並達成共同合作電動車產業協議;他指出,目前電動車產業聯盟納入多家大型台廠,包含大同、東元、車王電等,明年元旦起菲律賓將強制推動電動小巴士上路,預估將於6年內創造出2萬輛電動車的龐大商機。

菲律賓電動車產業協會主席隆美爾(Rommel Juan)則表示,菲律賓的電動車產業剛起步,需要台灣廠商協助,包含電池系統、電力交換架構、行車管理系統、無線網路與衛星定位系統等,希望台廠能協助菲國制定電動車各領域規格,以求降低成本、大量生產,並共創雙贏。菲律賓電動車產業協會最快六個月內即會組團,來台灣參加汽機車零配件展,並拜訪電動車產業聯盟等多家廠商,研議合作計畫與大方向。

(本文內容由授權使用。圖片出處:public domain CC0)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

特斯拉Q3 Model 3產量僅達260台、遠低於預期

特斯拉(Tesla)於美國股市2日盤後公布2017年第3季車輛交付和生產數據。特斯拉2日在正常盤上漲0.13%、收341.53美元;盤後下跌1.47%至336.52美元。

特斯拉第3季交付26,150台,Model S、Model X以及Model 3分別為14,065台、11,865台以及220台。特斯拉指出,第3季Model S、Model X交付數量創下歷史新高,較2016年第3季上揚4.5%、較2017年第2季增加17.7%。

特斯拉原本預期今年下半年Model S、Model X交付數量可能高於上半年的47,077台、目前預估將超出數千台。特斯拉最新預估為2017年Model S、Model X交付量約達10萬台,較2016年增加31%。

除了上述交運量外,第3季底約有4,820台Model S、Model X是在運送途中,這些將被列為第4季交付數量。

特斯拉第3季產量合計達25,336台、當中有260台是Model 3。受生產瓶頸影響、Model 3 Q3產量低於預期。特斯拉強調,Model 3無論是生產或供應鏈皆未遭遇根本性問題,公司有信心在近期內解決瓶頸議題。

(本文內容由授權使用。圖片出處:Tesla)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

極重要市場,福斯:2035 年 EV 占中國銷量比重衝 50%

日經新聞,德國福斯(Volkswagen,VW)社長 Herbert Diess 2 日在博鰲舉行的國際會議上宣布,將在 2035 年結束前把電動車(EV)佔中國年間新車銷售量比重提高至 50%。當前佔比不到 1%。

Diess 在上述會議上發表演說時表示,「對福斯的 EV 攻略來說、中國市場是極為重要的。將藉由攜手合資夥伴及加強當地的研發,擴大市佔」。

據報導,中國是福斯的最重要市場,2018 年福斯於中國市場的新車銷售量約 420 萬台、佔其整體銷量比重達約 4 成。

Herbert Diess 曾於 3 月 5 日接受媒體採訪時表示,計畫在 2030 年將 EV 佔全球銷售量比重提高至 40%,其中歐洲、中國將提高至 45% 左右。福斯之前宣告的目標是要在 2025 年將 EV 佔全球銷售量比重提高至 25%。

日本汽車業龍頭豐田汽車(Toyota)6 月 7 日宣布,計畫在 2025 年將電動化車款(包含電動車 EV、燃料電池車 FCV、油電混合車 HV 和插電式油電混合車 PHV)佔全球新車銷售量比重提高至 50% 以上水準,也就是計畫在 2025 年賣出 550 萬台電動化車款。上述電動化車款的銷售量目標達成時間較豐田於 2017 年底時預估的 2030 年提前了 5 年。

本田(Honda)於 3 月 5 日宣布,為了加快於歐洲市場的電動化腳步,目標在 2025 年結束前將在歐洲販售的 4 輪車全數更換成油電混合車、電動車等電動化車款。本田在 2017 年宣告的目標是要在 2025 年前將歐洲販售的 2/3 4 輪車電動化,而此次則是大幅加快電動化腳步。

日本市調機構富士經濟(Fuji Keizai)公布調查報告指出,在中國、歐洲、美洲需求加持下,預估 2035 年全球電動化車款(xEV;包含電動車、插電式油電混合車、油電混合車、輕型 HV(Mild-Hybrid;48V)和燃料電池車)市場規模(銷售量)預估為 6,341 萬台、將較 2017 年(442 萬台)飆增 13.3 倍(增加約 1,330%);其中,中國市場預估為 2,045 萬台、將較 2017 年(83 萬台)暴增 23.6 倍。

(本文內容由 授權使用。首圖來源:)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

標準庫bufio個人詳解

本文是我有通俗的語言寫的如果有誤請指出。

先看bufio官方文檔

https://studygolang.com/pkgdoc文檔地址

 

 主要分三部分Reader、Writer、Scanner

分別是讀數據、寫數據和掃描器三種數據類型的相關操作 這個掃描後面會詳細說我開始也沒弄明白其實很簡單。

 

Reader

func 

func NewReaderSize(rd ., size ) *

NewReaderSize創建一個具有最少有size尺寸的緩衝、從r讀取的*Reader。如果參數r已經是一個具有足夠大緩衝的* Reader類型值,會返回r。

 

 

 解釋:看官方解釋這個方法可能不太容易懂,這個意思就是就是你可以給*Reader自定義一個size大小的緩衝區,*Reader每次從底層io.Reader(也就是你那個文件或者流)中預讀size大小的數據到緩衝區中(可能讀不滿),然後你每次讀數據實際是從這個緩衝區中拿數據。

 

 下面是NewReaderSize源碼

func NewReaderSize(rd io.Reader, size int) *Reader {
    // Is it already a Reader?
    b, ok := rd.(*Reader)
    if ok && len(b.buf) >= size {
        return b
    }
    if size < minReadBufferSize { //minReadBufferSize==16
        size = minReadBufferSize
    }
    r := new(Reader)
    r.reset(make([]byte, size), rd)
    return r
}

  r.reset 初始化了一個*Reader 返回大小是size。

func 

func NewReader(rd .) *

NewReader創建一個具有默認大小緩衝、從r讀取的*Reader。

解釋:那這個NewReader就很好解釋了 和NewReaderSize基本一樣就是緩衝區大小是默認設置好的

func (*Reader) 

func (b *) Peek(n ) ([], )

解釋:Peek就是返回緩存的一個切片,該切片引用緩存中的前N個字節的數據,如果n大於總大小,則返回能讀到的字節數的數據。

func (*Reader) 

func (b *) Read(p []) (n , err )

Read讀取數據寫入p。本方法返回寫入p的字節數。本方法一次調用最多會調用下層Reader接口一次Read方法,因此返回值n可能小於len(p)。讀取到達結尾時,返回值n將為0而err將為io.EOF。

解釋:如果緩存不為空則直接從緩存中讀數據不會從底層io.Reader讀,如果緩存為空len(p)>緩存大小,則直接從底層io.Reader讀數據到p。

如果len(p)<緩存大小,則先從底層io.Reader中讀數據到緩存再到p。

 

主要就這幾個 還有幾個文檔寫的都很清楚易懂我就不多寫了。

Writer類型的方法和Reader類型的方法差不多也很易懂主要就一個Flush要注意。

func (*Writer) 

func (b *) Flush() 

Flush方法將緩衝中的數據寫入下層的io.Writer接口。

和Reader是倒過來的,Writer每次寫數據是先寫入緩衝區的,進程緩衝區填滿后,通過進程緩衝寫入到內核緩衝再寫入到磁盤,使用Flush就不等填滿直接走寫入流程了,保證你的數據及時寫入文件。

 

 

 

 解釋:scanner類型掃描器 官方的說法很複雜,我也沒太看懂找了很多資料,其實就是你在數據傳輸的時候時候使用“分隔符”,scanner類型可以通過分隔符逐個迭代你的數據。

上面4個函數func Scan……  就是分隔符的判斷函數這4個是給你預設好的,你也可以按照自己的需求改寫。

怎麼改寫呢,看下面

func (*Scanner) 

func (s *) Split(split )

這個Split方法就是設置你這個scanner的用哪個SplitFunc類型的函數

在看下面這個SpliFunc類型的函數簽名

type SplitFunc func(data [], atEOF ) (advance , token [], err )

照着這個格式寫一個不就得了么,當然具體寫法給出了但是你不會?沒關係咱看一下官方是咋寫的。

https://github.com/golang/go/blob/master/src/bufio/scan.go?name=release#57官方源碼地址

func ScanLines(data []byte, atEOF bool) (advance int, token []byte, err error) {
	if atEOF && len(data) == 0 {
		return 0, nil, nil
	}
	if i := bytes.IndexByte(data, '\n'); i >= 0 {
		// We have a full newline-terminated line.
		return i + 1, dropCR(data[0:i]), nil
	}
	// If we're at EOF, we have a final, non-terminated line. Return it.
	if atEOF {
		return len(data), dropCR(data), nil
	}
	// Request more data.
	return 0, nil, nil
}

   

看bytes.IndexByte(data, ‘\n’);這段不就是在找行尾嘛 比如你想改成以“;”為分隔符的就改成bytes.IndexByte(data, ‘;’);不就得了么

func main(){
    scanner:=bufio.NewScanner(
        strings.NewReader("abcdefg\nhigklmn"),
    )
    scanner.Split(ScanLines) //這裏可以隨意選擇用哪個函數也可以自定義,可以不指定默認為\n做分隔符
  for scanner.Scan(){
    fmt.Println(scanner.Text())
  }
}

  

到此為止拉~

 

 

 

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

NEDO、夏普和豐田攜手,高效太陽能電動車 7 月下旬上路測試

豐田的插電式油電混合車 Prius PHV 將再出發。最近夏普、豐田以及日本新能源產業技術總合開發機構(NEDO)攜手合作,在 Prius PHV 裝設 34% 超高效率太陽能板,推出全新規模的太陽能油電混合車,預計將在 7 月下旬上路測試。

Prius PHV 是從 Prius 衍伸出來的插電式油電車,除了一般的鋰離子充電系統,還可以裝設轉換效率達 22%、容量共 180W 的太陽能板,只不過其在日照充裕時只能增加 6.1公里的行駛距離,著實不夠。

而現在該團隊決定換一種太陽能光電技術,NEDO 透過磷化銦鎵(InGaP)、砷化鎵(GaAs)、砷化銦鎵(InGaAs)等三五族半導體,研發出轉換效率超越 34% 的超高效率三接面(Triple-junction)太陽能板。

這些僅有 0.03mm 太陽能板將會裝設在引擎蓋、車頂與後車箱之上,也因為搭載的太陽能板轉換效率大幅提升,發電容量也不可同日而語,已從 180W 躍升至 860W,車輛靜止狀態下可增加 44.5 的續航距離,是過去 Prius PHV 車型的 7 倍左右,且車輛行駛時也能提供電力,將續航距離提升至 56.3 公里。

其中該計畫是由 NEDO 主導,2016 年 4 月時 NEDO 成立車載太陽戰略委員會,希望能透過太陽能系統,找出緩解交通能源與環境問題的解決方案,而團隊目前盼望能在有限的裝設空間下,利用轉換效率高達 30% 的太陽能板,實現 1KW 的發電潛力。

目前團隊將會在本月下旬在日本東京、愛知縣豐田市的道路、高速公路上進行測試,測試時間將在 2020 年 2 月底結束。 NEDO、豐田與夏普將能共享實驗測試的全部數據,也將會進一步評估能降低多少二氧化碳排放量、是否真的能降低充電次數以及大眾的接受度等等。

隨著太陽能與電動車技術日新月異,未來將會有愈來愈多新奇有趣車型出爐,雖然些車輛的外型或是性能,還無法跟傳統燃油車相比,但這些都是綠色能源車的新嘗試。就好比先前荷蘭新創公司 Lightyear 也宣布,首款太陽能電動原型車 Lightyear One 預計在 2021 年開始量產上市,充電一次就能跑 725 公里。

(合作媒體:。首圖來源:)

延伸閱讀:

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

滴滴每天處理超4875TB數據 基於AI的需求預估準確率達85%

  作者:行者崟濤

  【TechWeb】在 2019 博世智能出行大會上,滴滴旗下小桔車服車聯網業務負責人黃智信表示,滴滴大概每天處理超過 106TB 的軌跡數據,4875TB 的綜合數據,通過 AI 和大數據技術,可以進行叫車供給需求 15 分鐘后的預測,目前準確率達到 85%,派單導航 ETA 誤差率小於 15%,此外還有很多的安全功能等等。

  過去都是通過手機把車和人連接起來,目前滴滴也在做一些探索,如何更好的結合車輛相關數據,實現智能充電、智能維保和派單系統的結合,以更好地提高車輛運營效率和司機體驗。

  黃智信也提出,滴滴也希望可以跟更多產業鏈上下游合作夥伴一起,在數據、技術、產品等方面實現更加開放、深度的合作,為司機和乘客提供更為安全、便捷、舒適的體驗,更好的鼓勵安全、良好的駕駛行為。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整