主頁 > 前端設計 > MySQL之基礎總結部分

MySQL之基礎總結部分

2020-09-14 19:28:57 前端設計

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

一、為什么要學習資料庫

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/qianduan/38164.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)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more