主頁 >  其他 > MySQL之基礎總結部分

MySQL之基礎總結部分

2020-09-14 11:27:06 其他

前段時間因為開學 所以到現在才更新 如有不足之處歡迎指出,

一、為什么要學習資料庫

1.1、資料庫的好處

? 1.持久化資料到本地
? 2.可以實作結構化查詢,方便管理

1.2、資料庫的相關概念

? 1、DB:資料庫,保存一組有組織的資料的容器
? 2、DBMS:資料庫管理系統,又稱為資料庫軟體(產品),用于管理DB中的資料
? 3、SQL:結構化查詢語言,用于和DBMS通信的語言

1.3、資料庫存盤資料的特點

? 1、將資料放到表中,表再放到庫中
? 2、一個資料庫中可以有多個表,每個表都有一個的名字,用來標識自己,表名具有唯一性,
? 3、表具有一些特性,這些特性定義了資料在表中如何存盤,類似java中 “類”的設計,
? 4、表由列組成,我們也稱為欄位,所有表都是由一個或多個列組成的,每一列類似java 中的”屬性”
? 5、表中的資料是按行存盤的,每一行類似于java中的“物件”,

常見的資料庫管理系統
mysql、oracle、db2、sqlserver

二、初始MySQL

2.1、MySQL服務的啟動和停止

? 方式一:計算機——右擊管理——服務
? 方式二:通過管理員身份運行
? net start 服務名(啟動服務)
? net stop 服務名(停止服務)

2.2、MySQL服務的登錄和退出

? 方式一:通過mysql自帶的客戶端
? 只限于root用戶

方式二:通過windows自帶的客戶端
登錄:
mysql 【-h主機名 -P埠號 】-u用戶名 -p密碼
            1. mysql -uroot -p密碼
			2. mysql -hip -uroot -p連接目標的密碼
			3. mysql --host=ip --user=root --password=連接目標的密碼
退出:
1.exit或ctrl+C  2. quit

2.3、MySQL的常見命令

1.查看當前所有的資料庫
show databases;
2.打開指定的庫
use 庫名
3.查看當前庫的所有表
show tables;
4.查看其它庫的所有表
show tables from 庫名;
5.創建表
create table 表名(

	列名 列型別,
	列名 列型別,
	,,,
);
6.查看表結構
desc 表名;


7.查看服務器的版本
方式一:登錄到mysql服務端
select version();
方式二:沒有登錄到mysql服務端
mysql --version
或
mysql --V

2.4、MySQL的語法規范

? 1.不區分大小寫,但建議關鍵字大寫,表名、列名小寫
? 2.每條命令最好用分號結尾
? 3.每條命令根據需要,可以進行縮進 或換行
? 4.注釋
? 單行注釋:#注釋文字
? 單行注釋:-- 注釋文字
? 多行注釋:/* 注釋文字 */
?

2.5、SQL的語言分類

? 1) DDL(Data Definition Language)資料定義語言

? 用來定義資料庫物件:資料庫,表,列等,關鍵字:create, drop,alter 等

? 2) DML(Data Manipulation Language)資料操作語言

? 用來對資料庫中表的資料進行增刪改,關鍵字:insert, delete, update 等

? 3) DQL(Data Query Language)資料查詢語言

? 用來查詢資料庫中表的記錄(資料),關鍵字:select, where 等

? 4) DCL(Data Control Language)資料控制語言(了解)

? 用來定義資料庫的訪問權限和安全級別,及創建用戶,關鍵字:GRANT, REVOKE 等

? TCL(Transaction Control Language):事務控制語言
? commit、rollback

2.6、SQL的常見命令

show databases; 查看所有的資料庫
use 庫名; 打開指定 的庫
show tables ; 顯示庫中的所有表
show tables from 庫名;顯示指定庫中的所有表
create table 表名(
	欄位名 欄位型別,	
	欄位名 欄位型別
); 創建表

desc 表名; 查看指定表的結構
select * from 表名;顯示表中的所有資料

2.7、卸載

? 1. 去mysql的安裝目錄找到my.ini檔案

? * 復制 datadir=“C:/ProgramData/MySQL/MySQL Server 5.5/Data/”

? 2. 卸載MySQL

? 3. 洗掉C:/ProgramData目錄下的MySQL檔案夾,

三、DQL語言的學習

3.1、基礎查詢

一、語法:
SELECT 查詢串列
【FROM 表名】;

  1. 語法:

? select

? 欄位串列

? from

? 表名串列

? where

? 條件串列

? group by

? 分組欄位

? having

? 分組之后的條件

? order by

? 排序

? limit

? 分頁限定

類似于Java中 :System.out.println(要列印的東西);
特點:
①通過select查詢完的結果 ,是一個虛擬的表格,不是真實存在
② 要查詢的東西 可以是常量值、可以是運算式、可以是欄位、可以是函式

二、特點
1、查詢串列可以是欄位、常量、運算式、函式,也可以是多個
2、查詢結果是一個虛擬表

三、示例
1、查詢單個欄位
select 欄位名 from 表名;
2、查詢多個欄位
select 欄位名,欄位名 from 表名;
3、查詢所有欄位
select * from 表名
4、查詢常量
select 常量值;
注意:字符型和日期型的常量值必須用單引號引起來,數值型不需要
5、查詢函式
select 函式名(實參串列);
6、查詢運算式
select 100/1234;
7、起別名
①as
②空格
8、去重
select distinct 欄位名 from 表名;
計算列
			* 一般可以使用四則運算計算一些列的值,(一般只會進行數值型的計算)
			* ifnull(運算式1,運算式2)null參與的運算,計算結果都為null
				* 運算式1:哪個欄位需要判斷是否為null
				* 如果該欄位為null后的替換值,
-- 計算math和english分數之和
SELECT NAME,math,english,math+english AS final FROM student;

-- 如果有null參與的運算,計算結果都為null
SELECT NAME,math,english,math+IFNULL(english,0) AS final FROM student;

9+
作用:做加法運算
select 數值+數值; 直接運算
select 字符+數值;先試圖將字符轉換成數值,如果轉換成功,則繼續運算;否則轉換成0,再做運算
select null+;結果都為null

10、【補充】concat函式
功能:拼接字符
select concat(字符1,字符2,字符3,...);

11、【補充】ifnull函式
功能:判斷某欄位或運算式是否為null,如果為null 回傳指定的值,否則回傳原本的值
select ifnull(commission_pct,0) from employees;

12、【補充】isnull函式
功能:判斷某欄位或運算式是否為null,如果是,則回傳1,否則回傳0

3.2、條件查詢

? 條件查詢:根據條件過濾原始表的資料,查詢到想要的資料
一、語法:
select 要查詢的欄位|運算式|常量值|函式
? from 表名
? where 條件 ;

分類:
1、條件運算式
	示例:salary>10000
2. 運算子
   條件運算子:	* ><<=>==<>
			* BETWEEN...AND  
			* IN( 集合)    在某個范圍之內
			* LIKE:模糊查詢
				* 占位符:
					* _:單個任意字符
					* %:多個任意字符
			* IS NULL  
			* and&&
			* or|| 
			* not!
3、邏輯運算式
示例:salary>10000 && salary<20000

邏輯運算子:

	and&&):兩個條件如果同時成立,結果為true,否則為false
	or(||):兩個條件只要有一個成立,結果為true,否則為false
	not(!):如果條件成立,則not后為false,否則為true

三、模糊查詢
like:一般搭配通配符使用,可以判斷字符型或數值型
通配符:%任意多個字符,_任意單個字符
示例:last_name like 'a%'

between and
in
is null /is not null:用于判斷nullis null PK <=>
			普通型別的數值	null值		可讀性
is null		×			√		√
<=>		√			√		×

-- 查詢年齡大于20歲(練習)
				SELECT * FROM student WHERE age > 20;				
				-- 查詢年齡等于20歲
				SELECT * FROM student WHERE age = 20;
				
				-- 查詢年齡不等于20歲
				SELECT * FROM student WHERE age != 20;
				SELECT * FROM student WHERE age <> 20;
				
				-- 查詢年齡大于等于20 小于等于30
				
				SELECT * FROM student WHERE age >= 20 &&  age <=30;  不推薦
				SELECT * FROM student WHERE age >= 20 AND  age <=30;
				SELECT * FROM student WHERE age BETWEEN 20 AND 30;
				
				-- 查詢年齡22歲,18歲,25歲的資訊
				SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
				SELECT * FROM student WHERE age IN (22,18,25);
				
				-- 查詢英語成績為null
				SELECT * FROM student WHERE english = NULL; -- 不對的,null值不能使用 = (!=) 判斷
				
				SELECT * FROM student WHERE english IS NULL;
				
				-- 查詢英語成績不為null
				SELECT * FROM student WHERE english  IS NOT NULL;
	
				-- 查詢姓馬的有哪些? like
				SELECT * FROM student WHERE NAME LIKE '馬%';
				-- 查詢姓名第二個字是化的人
				
				SELECT * FROM student WHERE NAME LIKE "_化%";
				
				-- 查詢姓名是3個字的人
				SELECT * FROM student WHERE NAME LIKE '___';
					
				-- 查詢姓名中包含德的人
				SELECT * FROM student WHERE NAME LIKE '%德%';

3.3、排序查詢

語法:
select
	查詢串列
fromwhere 
	條件

order by 排序的欄位|運算式|函式|別名 【asc|desc* 注意:
			* 如果有多個排序條件,則當前邊的條件值一樣時,才會判斷第二條件,
-- 按照數學成績排名,如果數學成績一樣,則按照英語成績排名
SELECT *FROM student ORDER BY math ,english ASC;
二、特點
1asc :升序,如果不寫默認升序
  desc:降序

2、排序串列 支持 單個欄位、多個欄位、函式、運算式、別名

3order by的位置一般放在查詢陳述句的最后(除limit陳述句之外)

?

3.4、常見函式

? 一、單行函式
? 1、字符函式
? concat 拼接
? substr 截取子串
? upper 轉換成大寫
? lower 轉換成小寫
? trim 去前后指定的空格和字符
? ltrim 去左邊空格
? rtrim 去右邊空格
? replace 替換
? lpad 左填充
? rpad 右填充
? instr 回傳子串第一次出現的索引
? length 獲取位元組個數
?

2、數學函式
	round 四舍五入
	rand 亂數
	floor 向下取整
	ceil 向上取整
	mod 取余
	truncate 截斷
3、日期函式
	now 當前系統日期+時間
	curdate 當前系統日期
	curtime 當前系統時間
	str_to_date 將字符轉換成日期
	date_format 將日期轉換成字符
4、流程控制函式
	if 處理雙分支
	case陳述句 處理多分支
		情況1:處理等值判斷
		情況2:處理條件判斷
	
5、其他函式
	version版本
	database當前庫
	user當前連接用戶

二、分組函式
sum 求和
max 最大值
min 最小值
avg 平均值
count 計數

	特點:
	1、以上五個分組函式都忽略null值,除了count(*)
	2、sum和avg一般用于處理數值型
		max、min、count可以處理任何資料型別
    3、都可以搭配distinct使用,用于統計去重后的結果
	4、count的引數可以支持:
		欄位、*、常量值,一般放1
-- 使用聚合函式查看總人數
SELECT COUNT(NAME) AS '總人數' FROM student;
	   建議使用 count(*)
* 注意:聚合函式的計算,排除null值,
			解決方案:如下代碼
				1. 選擇不包含非空的列進行計算
				2. IFNULL函式
SELECT COUNT(english) FROM student;
SELECT COUNT(IFNULL(english,0)) FROM student;

3.5、分組查詢

1、語法:
? select 查詢的欄位,分組函式
? from 表
? group by 分組的欄位
?2、注意:

  1. 分組之后查詢的欄位:分組欄位、聚合函式

  2. where 和 having 的區別?

    ? 1. where 在分組之前進行限定,如果不滿足條件,則不參與分組,having在分組之后進行限定,如果不滿足結果,則不會被查詢出來

    ? 2. where 后不可以跟聚合函式,having可以進行聚合函式的判斷,

特點:
1、可以按單個欄位分組
2、和分組函式一同查詢的欄位最好是分組后的欄位
3、分組篩選
		   針對的表	         位置			      關鍵字
分組前篩選:	原始表		   group by的前面		   where
分組后篩選:	分組后的結果集	 group by的后面	    having

4、可以按多個欄位分組,欄位之間用逗號隔開
5、可以支持排序
6having后可以支持別名
練習:
	-- 按照性別分組,分別查詢男、女同學的平均分
	SELECT sex , AVG(math) FROM student GROUP BY sex;
			
	-- 按照性別分組,分別查詢男、女同學的平均分,人數		
	SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
			
	--  按照性別分組,分別查詢男、女同學的平均分,人數 要求:分數低于60分的人,不參與分組
    SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 60 GROUP BY sex;
			
    --  按照性別分組,分別查詢男、女同學的平均分,人數 要求:分數低于60分的人,不參與分組,分組之后,人數要大于2個人		
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 60 GROUP BY sex HAVING COUNT(id) > 2;
						
SELECT sex , AVG(math),COUNT(id) 人數 FROM student WHERE math > 60 GROUP BY sex HAVING 人數 > 2;

3.6、多表連接查詢

笛卡爾乘積:當查詢多個表時,沒有添加有效的連接條件,導致多個表所有行實作完全連接
如何解決:添加有效的連接條件
* 有兩個集合A,B .取這兩個集合的所有組成情況,
		* 要完成多表查詢,需要消除無用的資料

3.6.1、傳統模式下的連接 :等值連接——非等值連接

1、等值連接
語法:
	select 查詢串列
	from1 別名,2 別名
	where1.key =2.keyand 篩選條件】
	【group by 分組欄位】
	【having 分組后的篩選】
	【order by 排序欄位】

特點:
	① 等值連接的結果 = 多個表的交集
	② n表連接,至少需要n-1個連接條件
	③ n表連接至少需要n-1個連接條件
	④ 等值連接的結果是多表的交集部分
	
2、非等值連接
語法:
	select 查詢串列
	from1 別名,2 別名
	where 非等值的連接條件
	【and 篩選條件】
	【group by 分組欄位】
	【having 分組后的篩選】
	【order by 排序欄位】

3.6.2、多表查詢

1、內連接
語法:
select 查詢串列
from1 別名
【innerjoin2 別名 on 連接條件
where 篩選條件
group by 分組串列
having 分組后的篩選
order by 排序串列
limit 子句;

特點:
① 表的順序可以調換
② 內連接的結果=多表的交集
③ n表連接至少需要n-1個連接條件
分類:
等值連接
非等值連接
自連接

2、外連接
語法:
select 查詢串列
from1 別名
left|right|fullouterjoin2 別名 on 連接條件
where 篩選條件
group by 分組串列
having 分組后的篩選
order by 排序串列
limit 子句;
特點:
①查詢的結果=主表中所有的行,如果從表和它匹配的將顯示匹配行,如果從表沒有匹配的則顯示nullleft join 左邊的就是主表,right join 右邊的就是主表
 full join 兩邊都是主表
③一般用于查詢除了交集部分的剩余的不匹配的行

練習:
* 準備sql
		# 創建部門表
		CREATE TABLE dept(
			id INT PRIMARY KEY AUTO_INCREMENT,
			NAME VARCHAR(20)
		);
		INSERT INTO dept (NAME) VALUES ('開發部'),('市場部'),('財務部');
		# 創建員工表
		CREATE TABLE emp (
			id INT PRIMARY KEY AUTO_INCREMENT,
			NAME VARCHAR(10),
			gender CHAR(1), -- 性別
			salary DOUBLE, -- 工資
			join_date DATE, -- 入職日期
			dept_id INT,
			FOREIGN KEY (dept_id) REFERENCES dept(id) -- 外鍵,關聯部門表(部門表的主鍵)
		);
		INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孫悟空','男',7200,'2013-02-24',1);
		INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('豬八戒','男',3600,'2010-12-02',2);
		INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('唐僧','男',9000,'2008-08-08',2);
		INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('白骨精','女',5000,'2015-10-07',3);
		INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('蜘蛛精','女',4500,'2011-03-14',1);
1. 內連接查詢:
			1. 隱式內連接:使用where條件消除無用資料
				* 例子:
				-- 查詢所有員工資訊和對應的部門資訊
				SELECT * FROM emp,dept WHERE emp.`dept_id` = dept.`id`;
				
				-- 查詢員工表的名稱,性別,部門表的名稱
				SELECT emp.name,emp.gender,dept.name FROM emp,dept WHERE emp.`dept_id` = dept.`id`;
				起別名:
				SELECT 
					t1.name, -- 員工表的姓名
					t1.gender,-- 員工表的性別
					t2.name -- 部門表的名稱
				FROM
					emp t1,
					dept t2
				WHERE 
					t1.`dept_id` = t2.`id`;

	
			2. 顯式內連接:
				* 語法: select 欄位串列 from 表名1 [inner] join 表名2 on 條件
				* 例如:
					* SELECT * FROM emp INNER JOIN dept ON emp.`dept_id` = dept.`id`;	
					* SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`;	

			3. 內連接查詢:
				1. 從哪些表中查詢資料
				2. 條件是什么
				3. 查詢哪些欄位
		
2. 外鏈接查詢:
	1. 左外連接:
				* 語法:select 欄位串列 from1 left [outer] join2 on 條件;
				* 查詢的是左表所有資料以及其交集部分,
				* 例子:
	-- 查詢所有員工資訊,如果員工有部門,則查詢部門名稱,沒有部門,則不顯示部門名稱
			SELECT 	t1.*,t2.`name` FROM emp t1 LEFT JOIN dept t2 ON t1.`dept_id` = t2.`id`;
-- 查詢所有員工資訊,如果員工有部門,則查詢部門名稱,沒有部門,則不顯示部門名稱
	SELECT 	t1.*,t2.`name` FROM emp t1 LEFT JOIN dept t2 ON t1.`dept_id` = t2.`id`;
	2. 右外連接:
			* 語法:select 欄位串列 from1 right [outer] join2 on 條件;
				* 查詢的是右表所有資料以及其交集部分,
				* 例子:
				SELECT 	* FROM dept t2 RIGHT JOIN emp t1 ON t1.`dept_id` = t2.`id`;
3、交叉連接
語法:
select 查詢串列
from1 別名
cross join2 別名;

特點:
類似于笛卡爾乘積

?

3.6.3、自連接

案例:查詢員工名和直接上級的名稱

sql99

SELECT e.last_name,m.last_name
FROM employees e
JOIN employees m ON e.`manager_id`=m.`employee_id`;

sql92

SELECT e.last_name,m.last_name
FROM employees e,employees m 
WHERE e.`manager_id`=m.`employee_id`;

3.7、子查詢

含義:

嵌套在其他陳述句內部的select陳述句稱為子查詢或內查詢,
外面的陳述句可以是insert、update、delete、select等,一般select作為外面陳述句較多
外面如果為select陳述句,則此陳述句稱為外查詢或主查詢

特點:

1、子查詢都放在小括號內
2、子查詢可以放在from后面、select后面、where后面、having后面,但一般放在條件的右側
3、子查詢優先于主查詢執行,主查詢使用了子查詢的執行結果
4、子查詢根據查詢結果的行數不同分為以下兩類:
① 單行子查詢
	結果集只有一行
	一般搭配單行運算子使用:> < = <> >= <= 
	非法使用子查詢的情況:
	a、子查詢的結果為一組值
	b、子查詢的結果為空
	
② 多行子查詢
	結果集有多行
	一般搭配多行運算子使用:any、all、in、not in
	in: 屬于子查詢結果中的任意一個就行
	any和all往往可以用其他查詢代替
* 子查詢不同情況
		1. 子查詢的結果是單行單列的:
					* 子查詢可以作為條件,使用運算子去判斷, 運算子: > >= < <= =
			-- 查詢員工工資小于平均工資的人

			SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);

		2. 子查詢的結果是多行單列的:

			* 子查詢可以作為條件,使用運算子in來判斷
			-- 查詢'財務部'和'市場部'所有的員工資訊

			SELECT id FROM dept WHERE NAME = '財務部' OR NAME = '市場部';

			SELECT * FROM emp WHERE dept_id = 3 OR dept_id = 2;

			-- 子查詢

			SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME = '財務部' OR NAME = '市場部');

		3. 子查詢的結果是多行多列的:
			* 子查詢可以作為一張虛擬表參與查詢

			-- 查詢員工入職日期是2011-11-11日之后的員工資訊和部門資訊
			-- 子查詢

			SELECT * FROM dept t1 ,(SELECT * FROM emp WHERE emp.`join_date` > '2011-11-11') t2
			WHERE t1.id = t2.dept_id;				

			-- 普通內連接
			SELECT * FROM emp t1,dept t2 WHERE t1.`dept_id` = t2.`id` AND t1.`join_date` >  '2011-11-11'

3.8、分頁查詢

語法:

select 欄位|運算式,...
from 表
【where 條件】
【group by 分組欄位】
【having 條件】
【order by 排序的欄位】
limit 【起始的條目索引,】條目數;

分頁查詢

	1.語法:limit 開始的索引,每頁查詢的條數; 起始條目索引從0開始,limit子句放在查詢陳述句的最后

 	2. 公式:開始的索引 = (當前的頁碼 - 1* 每頁顯示的條數
     	-- 每頁顯示3條記錄 
		SELECT * FROM student LIMIT 0,3; -- 第1頁
		
		SELECT * FROM student LIMIT 3,3; -- 第2頁
		
		SELECT * FROM student LIMIT 6,3; -- 第3頁

	3.公式:select * fromlimit (page-1*sizePerPage,sizePerPage
假如:
每頁顯示條目數sizePerPage
要顯示的頁數 page

3.9、聯合查詢

引入:
union:合并、聯合,將多次查詢結果合并成一個結果

語法:

select 欄位|常量|運算式|函式 【from 表】 【where 條件】 unionallselect 欄位|常量|運算式|函式 【from 表】 【where 條件】 unionallselect 欄位|常量|運算式|函式 【from 表】 【where 條件】 unionall.....
select 欄位|常量|運算式|函式 【from 表】 【where 條件】

特點:

1、多條查詢陳述句的查詢的列數必須是一致的
2、多條查詢陳述句的查詢的列的型別幾乎相同
3union代表去重,union all代表不去重

四、DML語言的學習

4.1、插入

語法:
insert into 表名(欄位名,…)
values(值1,…);

特點:

* 注意:
			1. 列名和值要一一對應,
			2. 如果表名后,不定義列名,則默認給所有列添加值
				insert into 表名 values(1,2,...值n);
			3. 除了數字型別,其他型別需要使用引號(單雙都可以)引起來

一、方式一
語法:
insert into 表名(欄位名,...) values(,...);
特點:
1、要求值的型別和欄位的型別要一致或兼容
2、欄位的個數和順序不一定與原始表中的欄位個數和順序一致
但必須保證值和欄位一一對應
3、假如表中有可以為null的欄位,注意可以通過以下兩種方式插入null值
①欄位和值都省略
②欄位寫上,值使用null
4、欄位和值的個數必須一致
5、欄位名可以省略,默認所有列

二、方式二
語法:
insert into 表名 set 欄位=,欄位=,...;

兩種方式 的區別:
1.方式一支持一次插入多行,語法如下:
insert into 表名【(欄位名,..)values(值,..),(值,...),...;
2.方式一支持子查詢,語法如下:
insert into 表名
查詢陳述句;

4.2、修改

修改單表語法:

update 表名 set 欄位=新值,欄位=新值
【where 條件】

修改多表語法:

update1 別名1,2 別名2
set 欄位=新值,欄位=新值
where 連接條件
and 篩選條件
* 注意:
	 如果不加任何條件,則會將表中所有記錄全部修改,

4.3、洗掉

方式1:delete陳述句

一、洗掉單表的記錄★
語法:delete from 表名 【where 篩選條件】【limit 條目數】

二、級聯洗掉[補充]
語法:

delete 別名1,別名2 from1 別名 
inner|left|right join2 別名 
on 連接條件
 【where 篩選條件】

方式2:truncate陳述句

truncate table 表名

兩種方式的區別【面試題】

一般洗掉速度 :drop>truncate>delete
應用范圍:truncate只能對tabledelete可以是tableview
1.truncate洗掉后,如果再插入,標識列從1開始
  delete洗掉后,如果再插入,標識列從斷點開始
2.delete可以添加篩選條件   truncate不可以添加篩選條件
3.truncate效率較高
4.truncate沒有回傳值
delete可以回傳受影響的行數
5.truncate不可以回滾
delete可以回滾

五、DCL語言的學習

DCL:管理用戶,授權

  • DBA:資料庫管理員
  • DCL:管理用戶,授權

5.1、管理用戶

	1. 添加用戶:
				* 語法:CREATE USER '用戶名'@'主機名' IDENTIFIED BY '密碼';
			2. 洗掉用戶:
				* 語法:DROP USER '用戶名'@'主機名';
			3. 修改用戶密碼:
				
				UPDATE USER SET PASSWORD = PASSWORD('新密碼') WHERE USER = '用戶名';
				UPDATE USER SET PASSWORD = PASSWORD('abc') WHERE USER = 'lisi';
				
				SET PASSWORD FOR '用戶名'@'主機名' = PASSWORD('新密碼');
				SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123');

				* mysql中忘記了root用戶的密碼?
					1. cmd -- > net stop mysql 停止mysql服務
						* 需要管理員運行該cmd

					2. 使用無驗證方式啟動mysql服務: mysqld --skip-grant-tables
					3. 打開新的cmd視窗,直接輸入mysql命令,敲回車,就可以登錄成功
					4. use mysql;
					5. update user set password = password('你的新密碼') where user = 'root';
					6. 關閉兩個視窗
					7. 打開任務管理器,手動結束mysqld.exe 的行程
					8. 啟動mysql服務
					9. 使用新密碼登錄,
			4. 查詢用戶:
				-- 1. 切換到mysql資料庫
				USE myql;
				-- 2. 查詢user表
				SELECT * FROM USER;
				
				* 通配符: % 表示可以在任意主機使用用戶登錄資料庫

5.2 、權限管理

1. 查詢權限:
   -- 查詢權限
   SHOW GRANTS FOR '用戶名'@'主機名';
   SHOW GRANTS FOR 'lisi'@'%';

2. 授予權限:
   -- 授予權限
   grant 權限串列 on 資料庫名.表名 to '用戶名'@'主機名';
   -- 給張三用戶授予所有權限,在任意資料庫任意表上
   GRANT ALL ON *.* TO 'wanghui'@'localhost';

3. 撤銷權限:
   -- 撤銷權限:
   revoke 權限串列 on 資料庫名.表名 from '用戶名'@'主機名';
   REVOKE UPDATE ON wh.`account` FROM 'lisi'@'%';

六、DDL語言的學習

6.1、庫和表的管理

庫的管理:

1. 操作資料庫:CRUD
		1. C(Create):創建
			* 創建資料庫:
				* create database 資料庫名稱;
			* 創建資料庫,判斷不存在,再創建:
				* create database if not exists 資料庫名稱;
			* 創建資料庫,并指定字符集
				* create database 資料庫名稱 character set 字符集名;

			* 練習: 創建wh資料庫,判斷是否存在,并制定字符集為gbk
				* create database if not exists wh character set gbk;
		2. R(Retrieve):查詢
			* 1.查詢所有資料庫的名稱:
				* show databases;
			* 2.查詢某個資料庫的字符集:查詢某個資料庫的創建陳述句
				* show create database 資料庫名稱;
		3. U(Update):修改
			* 修改資料庫的字符集
				* alter database 資料庫名稱 character set 字符集名稱;
                  alter database  wh character set utf8;   //這里我們不能寫utf-8
		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
				);
				* 注意:最后一列,不需要加逗號(,* 創建表  
				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 表名 ;

6.2、常見型別

一、數值型
1、整型
tinyintsmallintmediumintint/integerbigint
1         2        3          4            8

特點:
①都可以設定無符號和有符號,默認有符號,通過unsigned設定無符號
②如果超出了范圍,會報out or range例外,插入臨界值
③長度可以不指定,默認會有一個長度
長度代表顯示的最大寬度,如果不夠則左邊用0填充,但需要搭配zerofill,并且默認變為無符號整型


2、浮點型
定點數:decimal(M,D)
浮點數:
	float(M,D)   4
	double(M,D)  8

特點:
①M代表整數部位+小數部位的個數,D代表小數部位
②如果超出范圍,則報out or range例外,并且插入臨界值
③M和D都可以省略,但對于定點數,M默認為10,D默認為0
④如果精度要求較高,則優先考慮使用定點數

二、字符型
charvarcharbinaryvarbinaryenumsettextblob

char:固定長度的字符,寫法為char(M),最大長度不能超過M,其中M可以省略,默認為1
varchar:可變長度的字符,寫法為varchar(M),最大長度不能超過M,其中M不可以省略

三、日期型
yeardate日期
time時間
datetime 日期+時間          8      
timestamp 日期+時間         4   比較容易受時區、語法模式、版本的影響,更能反映當前時區的真實時間

6.3、常見約束

NOT NULL:非空,該欄位的值必填
UNIQUE:唯一,該欄位的值不可重復
DEFAULT:默認,該欄位的值不用手動插入有默認值
CHECK:檢查,mysql不支持
PRIMARY KEY:主鍵,該欄位的值不可重復并且非空  unique+not null
FOREIGN KEY:外鍵,該欄位的值參考了另外的表的欄位
主鍵和唯一
1、區別:
①、一個表至多有一個主鍵,但可以有多個唯一
②、主鍵不允許為空,唯一可以為空
2、相同點
都具有唯一性
都支持組合鍵,但不推薦
外鍵:
1、用于限制兩個表的關系,從表的欄位值參考了主表的某欄位值
2、外鍵列和主表的被參考列要求型別一致,意義一樣,名稱無要求
3、主表的被參考列要求是一個key(一般就是主鍵)
4、插入資料,先插入主表
洗掉資料,先洗掉從表
可以通過以下兩種方式來洗掉主表的記錄

分類:
1. 級聯更新:ON UPDATE CASCADE 
2. 級聯洗掉:ON DELETE CASCADE 
#方式一:級聯洗掉
語法:ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 
		OREIGN KEY (外鍵欄位名稱) REFERENCES 主表名稱(主表列名稱)
        ON UPDATE CASCADE ON DELETE CASCADE  ;
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE CASCADE;

#方式二:級聯置空
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE SET NULL;

二、創建表時添加約束
create table 表名(
	欄位名 欄位型別 not null,#非空
	欄位名 欄位型別 primary key,#主鍵
	欄位名 欄位型別 unique,#唯一
	欄位名 欄位型別 default,#默認
	constraint 約束名 foreign key(欄位名) references 主表(被參考列)
)
注意:
			支持型別		可以起約束名			
列級約束		除了外鍵		不可以
表級約束		除了非空和默認	可以,但對主鍵無效

列級約束可以在一個欄位上追加多個,中間用空格隔開,沒有順序要求

三、修改表時添加或洗掉約束
1、非空
添加非空
	alter table 表名 modify column 欄位名 欄位型別 not null;
洗掉非空
	alter table 表名 modify column 欄位名 欄位型別 ;

2、默認
添加默認
	alter table 表名 modify column 欄位名 欄位型別 default;
洗掉默認
	alter table 表名 modify column 欄位名 欄位型別 ;
3、主鍵
添加主鍵
	alter table 表名 addconstraint 約束名】 primary key(欄位名);
洗掉主鍵
	alter table 表名 drop primary key;

4、唯一
添加唯一
	alter table 表名 addconstraint 約束名】 unique(欄位名);
洗掉唯一
	alter table 表名 drop index 索引名;
5、外鍵
添加外鍵
	alter table 表名 addconstraint 約束名】 foreign key(欄位名) references 主表(被參考列);
洗掉外鍵
	alter table 表名 drop foreign key 約束名;

四、自增長列
1.概念:如果某一列是數值型別的,使用 auto_increment 可以來完成值得自動增長
2、一個表至多有一個自增長列
3、自增長列只能支持數值型
4、自增長列必須為一個key.在創建表時,添加主鍵約束,并且完成主鍵自增長
create table stu(
		id int primary key auto_increment,-- 給id添加主鍵約束
		name varchar(20)
			);. 洗掉自動增長 alter tablemodify column 欄位名 欄位型別 約束 
		ALTER TABLE stu MODIFY id INT;. 添加自動增長 alter tablemodify column 欄位名 欄位型別 約束 auto_increment
		ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

七、TCL語言的學習

7.1、資料庫事務

一、含義
事務:一潭訓多條sql陳述句組成一個執行單位,一組sql陳述句要么都執行要么都不執行

二、特點(ACID)
A 原子性:一個事務是不可再分割的整體,要么都執行要么都不執行
C 一致性:一個事務可以使資料從一個一致狀態切換到另外一個一致的狀態
I 隔離性:一個事務不受其他事務的干擾,多個事務互相隔離的
D 持久性:一個事務一旦提交了,則永久的持久化到本地

相關步驟:

1. 開啟事務: start transaction;
2. 回滾:rollback;
3. 提交:commit;
* 修改事務的默認提交方式:
		* 查看事務的默認提交方式:SELECT @@autocommit; -- 1 代表自動提交  0 代表手動提交
		* 修改默認提交方式: set @@autocommit = 0;

事務的分類:

隱式事務,沒有明顯的開啟和結束事務的標志

比如
insert、update、delete陳述句本身就是一個事務

顯式事務,具有明顯的開啟和結束事務的標志

	①開啟事務
	set autocommit=0;
	start transaction;#可以省略
	
	②撰寫一組邏輯sql陳述句
	注意:sql陳述句支持的是insertupdatedelete

	設定回滾點:
	savepoint 回滾點名;
	
	③結束事務
	提交:commit;
	回滾:rollback;
	回滾到指定的地方:rollback to 回滾點名;

使用到的關鍵字

set autocommit=0;
start transaction;
commit;
rollback;

savepoint  斷點
commit to 斷點
rollback to 斷點

7.2、事務的隔離級別:

事務并發問題如何發生?

當多個事務同時操作同一個資料庫的相同資料時

事務的并發問題有哪些?

臟讀:一個事務讀取到了另外一個事務未提交的資料
不可重復讀:同一個事務中,多次讀取到的資料不一致
幻讀:一個事務讀取資料時,另外一個事務進行更新,導致第一個事務讀取到了沒有更新的資料

如何避免事務的并發問題?

通過設定事務的隔離級別
1READ UNCOMMITTED 讀未提交  * 產生的問題:臟讀、不可重復讀、幻讀
2READ COMMITTED 可以避免臟讀 讀已提交 (Oracle) * 產生的問題:不可重復讀、幻讀
3REPEATABLE READ 可以避免臟讀、不可重復讀和一部分幻讀 可重復讀 (MySQL默認)* 產生的問題:幻讀
4SERIALIZABLE 可以避免臟讀、不可重復讀和幻讀 串行化 * 可以解決所有的問題

設定隔離級別:

set session|global  transaction isolation level 隔離級別名;

查看隔離級別:

select @@tx_isolation;

八、視圖

含義:理解成一張虛擬的表

視圖和表的區別:
使用方式 占用物理空間

視圖	完全相同	不占用,僅僅保存的是sql邏輯

表	完全相同	占用

視圖的好處:

好處:
1、簡化sql陳述句
2、提高了sql的重用性
3、保護基表的資料,提高了安全性

視圖的創建
語法:
CREATE VIEW 視圖名
AS
查詢陳述句;

視圖的增刪改查
1、查看視圖的資料 ★

SELECT * FROM wh;
SELECT * FROM wh WHERE last_name='Partners';

2、插入視圖的資料
INSERT INTO wh(last_name,department_id) VALUES('孫悟空',90);

3、修改視圖的資料

UPDATE wh SET last_name ='齊天大圣' WHERE last_name='孫悟空';

4、洗掉視圖的資料
drop view 視圖1,視圖2,...;
###某些視圖不能更新
	包含以下關鍵字的sql陳述句:分組函式、distinct、group  by、having、union或者union all
	常量視圖
	Select中包含子查詢
	join
	from一個不能更新的視圖
	where子句的子查詢參考了from子句中的表
視圖邏輯的更新
	#方式一:
	CREATE OR REPLACE VIEW wh
	AS
	SELECT last_name FROM employees
	WHERE employee_id>100;
	#方式二:
ALTER VIEW wh
AS
SELECT employee_id FROM employees;

SELECT * FROM wh;
視圖的洗掉
	DROP VIEW test_v1,test_v2,test_v3;
###視圖結構的查看	
desc 視圖名;
show create view 視圖名;

視圖和表的對比
關鍵字 是否占用物理空間 使用
視圖 view 占用較小,只保存sql邏輯 一般用于查詢
表 table 保存實際的資料 增刪改查

九、變數

9.1、系統變數

分類
說明:變數由系統提供的,不用自定義
語法:
①查看系統變數
showglobal|session 】 variables like ''; 如果沒有顯式宣告global還是session,則默認是session
②查看指定的系統變數的值
select @@【global|session.變數名; 如果沒有顯式宣告global還是session,則默認是session
③為系統變數賦值
方式一:
setglobal|session 】 變數名=; 如果沒有顯式宣告global還是session,則默認是session
方式二:
set @@global.變數名=;
set @@變數名=值;
1、全域變數
服務器層面上的,必須擁有super權限才能為系統變數賦值,作用域為整個服務器,也就是針對于所有連接(會話)有效
作用域:針對于所有會話(連接)有效,但不能跨重啟
查看所有全域變數
SHOW GLOBAL VARIABLES;
查看滿足條件的部分系統變數
SHOW GLOBAL VARIABLES LIKE '%char%';
查看指定的系統變數的值
SELECT @@global.autocommit;
為某個系統變數賦值
SET @@global.autocommit=0;
SET GLOBAL autocommit=0;

2、會話變數
服務器為每一個連接的客戶端都提供了系統變數,作用域為當前的連接(會話)
作用域:針對于當前會話(連接)有效

查看所有會話變數
SHOW SESSION VARIABLES;
查看滿足條件的部分會話變數
SHOW SESSION VARIABLES LIKE '%char%';
查看指定的會話變數的值
SELECT @@autocommit;
SELECT @@session.tx_isolation;
為某個會話變數賦值
SET @@session.tx_isolation='read-uncommitted';
SET SESSION tx_isolation='read-committed';

9.2、自定義變數

說明:
1、用戶變數
作用域:針對于當前連接(會話)生效
位置:begin end里面,也可以放在外面
使用:

①宣告并賦值:
set @變數名=;set @變數名:=;select @變數名:=;

②更新值
方式一:
	set @變數名=;set @變數名:=;select @變數名:=;
方式二:
	select xx into @變數名 from;

③使用
select @變數名;

2、區域變數
作用域:僅僅在定義它的begin end中有效
位置:只能放在begin end中,而且只能放在第一句
使用:
①宣告
declare 變數名 型別 【default 值】;
②賦值或更新
方式一:
	set 變數名=;set 變數名:=;select @變數名:=;
方式二:
	select xx into 變數名 from;
③使用
select 變數名;

二者的區別:

		作用域			定義位置		語法

用戶變數 當前會話 會話的任何地方 加@符號,不用指定型別
區域變數 定義它的BEGIN END中 BEGIN END的第一句話 一般不用加@,需要指定型別

###分支
一、if函式
語法:if(條件,值1,值2)
特點:可以用在任何位置

二、case陳述句

語法:

情況一:類似于switch
case 運算式
when 值1 then 結果1或陳述句1(如果是陳述句,需要加分號) 
when 值2 then 結果2或陳述句2(如果是陳述句,需要加分號)
...
else 結果n或陳述句n(如果是陳述句,需要加分號)
end 【case】(如果是放在begin end中需要加上case,如果放在select后面不需要)

情況二:類似于多重if
case 
when 條件1 then 結果1或陳述句1(如果是陳述句,需要加分號) 
when 條件2 then 結果2或陳述句2(如果是陳述句,需要加分號)
...
else 結果n或陳述句n(如果是陳述句,需要加分號)
end 【case】(如果是放在begin end中需要加上case,如果放在select后面不需要)

特點:
可以用在任何位置

三、if elseif陳述句

語法:

if 情況1 then 陳述句1;
elseif 情況2 then 陳述句2;
...
else 陳述句n;
end if;

特點:
只能用在begin end中!!!!!!!!!!!!!!!

三者比較:
應用場合
if函式 簡單雙分支
case結構 等值判斷 的多分支
if結構 區間判斷 的多分支

###回圈

語法:

【標簽:】WHILE 回圈條件  DO
	回圈體
END WHILE 【標簽】;

特點:

只能放在BEGIN END里面

如果要搭配leave跳轉陳述句,需要使用標簽,否則可以不用標簽

leave類似于java中的break陳述句,跳出所在回圈!!!

十、存盤程序和函式

10.1、存盤程序

含義:一組經過預先編譯的sql陳述句的集合
好處:

1、提高了sql陳述句的重用性,減少了開發程式員的壓力
2、提高了效率
3、減少了傳輸次數

分類:

1、無回傳無參
2、僅僅帶in型別,無回傳有參
3、僅僅帶out型別,有回傳無參
4、既帶in又帶out,有回傳有參
5、帶inout,有回傳有參
注意:in、out、inout都可以在一個存盤程序中帶多個

一 創建存盤程序
語法:

create procedure 存盤程序名(in|out|inout 引數名  引數型別,...)
begin
	存盤程序體
end
注意:
1.引數模式:in、out、inout,其中in可以省略
2.存盤程序體的每一條sql陳述句都需要用分號結尾

類似于方法:

修飾符 回傳型別 方法名(引數型別 引數名,...){

	方法體;
}

注意

1、需要設定新的結束標記
delimiter 新的結束標記
示例:
delimiter $

CREATE PROCEDURE 存盤程序名(IN|OUT|INOUT 引數名  引數型別,...)
BEGIN
	sql陳述句1;
	sql陳述句2;

END $

2、存盤程序體中可以有多條sql陳述句,如果僅僅一條sql陳述句,則可以省略begin end

3、引數前面的符號的意思
in:該引數只能作為輸入 (該引數不能做回傳值)
out:該引數只能作為輸出(該引數只能做回傳值)
inout:既能做輸入又能做輸出

二、呼叫
call 存盤程序名(實參串列)
舉例:
呼叫in模式的引數:call sp1(‘值’);
呼叫out模式的引數:set @name; call sp1(@name);select @name;
呼叫inout模式的引數:set @name=; call sp1(@name); select @name;

三、查看
show create procedure 存盤程序名;

四、洗掉
drop procedure 存盤程序名;

10.2、函式

###創建函式

學過的函式:LENGTH、SUBSTR、CONCAT等
語法:

一、創建
CREATE FUNCTION 函式名(引數名 引數型別,...) RETURNS 回傳型別
BEGIN
	函式體

END
注意:函式體中肯定需要有return陳述句

二、呼叫
select 函式名(實參串列);

三、查看
show create function 函式名;

四、洗掉
drop function 函式名;

###函式和存盤程序的區別

		  關鍵字		呼叫語法	    回傳值			  應用場景
函式		FUNCTION	SELECT 函式()	只能是一個		 一般用于查詢結果為一個值并回傳時,當有回傳值而且僅僅一個

存盤程序	PROCEDURE	CALL 存盤程序()	可以有0個或多個	一般用于更新

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/34423.html

標籤:其他

上一篇:MySQL B + Tree索引機制的落地

下一篇:Oracle實戰優化:遞回+分析函式+OLAP函式的應用

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more