Mysql筆記3

?? ?1、快速創建表


?? ?原理:
?? ??? ?將一個查詢結果當做一張表新建
?? ??? ?這個可以完成表的快速復制
?? ?create table emp2 as select * from emp;
?? ?mysql> select * from emp2;
?? ?+-------+--------+-----------+------+------------+---------+---------+--------+
?? ?| EMPNO | ENAME ?| JOB ? ? ? | MGR ?| HIREDATE ? | SAL ? ? | COMM ? ?| DEPTNO |
?? ?+-------+--------+-----------+------+------------+---------+---------+--------+
?? ?| ?7369 | SMITH ?| CLERK ? ? | 7902 | 1980-12-17 | ?800.00 | ? ?NULL | ? ? 20 |
?? ?| ?7499 | ALLEN ?| SALESMAN ?| 7698 | 1981-02-20 | 1600.00 | ?300.00 | ? ? 30 |
?? ?| ?7521 | WARD ? | SALESMAN ?| 7698 | 1981-02-22 | 1250.00 | ?500.00 | ? ? 30 |
?? ?| ?7566 | JONES ?| MANAGER ? | 7839 | 1981-04-02 | 2975.00 | ? ?NULL | ? ? 20 |
?? ?| ?7654 | MARTIN | SALESMAN ?| 7698 | 1981-09-28 | 1250.00 | 1400.00 | ? ? 30 |
?? ?| ?7698 | BLAKE ?| MANAGER ? | 7839 | 1981-05-01 | 2850.00 | ? ?NULL | ? ? 30 |
?? ?| ?7782 | CLARK ?| MANAGER ? | 7839 | 1981-06-09 | 2450.00 | ? ?NULL | ? ? 10 |
?? ?| ?7788 | SCOTT ?| ANALYST ? | 7566 | 1987-04-19 | 3000.00 | ? ?NULL | ? ? 20 |
?? ?| ?7839 | KING ? | PRESIDENT | NULL | 1981-11-17 | 5000.00 | ? ?NULL | ? ? 10 |
?? ?| ?7844 | TURNER | SALESMAN ?| 7698 | 1981-09-08 | 1500.00 | ? ?0.00 | ? ? 30 |
?? ?| ?7876 | ADAMS ?| CLERK ? ? | 7788 | 1987-05-23 | 1100.00 | ? ?NULL | ? ? 20 |
?? ?| ?7900 | JAMES ?| CLERK ? ? | 7698 | 1981-12-03 | ?950.00 | ? ?NULL | ? ? 30 |
?? ?| ?7902 | FORD ? | ANALYST ? | 7566 | 1981-12-03 | 3000.00 | ? ?NULL | ? ? 20 |
?? ?| ?7934 | MILLER | CLERK ? ? | 7782 | 1982-01-23 | 1300.00 | ? ?NULL | ? ? 10 |
?? ?+-------+--------+-----------+------+------------+---------+---------+--------+

2、將查詢結果插入到一張表當中?insert相關的


?? ?//將查詢結果創建成表
?? ?creat table dept_bak as select * from dept;
?? ?//將查詢結果插入到表
?? ?insert into dept_bak select * from dept;

3、快速刪除表中的數據?【重要】 truncate


?? ?//刪除dept_bak表中的數據
?? ?delete from dept_bak;

?? ?delete語句刪除數據的原理?(delete屬于DML語句)
?? ??? ?表中的數據被刪除了,但是這個數據在硬盤上的真實存儲空間不會被釋放
?? ??? ?這種刪除的缺點是:刪除效率比較低
?? ??? ?這種刪除的優點是:支持回滾,后悔了可以在恢復數據

?? ?truncate語句刪除數據的原理?
?? ??? ?這種刪除效率比較高,表被一次截斷,物理刪除
?? ??? ?這種刪除缺點:不支持回滾
?? ??? ?這種刪除優點:快速
?? ?
?? ?用法:truncate table dept_bak

?? ?刪除表操作?
?? ?drop table 表名;//這不是刪除表中的數據,這是把表刪除

4、約束(重要)

4.1、什么是約束?


?? ?約束對應的英語單詞:constraint
?? ?在創建表的時候,我們可以給表中的字段加上一些約束,來保證這個表中數據的完整性、有效性

?? ?約束的作用就是為了保證:表中的數據有效

4.2、約束包括哪些?


?? ?非空約束:not null
?? ?唯一約束:nuique
?? ?主鍵約束:primary key
?? ?外鍵約束:foreign key
?? ?檢查約束:check(mysql不支持,oracle支持)

4.3、非空約束:not null


?? ?非空約束not null約束的字段不能為null

?? ?create table t_vip(
?? ?id int,
?? ?name varchar(255) not null
?? ?);

?? ? insert into t_vip values(01,'zhangsan');
?? ? insert into t_vip values(02,'lisi');
?? ? insert into t_vip(id) values(3); //報錯
?? ? Field 'name' doesn't have a default value

?? ? 小插曲:
?? ??? ?xxx.sql這種文件被稱為sql腳本文件
?? ??? ?sql腳本文件中編寫了大量的sql語句
?? ??? ?我們執行sql腳本文件的時候,該文件中所有的sql語句會全部執行
?? ??? ?批量的執行sql語句,可以使用sql腳本文件
?? ??? ?在mysql中怎么執行sql腳本呢?
?? ??? ??? ?source 文件拖過來 但一定注意不能有中文

4.4、唯一性約束:unique


?? ?唯一性約束unique約束的字段不能重復,但是可以為null
?? ?drop table if exists t_vip;
?? ?create table t_vip(
?? ??? ?id int,
?? ??? ?name varchar(255) unique, ?//unique 添加在列的后面時,這種約束被稱為列級約束
?? ??? ?email varchar(255)
?? ?);
?? ?insert into t_vip values(1,'zhangsan','zhangsan@123.com');
?? ?insert into t_vip values(2,'lisi','lisi@123.com');
?? ?insert into t_vip values(3,'wangwu','wangwu@123.com');

?? ?insert into t_vip values(4,'wangwu','wangwu@123.com');
?? ?ERROR 1062 (23000): Duplicate entry 'wangwu' for key 'name'
?? ?//unique不能重復 但是可以為null
?? ?insert into t_vip(id) values(4);

?? ?mysql> select * from t_vip;
?? ?+------+----------+------------------+
?? ?| id ? | name ? ? | email ? ? ? ? ? ?|
?? ?+------+----------+------------------+
?? ?| ? ?1 | zhangsan | zhangsan@123.com |
?? ?| ? ?2 | lisi ? ? | lisi@123.com ? ? |
?? ?| ? ?3 | wangwu ? | wangwu@123.com ? |
?? ?| ? ?4 | NULL ? ? | NULL ? ? ? ? ? ? |
?? ?+------+----------+------------------+


?? ?新需求:name和email兩個字段聯合起來具有唯一性!!!
?? ?意思是 只有name和email不同時相等 就可以插入進去數據

?? ?drop table if exists t_vip;
?? ?create table t_vip(
?? ??? ?id int,
?? ??? ?name varchar(255),
?? ??? ?email varchar(255),
?? ??? ?unique(name,email)?? ?沒有添加到列的后面,這種約束被稱為表級約束
?? ?);

?? ?insert into t_vip values(1,'zhangsan','zhangsan@123.com');
?? ?insert into t_vip values(2,'zhangsan','zhangsan@qq.com');

?? ?//ERROR 1062 (23000): Duplicate entry 'zhangsan-zhangsan@qq.com' for key 'name'
?? ?insert into t_vip values(3,'zhangsan','zhangsan@123.com');

?? ?什么時候使用表級約束呢?


?? ??? ?需要給多個字段聯合起來添加某一個約束的時候,需要使用表級約束

?? ?unique可以和not null 聯合嗎
?? ? drop table if exists t_vip;
?? ? create table t_vip(id int,name varchar(255) not null unique);
?? ? mysql> desc t_vip;
?? ?+-------+--------------+------+-----+---------+-------+
?? ?| Field | Type ? ? ? ? | Null | Key | Default | Extra |
?? ?+-------+--------------+------+-----+---------+-------+
?? ?| id ? ?| int(11) ? ? ?| YES ?| ? ? | NULL ? ?| ? ? ? |
?? ?| name ?| varchar(255) | NO ? | PRI | NULL ? ?| ? ? ? |
?? ?+-------+--------------+------+-----+---------+-------+
?? ?

?? ?在mysql當中,如果一個字段同時被not null 和unique約束的話,該字段自動編程主鍵字段
?? ?(注意:oracle中不一樣 )

4.5、主鍵約束(primary key,簡稱PK)非常重要

?? ?主鍵約束的相關屬于?
?? ??? ?主鍵約束:就是一種約束
?? ??? ?主鍵字段:該字段上添加了主鍵約束,這樣的字段就叫做主鍵字段
?? ??? ?主鍵值:主鍵字段中的每一個值都叫做:主鍵值

?? ?什么是主鍵?有什么用
?? ??? ?主鍵值是每一行記錄的唯一標識
?? ??? ?主鍵值是每一行記錄的身份證號

?? ?記住:任何一張表都應該有主鍵,沒有主鍵,表無效

?? ?主鍵的特征:not null + unique(主鍵值不能是null,同時也不能重復)

?? ?怎么給字段設置主鍵呢?
?? ??? ?drop table if exists t_vip;
?? ??? ?create table t_vip(
?? ??? ??? ?id int primary key,
?? ??? ??? ?name varchar(255)
?? ??? ?);

?? ??? ?insert into t_vip(id,name) values(1,'zhangsan');
?? ??? ?insert into t_vip(id,name) values(2,'zhangsan');

?? ??? ?//報錯
?? ??? ?insert into t_vip(id,name) values(2,'zhangsan');
?? ??? ?ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY'

?? ??? ?使用表及約束添加主鍵可以嗎?
?? ??? ?drop table if exists t_vip;
?? ??? ?create table t_vip(
?? ??? ??? ?id int ,
?? ??? ??? ?name varchar(255),
?? ??? ??? ?primary key(id,name)
?? ??? ?);

?? ??? ?insert into t_vip(id,name) values(1,'zhangsan');
?? ??? ?insert into t_vip(id,name) values(2,'zhangsan');
?? ??? ?insert into t_vip(id,name) values(2,'lisi');
?? ??? ?insert into t_vip(id) values(2);

?? ?在實際開發中不建議使用:符合主鍵。建議使用單一主鍵
?? ?復合主鍵比較復雜,不建議使用

?? ?一個表中主鍵只能有一個,不能出現多個

?? ?主鍵除了:單一主鍵和復合主鍵之外,還額可以這樣進行分類?
?? ??? ?自然主鍵:主鍵值是一個自然數,和業務沒關系
?? ??? ?業務主鍵:主鍵值和業務緊密關聯,例如拿銀行卡賬號做主鍵值,這就是業務主鍵

?? ?在實際開發中使用業務主鍵比較多,還是使用自然主鍵多一些呢?
?? ??? ?自然主鍵使用比較好,因為主鍵只要做到不重復就行,不需要有意義
?? ??? ?業務主鍵不好,因為主鍵一旦和業務掛鉤,那么當業務發生變動的時候,可能會影響到主鍵值,所以業務
?? ??? ?主鍵不建議使用。盡量使用自然主鍵

?? ?在mysql中有一種機制,可以幫助我們自動維護一個主鍵值?


?? ??? ?drop table if exists t_vip;
?? ??? ?create table t_vip(
?? ??? ??? ?id int primary key auto_increment,
?? ??? ??? ?name varchar(255)
?? ??? ?);

?? ??? ?insert into t_vip(name) values('zhangsan');
?? ??? ?insert into t_vip(name) values('zhangsan');
?? ??? ?insert into t_vip(name) values('zhangsan');
?? ??? ?insert into t_vip(name) values('zhangsan');
?? ??? ?+----+----------+
?? ??? ?| id | name ? ? |
?? ??? ?+----+----------+
?? ??? ?| ?1 | zhangsan |
?? ??? ?| ?2 | zhangsan |
?? ??? ?| ?3 | zhangsan |
?? ??? ?| ?4 | zhangsan |
?? ??? ?+----+----------+


4.5、外鍵約束


?? ?
?? ?* 關于外鍵約束的相關術語:
?? ??? ?外鍵約束: foreign key
?? ??? ?外鍵字段:添加有外鍵約束的字段
?? ??? ?外鍵值:外鍵字段中的每一個值。
?? ?
?? ?* 業務背景:
?? ??? ?請設計數據庫表,用來維護學生和班級的信息?
?? ??? ??? ?第一種方案:一張表存儲所有數據
?? ??? ??? ?no(pk)?? ??? ??? ?name?? ??? ??? ?classno?? ??? ??? ?classname
?? ??? ??? ?-------------------------------------------------------------------------------------------
?? ??? ??? ?1?? ??? ??? ??? ??? ?zs1?? ??? ??? ??? ?101?? ??? ??? ??? ?北京大興區經濟技術開發區亦莊二中高三1班
?? ??? ??? ?2?? ??? ??? ??? ??? ?zs2?? ??? ??? ??? ?101?? ??? ??? ??? ?北京大興區經濟技術開發區亦莊二中高三1班
?? ??? ??? ?3?? ??? ??? ??? ??? ?zs3?? ??? ??? ??? ?102?? ??? ??? ??? ?北京大興區經濟技術開發區亦莊二中高三2班
?? ??? ??? ?4?? ??? ??? ??? ??? ?zs4?? ??? ??? ??? ?102?? ??? ??? ??? ?北京大興區經濟技術開發區亦莊二中高三2班
?? ??? ??? ?5?? ??? ??? ??? ??? ?zs5?? ??? ??? ??? ?102?? ??? ??? ??? ?北京大興區經濟技術開發區亦莊二中高三2班
?? ??? ??? ?缺點:冗余。【不推薦】

?? ??? ??? ?第二種方案:兩張表(班級表和學生表)
?? ??? ??? ?t_class 班級表
?? ??? ??? ?cno(pk)?? ??? ?cname
?? ??? ??? ?--------------------------------------------------------
?? ??? ??? ?101?? ??? ?北京大興區經濟技術開發區亦莊二中高三1班
?? ??? ??? ?102?? ??? ?北京大興區經濟技術開發區亦莊二中高三2班

?? ??? ??? ?t_student 學生表
?? ??? ??? ?sno(pk)?? ??? ?sname?? ??? ??? ??? ?classno(該字段添加外鍵約束fk)
?? ??? ??? ?------------------------------------------------------------
?? ??? ??? ?1?? ??? ??? ??? ?zs1?? ??? ??? ??? ?101
?? ??? ??? ?2?? ??? ??? ??? ?zs2?? ??? ??? ??? ?101
?? ??? ??? ?3?? ??? ??? ??? ?zs3?? ??? ??? ??? ?102
?? ??? ??? ?4?? ??? ??? ??? ?zs4?? ??? ??? ??? ?102
?? ??? ??? ?5?? ??? ??? ??? ?zs5?? ??? ??? ??? ?102
?? ??? ?
?? ?* 將以上表的建表語句寫出來:

?? ??? ?t_student中的classno字段引用t_class表中的cno字段,此時t_student表叫做子表。t_class表叫做父表。

?? ??? ?順序要求:
?? ??? ??? ?刪除數據的時候,先刪除子表,再刪除父表。
?? ??? ??? ?添加數據的時候,先添加父表,在添加子表。
?? ??? ??? ?創建表的時候,先創建父表,再創建子表。
?? ??? ??? ?刪除表的時候,先刪除子表,在刪除父表。
?? ??? ?
?? ??? ?drop table if exists t_student;
?? ??? ?drop table if exists t_class;

?? ??? ?create table t_class(
?? ??? ??? ?cno int,
?? ??? ??? ?cname varchar(255),
?? ??? ??? ?primary key(cno)
?? ??? ?);

?? ??? ?create table t_student(
?? ??? ??? ?sno int,
?? ??? ??? ?sname varchar(255),
?? ??? ??? ?classno int,
?? ??? ??? ?primary key(sno),
?? ??? ??? ?foreign key(classno) references t_class(cno)
?? ??? ?);

?? ??? ?insert into t_class values(101,'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
?? ??? ?insert into t_class values(102,'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy');

?? ??? ?insert into t_student values(1,'zs1',101);
?? ??? ?insert into t_student values(2,'zs2',101);
?? ??? ?insert into t_student values(3,'zs3',102);
?? ??? ?insert into t_student values(4,'zs4',102);
?? ??? ?insert into t_student values(5,'zs5',102);
?? ??? ?insert into t_student values(6,'zs6',102);
?? ??? ?select * from t_class;
?? ??? ?select * from t_student;

?? ??? ?insert into t_student values(7,'lisi',103);
?? ??? ?ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`bjpowernode`.INT `t_student_ibfk_1` FOREIGN KEY (`classno`) REFERENCES `t_class` (`cno`))

?? ?* 外鍵值可以為NULL?
?? ??? ?外鍵可以為NULL。
?? ?
?? ?* 外鍵字段引用其他表的某個字段的時候,被引用的字段必須是主鍵嗎?
?? ??? ?注意:被引用的字段不一定是主鍵,但至少具有unique約束。

5、存儲引擎(了解)


5.1、什么是存儲引擎,有什么用呢?


?? ?存儲引擎是mysql中特有的一個術語,其他數據庫中沒有。(Oracle中有,但是不叫這個名字)
?? ?實際上存儲引擎是一個表存儲/組織數據的方式。
?? ?不同的存儲引擎,表存儲數據的方式不同

?? ?使用:show create table 表名; ?
?? ?來查看表的存儲引擎


?? ?| t_vip | CREATE TABLE `t_vip` (
?? ? ?`id` int(11) NOT NULL AUTO_INCREMENT,
?? ? ?`name` varchar(255) DEFAULT NULL,
?? ? ?PRIMARY KEY (`id`)
?? ?) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |

?? ?在創建表的時候 我們可以在最后面的小括號輸入:
?? ?engine = InnoDB default charset = utf8;
?? ?engine是來指定存儲引擎
?? ?charset來指定這張表的字符編碼方式

?? ?結論:
?? ??? ?mysql默認的存儲引擎是InnoDB
?? ??? ?mysql默認的字符編碼方式是:utf8

5.2、怎么查看mysql支持哪些存儲引擎呢?


?? ?show engines \G
?? ?*************************** 1. row ***************************
? ? ? Engine: FEDERATED
? ? ?Support: NO
? ? ?Comment: Federated MySQL storage engine
?? ?Transactions: NULL
?? ??? ? ?XA: NULL
?? ? ?Savepoints: NULL
?? ?*************************** 2. row ***************************
?? ? ? ? ?Engine: MRG_MYISAM
?? ? ? ? Support: YES
?? ? ? ? Comment: Collection of identical MyISAM tables
?? ?Transactions: NO
?? ??? ? ?XA: NO
?? ? ?Savepoints: NO
?? ?*************************** 3. row ***************************
?? ? ? ? ?Engine: MyISAM
?? ? ? ? Support: YES
?? ? ? ? Comment: MyISAM storage engine
?? ?Transactions: NO
?? ??? ? ?XA: NO
?? ? ?Savepoints: NO
?? ?*************************** 4. row ***************************
?? ? ? ? ?Engine: BLACKHOLE
?? ? ? ? Support: YES
?? ? ? ? Comment: /dev/null storage engine (anything you write to it disappears)
?? ?Transactions: NO
?? ??? ? ?XA: NO
?? ? ?Savepoints: NO
?? ?*************************** 5. row ***************************
?? ? ? ? ?Engine: CSV
?? ? ? ? Support: YES
?? ? ? ? Comment: CSV storage engine
?? ?Transactions: NO
?? ??? ? ?XA: NO
?? ? ?Savepoints: NO
?? ?*************************** 6. row ***************************
?? ? ? ? ?Engine: MEMORY
?? ? ? ? Support: YES
?? ? ? ? Comment: Hash based, stored in memory, useful for temporary tables
?? ?Transactions: NO
?? ??? ? ?XA: NO
?? ? ?Savepoints: NO
?? ?*************************** 7. row ***************************
?? ? ? ? ?Engine: ARCHIVE
?? ? ? ? Support: YES
?? ? ? ? Comment: Archive storage engine
?? ?Transactions: NO
?? ??? ? ?XA: NO
?? ? ?Savepoints: NO
?? ?*************************** 8. row ***************************
?? ? ? ? ?Engine: InnoDB
?? ? ? ? Support: DEFAULT
?? ? ? ? Comment: Supports transactions, row-level locking, and foreign keys
?? ?Transactions: YES
?? ??? ? ?XA: YES
?? ? ?Savepoints: YES
?? ?*************************** 9. row ***************************
?? ? ? ? ?Engine: PERFORMANCE_SCHEMA
?? ? ? ? Support: YES
?? ? ? ? Comment: Performance Schema
?? ?Transactions: NO
?? ??? ? ?XA: NO
?? ? ?Savepoints: NO


5.3、關于mysql常用的存儲引擎介紹一下

myisam存儲引擎?
?? ?他管理的表具有一下特征:
?? ??? ?使用三個文件表示每個表:
?? ??? ??? ?格式文件 - 存儲表結構的定義(mytable.frm)
?? ??? ??? ?數據文件 - 存儲表行的內容(mytable.MYD)
?? ??? ??? ?索引文件 - 存儲表上索引(mytable.MYI):索引是一本書的目錄,縮小掃描范圍,提高效率
?? ??? ?可被轉換為壓縮、只讀表來節省空間

?? ??? ?對于一張表來說,只要是主鍵或者加有unique約束的字段會自動創建索引

?? ??? ?MyISAM存儲引擎特點:
?? ??? ??? ?可被轉換為壓縮,只讀表來節省空間
?? ??? ??? ?這是這種存儲引擎的優勢

InnoDB存儲引擎?
?? ?這是mysql默認的存儲引擎,同時也是一個重量級的存儲引擎
?? ?InnoDB支持事物,支持數據可崩潰后自動回復機制
?? ?InnoDB存儲引擎最主要的特點是:非常安全

?? ?InnoDB最大的特點就是支持事務:
?? ??? ?以保證數據的安全。效率不是很高,并且也不能壓縮,不能轉換為只讀
?? ??? ?不能很好的節省存儲空間

MEMORY存儲引擎?
?? ?使用MEMORY存儲引擎的表,其數據存儲在內存中,且行的長度固定,這兩個特點
?? ?使得MEMORY存儲引擎非常快

?? ?MEMORY存儲引擎管理的表具有下列特征:
?? ??? ?在數據庫目錄內,每個表均以.frm格式的文件表示
?? ??? ?表數據及索引被存儲在內存中。(目的就是快)
?? ??? ?表級鎖機制
?? ??? ?不能包含TEXT或BLOB字段
?? ?
?? ?MEMORY存儲引擎以前被稱為HEAP引擎

?? ?MEMORY引擎優點:查詢效率是最高的。不需要和硬盤交互
?? ?MEMORY引擎缺點:不安全,關機之后數據消失。因為數據和索引都是在內存當中


6、事物(重點,必須理解)

6.1、什么是事物?


?? ?一個事物其實就是一個完整的業務邏輯。
?? ?是一個最小的工作單元。不可再分

?? ?什么是一個完整的業務邏輯?
?? ??? ?假設轉賬,從A賬戶向B賬戶中轉賬10000
?? ??? ?將A賬戶的錢減去10000(uptate語句)
?? ??? ?將B賬戶的錢加上10000(uptate語句)
?? ??? ?這就是一個完整的業務邏輯。

?? ??? ?以上的操作是最小的工作單元,要么同時成功,要么同時失敗,不可再分
?? ??? ?這兩個uptate語句要求必須同時成功或者同時失敗

6.2、只有DML語句才會有事務這一說,其他語句和事務無關!!!


?? ?insert
?? ?delete
?? ?update
?? ?只有以上三個語句和事務有關系,其他的都沒有關系

?? ?因為只有以上的三個語句是數據庫表中的數據進行增、刪、改的
?? ?只要你的操作一旦涉及到數據的增、刪、改,那么就一定要考慮安全問題

?? ?數據安全放在第一位

6.3、假設所有的業務,只要一條DML語句就能完成,還有必要存在事物機制嗎?


?? ?正是因為要做某件事的時候,需要多條DML語句共同聯合起來才能完成
?? ?所有需要事物的存在。如果任何一件復雜的事都能一條DML語句搞定,那么
?? ?事物就沒有存在的價值了

?? ?到底什么是事務呢?
?? ??? ?說到底,說到本質上,一個事物其實就是多條DML語句同時成功,同時失敗。

?? ?事物:就是批量的DML語句同時成功,或者同時失敗

6.4、事務是怎么做到多條DML語句同時成功和同時失敗的呢?


?? ?
?? ?InnoDB存儲引擎:提供一組用來記錄事務性活動的日志文件

?? ?事務開啟了:
?? ?insert
?? ?insert
?? ?delete
?? ?update
?? ?insert
?? ?update
?? ?事務結束了

?? ?在事務的執行過程中,每一條DML的操作都會記錄到“事務性活動的日志文件”中
?? ?在事務的執行過程中,我們可以提交事務,也可以回滾事務。

?? ?提交事務?
?? ??? ?清空事務性活動的日志文件,將數據全部徹底持久化到數據庫表中
?? ??? ?提交事務標志著,事務的結束。并且是一種全部成功的結束

?? ?回滾事務?
?? ??? ?將之前所有的DML操作全部撤銷,并且清空事務性活動的日志文件
?? ??? ?回滾事務標志著,事務的結束,并且是一種全部失敗的結束

6.5、怎么提交事務,怎么回滾事務?


?? ?提交事務:rommit; 語句
?? ?回滾事務:rollback;

?? ?事務對應的英語單詞是:transaction

?? ?測試一下,在mysql當中默認的事務行為是怎么樣的?
?? ??? ?mysql默認情況下是支持自動提交事務的。(自動提交)
?? ??? ?什么是自動提交?
?? ??? ??? ?每執行一條DML語句,就提交一次

?? ?怎么將mysql的自動提交機制關閉掉呢?
?? ??? ?先執行這個命令:start transaction;

?? ?演示事務:
?? ?------------------------------回滾事務-------------------------
?? ?mysql> show tables;
?? ?+-----------------+
?? ?| Tables_in_zheng |
?? ?+-----------------+
?? ?| dept ? ? ? ? ? ?|
?? ?| dept_bak ? ? ? ?|
?? ?| emp ? ? ? ? ? ? |
?? ?| emp2 ? ? ? ? ? ?|
?? ?| salgrade ? ? ? ?|
?? ?| t_protect ? ? ? |
?? ?| t_user ? ? ? ? ?|
?? ?| t_vip ? ? ? ? ? |
?? ?+-----------------+
?? ?8 rows in set (0.01 sec)

?? ?mysql> select * from emp2;
?? ?+-------+--------+-----------+------+------------+---------+---------+--------+
?? ?| EMPNO | ENAME ?| JOB ? ? ? | MGR ?| HIREDATE ? | SAL ? ? | COMM ? ?| DEPTNO |
?? ?+-------+--------+-----------+------+------------+---------+---------+--------+
?? ?| ?7369 | SMITH ?| CLERK ? ? | 7902 | 1980-12-17 | ?800.00 | ? ?NULL | ? ? 20 |
?? ?| ?7499 | ALLEN ?| SALESMAN ?| 7698 | 1981-02-20 | 1600.00 | ?300.00 | ? ? 30 |
?? ?| ?7521 | WARD ? | SALESMAN ?| 7698 | 1981-02-22 | 1250.00 | ?500.00 | ? ? 30 |
?? ?| ?7566 | JONES ?| MANAGER ? | 7839 | 1981-04-02 | 2975.00 | ? ?NULL | ? ? 20 |
?? ?| ?7654 | MARTIN | SALESMAN ?| 7698 | 1981-09-28 | 1250.00 | 1400.00 | ? ? 30 |
?? ?| ?7698 | BLAKE ?| MANAGER ? | 7839 | 1981-05-01 | 2850.00 | ? ?NULL | ? ? 30 |
?? ?| ?7782 | CLARK ?| MANAGER ? | 7839 | 1981-06-09 | 2450.00 | ? ?NULL | ? ? 10 |
?? ?| ?7788 | SCOTT ?| ANALYST ? | 7566 | 1987-04-19 | 3000.00 | ? ?NULL | ? ? 20 |
?? ?| ?7839 | KING ? | PRESIDENT | NULL | 1981-11-17 | 5000.00 | ? ?NULL | ? ? 10 |
?? ?| ?7844 | TURNER | SALESMAN ?| 7698 | 1981-09-08 | 1500.00 | ? ?0.00 | ? ? 30 |
?? ?| ?7876 | ADAMS ?| CLERK ? ? | 7788 | 1987-05-23 | 1100.00 | ? ?NULL | ? ? 20 |
?? ?| ?7900 | JAMES ?| CLERK ? ? | 7698 | 1981-12-03 | ?950.00 | ? ?NULL | ? ? 30 |
?? ?| ?7902 | FORD ? | ANALYST ? | 7566 | 1981-12-03 | 3000.00 | ? ?NULL | ? ? 20 |
?? ?| ?7934 | MILLER | CLERK ? ? | 7782 | 1982-01-23 | 1300.00 | ? ?NULL | ? ? 10 |
?? ?+-------+--------+-----------+------+------------+---------+---------+--------+
?? ?14 rows in set (0.01 sec)

?? ?mysql> start transaction;
?? ?Query OK, 0 rows affected (0.00 sec)

?? ?mysql> delete from emp2;
?? ?Query OK, 14 rows affected (0.00 sec)

?? ?mysql> select * from emp2;
?? ?Empty set (0.00 sec)

?? ?mysql> insert into emp2 values(1111,'aaa','aaa',2222,'1984-1-5',744,0,10);
?? ?Query OK, 1 row affected (0.00 sec)

?? ?mysql> select * from emp2;
?? ?+-------+-------+------+------+------------+--------+------+--------+
?? ?| EMPNO | ENAME | JOB ?| MGR ?| HIREDATE ? | SAL ? ?| COMM | DEPTNO |
?? ?+-------+-------+------+------+------------+--------+------+--------+
?? ?| ?1111 | aaa ? | aaa ?| 2222 | 1984-01-05 | 744.00 | 0.00 | ? ? 10 |
?? ?+-------+-------+------+------+------------+--------+------+--------+
?? ?1 row in set (0.00 sec)

?? ?mysql> rollback;
?? ?Query OK, 0 rows affected (0.00 sec)

?? ?mysql> select * from emp2;
?? ?+-------+--------+-----------+------+------------+---------+---------+--------+
?? ?| EMPNO | ENAME ?| JOB ? ? ? | MGR ?| HIREDATE ? | SAL ? ? | COMM ? ?| DEPTNO |
?? ?+-------+--------+-----------+------+------------+---------+---------+--------+
?? ?| ?7369 | SMITH ?| CLERK ? ? | 7902 | 1980-12-17 | ?800.00 | ? ?NULL | ? ? 20 |
?? ?| ?7499 | ALLEN ?| SALESMAN ?| 7698 | 1981-02-20 | 1600.00 | ?300.00 | ? ? 30 |
?? ?| ?7521 | WARD ? | SALESMAN ?| 7698 | 1981-02-22 | 1250.00 | ?500.00 | ? ? 30 |
?? ?| ?7566 | JONES ?| MANAGER ? | 7839 | 1981-04-02 | 2975.00 | ? ?NULL | ? ? 20 |
?? ?| ?7654 | MARTIN | SALESMAN ?| 7698 | 1981-09-28 | 1250.00 | 1400.00 | ? ? 30 |
?? ?| ?7698 | BLAKE ?| MANAGER ? | 7839 | 1981-05-01 | 2850.00 | ? ?NULL | ? ? 30 |
?? ?| ?7782 | CLARK ?| MANAGER ? | 7839 | 1981-06-09 | 2450.00 | ? ?NULL | ? ? 10 |
?? ?| ?7788 | SCOTT ?| ANALYST ? | 7566 | 1987-04-19 | 3000.00 | ? ?NULL | ? ? 20 |
?? ?| ?7839 | KING ? | PRESIDENT | NULL | 1981-11-17 | 5000.00 | ? ?NULL | ? ? 10 |
?? ?| ?7844 | TURNER | SALESMAN ?| 7698 | 1981-09-08 | 1500.00 | ? ?0.00 | ? ? 30 |
?? ?| ?7876 | ADAMS ?| CLERK ? ? | 7788 | 1987-05-23 | 1100.00 | ? ?NULL | ? ? 20 |
?? ?| ?7900 | JAMES ?| CLERK ? ? | 7698 | 1981-12-03 | ?950.00 | ? ?NULL | ? ? 30 |
?? ?| ?7902 | FORD ? | ANALYST ? | 7566 | 1981-12-03 | 3000.00 | ? ?NULL | ? ? 20 |
?? ?| ?7934 | MILLER | CLERK ? ? | 7782 | 1982-01-23 | 1300.00 | ? ?NULL | ? ? 10 |
?? ?+-------+--------+-----------+------+------------+---------+---------+--------+


------------------------------提交事務--------------------------------------

?? ?mysql> start transaction;
?? ?Query OK, 0 rows affected (0.00 sec)

?? ?mysql> select * from emp2;
?? ?+-------+--------+-----------+------+------------+---------+---------+--------+
?? ?| EMPNO | ENAME ?| JOB ? ? ? | MGR ?| HIREDATE ? | SAL ? ? | COMM ? ?| DEPTNO |
?? ?+-------+--------+-----------+------+------------+---------+---------+--------+
?? ?| ?7369 | SMITH ?| CLERK ? ? | 7902 | 1980-12-17 | ?800.00 | ? ?NULL | ? ? 20 |
?? ?| ?7499 | ALLEN ?| SALESMAN ?| 7698 | 1981-02-20 | 1600.00 | ?300.00 | ? ? 30 |
?? ?| ?7521 | WARD ? | SALESMAN ?| 7698 | 1981-02-22 | 1250.00 | ?500.00 | ? ? 30 |
?? ?| ?7566 | JONES ?| MANAGER ? | 7839 | 1981-04-02 | 2975.00 | ? ?NULL | ? ? 20 |
?? ?| ?7654 | MARTIN | SALESMAN ?| 7698 | 1981-09-28 | 1250.00 | 1400.00 | ? ? 30 |
?? ?| ?7698 | BLAKE ?| MANAGER ? | 7839 | 1981-05-01 | 2850.00 | ? ?NULL | ? ? 30 |
?? ?| ?7782 | CLARK ?| MANAGER ? | 7839 | 1981-06-09 | 2450.00 | ? ?NULL | ? ? 10 |
?? ?| ?7788 | SCOTT ?| ANALYST ? | 7566 | 1987-04-19 | 3000.00 | ? ?NULL | ? ? 20 |
?? ?| ?7839 | KING ? | PRESIDENT | NULL | 1981-11-17 | 5000.00 | ? ?NULL | ? ? 10 |
?? ?| ?7844 | TURNER | SALESMAN ?| 7698 | 1981-09-08 | 1500.00 | ? ?0.00 | ? ? 30 |
?? ?| ?7876 | ADAMS ?| CLERK ? ? | 7788 | 1987-05-23 | 1100.00 | ? ?NULL | ? ? 20 |
?? ?| ?7900 | JAMES ?| CLERK ? ? | 7698 | 1981-12-03 | ?950.00 | ? ?NULL | ? ? 30 |
?? ?| ?7902 | FORD ? | ANALYST ? | 7566 | 1981-12-03 | 3000.00 | ? ?NULL | ? ? 20 |
?? ?| ?7934 | MILLER | CLERK ? ? | 7782 | 1982-01-23 | 1300.00 | ? ?NULL | ? ? 10 |
?? ?+-------+--------+-----------+------+------------+---------+---------+--------+
?? ?14 rows in set (0.00 sec)

?? ?mysql> detele from emp2 ;
?? ?ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'detele from emp2' at line 1
?? ?mysql> delete from emp2 ;
?? ?Query OK, 14 rows affected (0.00 sec)

?? ?mysql> select * from emp2;
?? ?Empty set (0.00 sec)

?? ?mysql> commit;
?? ?Query OK, 0 rows affected (0.00 sec)

?? ?mysql> select * from emp2;
?? ?Empty set (0.00 sec)

?? ?mysql> rollback;
?? ?Query OK, 0 rows affected (0.00 sec)

?? ?mysql> select * from emp2;
?? ?Empty set (0.00 sec)

6.6、事務包括四個特性?(重要)


?? ?A:原子性:
?? ??? ?說明事務是最小的工作單元,不可再分
?? ?
?? ?C:一致性:
?? ??? ?所有事務要求,在同一個事務當中,所有操作必須同時成功,或者同時失敗
?? ??? ?以保證數據的安全性

?? ?I:隔離性:
?? ??? ?A事務和B事務之間具有一定的隔離
?? ??? ?教室A和教室B之間有一道墻,這道墻就是隔離性
?? ??? ?A事務在操作一張表的時候,另一個事務B也操作這張表會怎么樣?

?? ?D:持久性:
?? ??? ?事務最終結束的一個保證。事務提交,就相當于將沒有保存到硬盤上的數據保存到硬盤上


6.7、重點研究一下事務的隔離性!!!


?? ?A教室和B教室中間有一道墻,這道墻可以很厚,也可以很薄。這就是事務的隔離級別
?? ?這道墻越厚,表示隔離級別就越高

?? ?事務和事務之間的隔離級別有哪些呢?
?? ??? ?讀未提交:read uncommitted(最低的隔離級別)《沒有提交就讀取到了》
?? ??? ??? ?什么是讀未提交?
?? ??? ??? ??? ?事務A可以讀取事務B還沒有提交的數據
?? ??? ??? ?這種隔離級別存在的問題就是:
?? ??? ??? ??? ?臟讀現象(Dirty read)
?? ??? ??? ??? ?我們稱為臟數據
?? ??? ?
?? ??? ?讀已提交:read committed《提交之后才可以讀取到》
?? ??? ??? ?什么是讀已提交?
?? ??? ??? ??? ?事務A可以讀取事務B已經提交的數據
?? ??? ??? ?這種隔離級別解決了什么問題?
?? ??? ??? ??? ?解決了臟讀現象
?? ??? ??? ?這種隔離級別存在什么問題?
?? ??? ??? ??? ?不可重復讀取數據
?? ??? ??? ??? ?什么是不可重復讀取數據呢?
?? ??? ??? ??? ??? ?在事務開啟之后,第一次讀取到的數據是3條,當前事務還沒有結束
?? ??? ??? ??? ??? ?可能第二次在讀取的時候,讀到的數據就是4條了,3不等于4,稱為
?? ??? ??? ??? ??? ?不可重復讀取(就是事務B在執行的時候讀取了兩次A事務中的數據,
?? ??? ??? ??? ??? ?事務A可能變化了多次,數據也就不一樣了)

?? ??? ??? ??? ?這種隔離級別是比較真實的數據,每一次讀到的數據是絕對的真實
?? ??? ??? ??? ?oracle數據庫默認的隔離級別是:read committed

?? ??? ?可重復讀:repeatable read《提交之后也讀不到,永遠讀取的都是剛開啟事務時的數據》
?? ??? ??? ?什么是可重復讀取?
?? ??? ??? ??? ?事務A開啟之后,不管是多久,每一次事務A讀取到的數據都是一致的,即使事務B將數據
?? ??? ??? ??? ?已經修改,并且提交了,事務A讀取到的數據還是沒有發生改變,這就是可重復讀
?? ??? ??? ?可重復讀解決了什么問題呢?
?? ??? ??? ??? ?解決了不可重復讀取數據
?? ??? ??? ?可重復讀存在的問題是什么?
?? ??? ??? ??? ?可能會出現幻影讀
?? ??? ??? ??? ?每一次讀取到的數據都是幻象。不夠真實

?? ??? ??? ?早晨9點開始開啟了事務,只要事務不結束,到晚上9點,讀到的數據還是那樣

?? ??? ?例子:比如銀行要進行總賬,執行過程從1點到3點結束,如果中途有人存取錢的話,數據就不正確了,所以使用
?? ??? ?可重復讀,,事務A進行讀取總賬,事務B進行存取錢,事務A的數據一直都是1點那個數據,事務B進行提交了,事務A
?? ??? ?也不變化,而讀已提交就不行,他會將數據進行更新,對應出現的問題是:不可重復讀取數據?


?? ??? ?序列化/串行化:serializable(最高的隔離級別):
?? ??? ??? ?這是最高隔離級別,效率最低。解決了所有的問題
?? ??? ??? ?這種級別表示事務排隊,不能并發
?? ??? ??? ?每一次讀取到的數據都是最真實的,并且效率是最低的

6.8、驗證各種隔離級別

查看隔離級別:select @@tx_isolation;
?? ?+-----------------+
?? ?| @@tx_isolation ?|
?? ?+-----------------+
?? ?| REPEATABLE-READ |
?? ?mysql中默認的隔離級別

驗證:read uncommit

設置全局的隔離級別:set global transaction isolation level read uncommitted;
改完之后退出一下重新進入
事務A?? ??? ??? ??? ??? ?事務B
--------------------------------------------------------------------------------------------
use zheng;
?? ??? ??? ??? ??? ??? ?use zheng;
start transaction;
select * from t_user;
?? ??? ??? ??? ??? ??? ?start transaction;
?? ??? ??? ??? ??? ??? ?insert into t_user values('zhangsan');
select * from t_user;

驗證:read committed

設置全局的隔離級別:set global transaction isolation level read committed;
改完之后退出一下重新進入
事務A?? ??? ??? ??? ??? ?事務B
--------------------------------------------------------------------------------------------
use zheng;
?? ??? ??? ??? ??? ??? ?use zheng;
start transaction;
?? ??? ??? ??? ??? ??? ?start transaction;
select * from t_user;
?? ??? ??? ??? ??? ??? ?insert into t_user values('zhangsan');
select * from t_user;?? ?
?? ??? ??? ??? ??? ??? ?commit;
select * from t_user;


驗證:repeatable read

設置全局的隔離級別:set global transaction isolation level repeatable read;
改完之后退出一下重新進入
事務A?? ??? ??? ??? ??? ?事務B
--------------------------------------------------------------------------------------------
use zheng;
?? ??? ??? ??? ??? ??? ?use zheng;
start transaction;
?? ??? ??? ??? ??? ??? ?start transaction;
select * from t_uesr;
?? ??? ??? ??? ??? ??? ?insert into t_uesr values('lisi');
?? ??? ??? ??? ??? ??? ?insert into t_uesr values('wangwu');
select * from t_user;
?? ??? ??? ??? ??? ??? ?commit;
select * from t_user;


驗證:serializable

設置全局的隔離級別:set global transaction isolation level repeatable read;
改完之后退出一下重新進入
事務A?? ??? ??? ??? ??? ?事務B
--------------------------------------------------------------------------------------------
use zheng;
?? ??? ??? ??? ??? ??? ?use zheng;
start transaction;
?? ??? ??? ??? ??? ??? ?start transaction;
select * from t_uesr;
insert into t_user values('abc');
?? ??? ??? ??? ??? ??? ?select *from t_user;

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

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

相關文章

【vscode提取函數快捷鍵】提取函數,減少大方法的復雜度

在 Visual Studio Code 中,提取函數的快捷鍵取決于你所使用的編程語言和安裝的插件。以下是一些常用的快捷鍵組合,可以用來在 Visual Studio Code 中提取函數: 執行以下步驟來提取函數: 選中要提取的代碼塊。右鍵單擊選中的代碼…

System Verilog學習筆記(十二)——數組(2)

System Verilog學習筆記(十二)——數組(2) 動態數組 在編譯時不會為其定制尺寸,而是在仿真運行時來確定動態數組一開始為空,需要使用new[ ]來為其分配空間聲明方式 int dyn[],d2[]; //聲明了兩個動態數組…

git之遠程操作

一.分布式版本控制系統 分布式版本控制系統通常也有?臺充當“中央服務器”的電腦,但這個服務器的作?僅僅是?來?便“交換”?家的修改,沒有它?家也?樣?活,只是交換修改不?便?已。有了這個“中央服務器”的電腦,這樣就不怕…

ChatGPT學習第四周

📖 學習目標 ChatGPT實踐操作 通過實際操作和練習,加深對ChatGPT功能的理解。 項目:創建一個ChatGPT應用案例 設計一個基于ChatGPT的小項目,將理論應用于實踐。 ?? 學習活動 學習資料 《萬字干貨!ChatGPT 從零完…

[C++核心編程](一):內存分區

目錄 代碼區 全局區 棧區 堆區 new操作符 不同區域存放的數據,賦予不同的生命周期,給予開發人員更大的靈活編程。 代碼區 存放二進制代碼,由操作系統管理未執行程序(.exe)前已經存在共享,對頻繁執行…

達夢數據庫查詢語句內存溢出問題解決

背景:達夢數據庫使用過程中,某天突然服務宕機,導致各類后端服務無法注冊到nacos上,重啟之后nacos正常啟動,可執行一條兩千多條數據量的連表查詢時間很長,甚至會報錯,經查看日志發現在查詢過程中…

【C語言】常見的動態內存管理錯誤

前言 上一篇介紹了C語言中 動態內存管理函數,本片講解的是 在我們使用動態內存管理時 常見的錯誤,一起來看看吧~ 歡迎關注個人主頁:逸狼 創造不易,可以點點贊嗎~ 如有錯誤,歡迎指出~ 目錄 1.對NULL指針的解引?操作 錯…

什么是前端框架中的數據綁定(data binding)?有哪些類型的數據綁定?

聚沙成塔每天進步一點點 ? 專欄簡介 前端入門之旅:探索Web開發的奇妙世界 歡迎來到前端入門之旅!感興趣的可以訂閱本專欄哦!這個專欄是為那些對Web開發感興趣、剛剛踏入前端領域的朋友們量身打造的。無論你是完全的新手還是有一些基礎的開發…

YOLOv5白皮書-第Y4周:common.py文件解讀

YOLOv5白皮書-第Y4周:common.py文件解讀 YOLOv5白皮書-第Y4周:common.py文件解讀0.導入需要的包和基本配置1.基本組件1.1 autopad1.2 Conv1.3 Focus1.4 Bottleneck1.5 BottleneckCSP1.6 C31.7 SPP1.8 Concat1.9 Contract、Expand 2.重要類2.1 非極大值抑制(NMS&…

vue3中的基本語法

目錄 基礎素材 vue3的優化 使用CompositionAPI理由 1. reactive() 函數 2. ref() 函數 2.1. ref的使用 2.2. 在 reactive 對象中訪問 ref 創建的響應式數據 3. isRef() 函數 4. toRefs() 函數 5. computed() 5.1. 通過 set()、get()方法創建一個可讀可寫的計算屬性 …

函數——遞歸6(c++)

角谷猜想 題目描述 日本一位中學生發現一個奇妙的 定理,請角谷教授證明,而教授 無能為力,于是產生了角谷猜想。 猜想的內容:任給一個自然數, 若為偶數則除以2,若為奇數則乘 3加1,得到一個新的…

git命令整理

一、什么是git Git 是為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。 分布式管理系統,可以快速的查看文件各個版本的改動。比如在第5行加了一個單詞“Linux”,在第8行刪了一個單詞“Windows”。而圖片、視頻這些二進制文件&#xf…

PyTorch深度學習快速入門

PyTorch深度學習快速入門 1.PyTorch環境配置及安裝2.python編輯器的選擇、安裝、配置(pycharm、JupyTer安裝)3.為什么torch.cuda.is_available()返回false4.python學習中兩大法寶函數(也可用在pytorch)5.pycharm和jupyter&#xf…

golang goroutine 如何退出?

上一講說到調度器將maingoroutine推上舞臺,為它鋪好了道路,開始執行runtime.main函數。這一講,我們探索maingoroutine以及普通goroutine從執行到退出的整個過程。 //Themaingoroutine. funcmain(){ //gmaingoroutine,不再是g0了 …

Python列表中添加刪除元素不走彎路

1.append() 向列表中添加單個元素,一般用于尾部追加 list1 ["香妃", "乾隆", "賈南風", "趙飛燕", "漢武帝"]list1.append("周瑜") print(list1) # [香妃, 乾隆, 賈南風, 趙飛燕, 漢武帝, 周瑜]…

STM32標準庫——(14)I2C通信協議、MPU6050簡介

1.I2C通信 I2C 通訊協議(Inter-Integrated Circuit)是由Phiilps公司開發的,由于它引腳少,硬件實現簡單,可擴展性強, 不需要USART、CAN等通訊協議的外部收發設備,現在被廣泛地使用在系統內多個集成電路(IC)間…

【LeetCode每日一題】【BFS模版與例題】863.二叉樹中所有距離為 K 的結點

BFS的基本概念 BFS 是廣度優先搜索(Breadth-First Search)的縮寫,是一種圖遍歷算法。它從給定的起始節點開始,逐層遍歷圖中的節點,直到遍歷到目標節點或者遍歷完所有可達節點。 BFS 算法的核心思想是先訪問當前節點的…

計算機網絡_2.2物理層下面的傳輸媒體

2.2物理層下面的傳輸媒體 一、傳輸媒體的分類二、導向型傳輸媒體1、同軸電纜2、雙絞線3、光纖(1)光纖通信原理(2)光纖組成(4)多模光纖與單模光纖對比(5)光纖的波長與規格&#xff08…

海量淘寶商品數據如何實現自動化抓取?

隨著電子商務的飛速發展,淘寶作為中國最大的網絡購物平臺之一,其商品數據具有極高的商業價值。然而,如何有效地從海量的淘寶商品數據中抓取所需信息,成為了一個技術挑戰。本文將深入探討如何實現淘寶商品數據的自動化抓取&#xf…

c# using 用法

using命令空間 導入命名空間中的所有類型 如:using System.Text; using別名 using別名包括詳細命名空間信息的具體類型,這種做法有個好處就是當同一個cs引用了兩個不同的命名空間,但兩個命名空間都包括了一個相同名字的類型的時候。當需要…