mysql基礎快速入門

通用語法及分類

  • DDL: 數據定義語言,用來定義數據庫對象(數據庫、表、字段)
  • DML: 數據操作語言,用來對數據庫表中的數據進行增刪改
  • DQL: 數據查詢語言,用來查詢數據庫中表的記錄
  • DCL: 數據控制語言,用來創建數據庫用戶、控制數據庫的控制權限

DDL(數據定義語言)

數據定義語言

數據庫操作

查詢所有數據庫:
SHOW DATABASES;
查詢當前數據庫:
SELECT DATABASE();
創建數據庫:
CREATE DATABASE [ IF NOT EXISTS ] 數據庫名 [ DEFAULT CHARSET 字符集] [COLLATE 排序規則 ];
刪除數據庫:
DROP DATABASE [ IF EXISTS ] 數據庫名;
使用數據庫:
USE 數據庫名;

注意事項
  • UTF8字符集長度為3字節,有些符號占4字節,所以推薦用utf8mb4字符集
表操作

查詢當前數據庫所有表:
SHOW TABLES;
查詢表結構:
DESC 表名;
查詢指定表的建表語句:
SHOW CREATE TABLE 表名;

創建表:

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

最后一個字段后面沒有逗號

添加字段:
ALTER TABLE 表名 ADD 字段名 類型(長度) [COMMENT 注釋] [約束];
例:ALTER TABLE emp ADD nickname varchar(20) COMMENT '昵稱';

修改數據類型:
ALTER TABLE 表名 MODIFY 字段名 新數據類型(長度);
修改字段名和字段類型:
ALTER TABLE 表名 CHANGE 舊字段名 新字段名 類型(長度) [COMMENT 注釋] [約束];
例:將emp表的nickname字段修改為username,類型為varchar(30)
ALTER TABLE emp CHANGE nickname username varchar(30) COMMENT '昵稱';

刪除字段:
ALTER TABLE 表名 DROP 字段名;

修改表名:
ALTER TABLE 表名 RENAME TO 新表名

刪除表:
DROP TABLE [IF EXISTS] 表名;
刪除表,并重新創建該表:
TRUNCATE TABLE 表名;

DML(數據操作語言)

添加數據

指定字段:
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
全部字段:
INSERT INTO 表名 VALUES (值1, 值2, ...);

批量添加數據:
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);

注意事項
  • 字符串和日期類型數據應該包含在引號中
  • 插入的數據大小應該在字段的規定范圍內
更新和刪除數據

修改數據:
UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [ WHERE 條件 ];
例:
UPDATE emp SET name = 'Jack' WHERE id = 1;

刪除數據:
DELETE FROM 表名 [ WHERE 條件 ];

DQL(數據查詢語言)

語法:

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

查詢多個字段:
SELECT 字段1, 字段2, 字段3, ... FROM 表名;
SELECT * FROM 表名;

設置別名:
SELECT 字段1 [ AS 別名1 ], 字段2 [ AS 別名2 ], 字段3 [ AS 別名3 ], ... FROM 表名;
SELECT 字段1 [ 別名1 ], 字段2 [ 別名2 ], 字段3 [ 別名3 ], ... FROM 表名;

去除重復記錄:
SELECT DISTINCT 字段列表 FROM 表名;

轉義:
SELECT * FROM 表名 WHERE name LIKE '/_張三' ESCAPE '/'
/ 之后的_不作為通配符

條件查詢

語法:
SELECT 字段列表 FROM 表名 WHERE 條件列表;

條件:

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

例子:

-- 年齡等于30
select * from employee where age = 30;
-- 年齡小于30
select * from employee where age < 30;
-- 小于等于
select * from employee where age <= 30;
-- 沒有身份證
select * from employee where idcard is null or idcard = '';
-- 有身份證
select * from employee where idcard;
select * from employee where idcard is not null;
-- 不等于
select * from employee where age != 30;
-- 年齡在20到30之間
select * from employee where age between 20 and 30;
select * from employee where age >= 20 and age <= 30;
-- 下面語句不報錯,但查不到任何信息
select * from employee where age between 30 and 20;
-- 性別為女且年齡小于30
select * from employee where age < 30 and gender = '女';
-- 年齡等于25或30或35
select * from employee where age = 25 or age = 30 or age = 35;
select * from employee where age in (25, 30, 35);
-- 姓名為兩個字
select * from employee where name like '__';
-- 身份證最后為X
select * from employee where idcard like '%X';
聚合查詢(聚合函數)

常見聚合函數:

函數功能
count統計數量
max最大值
min最小值
avg平均值
sum求和

語法:
SELECT 聚合函數(字段列表) FROM 表名;
例:
SELECT count(id) from employee where workaddress = "廣東省";

分組查詢

語法:
SELECT 字段列表 FROM 表名 [ WHERE 條件 ] GROUP BY 分組字段名 [ HAVING 分組后的過濾條件 ];

where 和 having 的區別:

  • 執行時機不同:where是分組之前進行過濾,不滿足where條件不參與分組;having是分組后對結果進行過濾。
  • 判斷條件不同:where不能對聚合函數進行判斷,而having可以。

例子:

-- 根據性別分組,統計男性和女性數量(只顯示分組數量,不顯示哪個是男哪個是女)
select count(*) from employee group by gender;
-- 根據性別分組,統計男性和女性數量
select gender, count(*) from employee group by gender;
-- 根據性別分組,統計男性和女性的平均年齡
select gender, avg(age) from employee group by gender;
-- 年齡小于45,并根據工作地址分組
select workaddress, count(*) from employee where age < 45 group by workaddress;
-- 年齡小于45,并根據工作地址分組,獲取員工數量大于等于3的工作地址
select workaddress, count(*) address_count from employee where age < 45 group by workaddress having address_count >= 3;
注意事項
  • 執行順序:where > 聚合函數 > having
  • 分組之后,查詢的字段一般為聚合函數和分組字段,查詢其他字段無任何意義
排序查詢

語法:
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;

排序方式:

  • ASC: 升序(默認)
  • DESC: 降序

例子:

-- 根據年齡升序排序
SELECT * FROM employee ORDER BY age ASC;
SELECT * FROM employee ORDER BY age;
-- 兩字段排序,根據年齡升序排序,入職時間降序排序
SELECT * FROM employee ORDER BY age ASC, entrydate DESC;
注意事項

如果是多字段排序,當第一個字段值相同時,才會根據第二個字段進行排序

分頁查詢

語法:
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查詢記錄數;

例子:

-- 查詢第一頁數據,展示10條
SELECT * FROM employee LIMIT 0, 10;
-- 查詢第二頁
SELECT * FROM employee LIMIT 10, 10;
注意事項
  • 起始索引從0開始,起始索引 = (查詢頁碼 - 1) * 每頁顯示記錄數
  • 分頁查詢是數據庫的方言,不同數據庫有不同實現,MySQL是LIMIT
  • 如果查詢的是第一頁數據,起始索引可以省略,直接簡寫 LIMIT 10
DQL執行順序

FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT

DCL

管理用戶

查詢用戶:

USE mysql;
SELECT * FROM user;

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

修改用戶密碼:
ALTER USER '用戶名'@'主機名' IDENTIFIED WITH mysql_native_password BY '新密碼';

刪除用戶:
DROP USER '用戶名'@'主機名';

例子:

-- 創建用戶test,只能在當前主機localhost訪問
create user 'test'@'localhost' identified by '123456';
-- 創建用戶test,能在任意主機訪問
create user 'test'@'%' identified by '123456';
create user 'test' identified by '123456';
-- 修改密碼
alter user 'test'@'localhost' identified with mysql_native_password by '1234';
-- 刪除用戶
drop user 'test'@'localhost';
注意事項
  • 主機名可以使用 % 通配
權限控制

常用權限:

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

更多權限請看權限一覽表

查詢權限:
SHOW GRANTS FOR '用戶名'@'主機名';

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

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

注意事項
  • 多個權限用逗號分隔
  • 授權時,數據庫名和表名可以用 * 進行通配,代表所有

函數

  • 字符串函數
  • 數值函數
  • 日期函數
  • 流程函數

字符串函數

常用函數:

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

使用示例:

-- 拼接
SELECT CONCAT('Hello', 'World');
-- 小寫
SELECT LOWER('Hello');
-- 大寫
SELECT UPPER('Hello');
-- 左填充
SELECT LPAD('01', 5, '-');
-- 右填充
SELECT RPAD('01', 5, '-');
-- 去除空格
SELECT TRIM(' Hello World ');
-- 切片(起始索引為1)
SELECT SUBSTRING('Hello World', 1, 5);

數值函數

常見函數:

函數功能
CEIL(x)向上取整
FLOOR(x)向下取整
MOD(x, y)返回x/y的模
RAND()返回0~1內的隨機數
ROUND(x, y)求參數x的四舍五入值,保留y位小數

日期函數

常用函數:

函數功能
CURDATE()返回當前日期
CURTIME()返回當前時間
NOW()返回當前日期和時間
YEAR(date)獲取指定date的年份
MONTH(date)獲取指定date的月份
DAY(date)獲取指定date的日期
DATE_ADD(date, INTERVAL expr type)返回一個日期/時間值加上一個時間間隔expr后的時間值
DATEDIFF(date1, date2)返回起始時間date1和結束時間date2之間的天數

例子:

-- DATE_ADD
SELECT DATE_ADD(NOW(), INTERVAL 70 YEAR);

流程函數

常用函數:

函數功能
IF(value, t, f)如果value為true,則返回t,否則返回f
IFNULL(value1, value2)如果value1不為空,返回value1,否則返回value2
CASE WHEN [ val1 ] THEN [ res1 ] … ELSE [ default ] END如果val1為true,返回res1,… 否則返回default默認值
CASE [ expr ] WHEN [ val1 ] THEN [ res1 ] … ELSE [ default ] END如果expr的值等于val1,返回res1,… 否則返回default默認值

例子:

selectname,(case when age > 30 then '中年' else '青年' end)
from employee;
selectname,(case workaddress when '北京市' then '一線城市' when '上海市' then '一線城市' else '二線城市' end) as '工作地址'
from employee;

約束

分類:

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

約束是作用于表中字段上的,可以再創建表/修改表的時候添加約束。

常用約束

約束條件關鍵字
主鍵PRIMARY KEY
自動增長AUTO_INCREMENT
不為空NOT NULL
唯一UNIQUE
邏輯條件CHECK
默認值DEFAULT

例子:

create table user(id int primary key auto_increment,name varchar(10) not null unique,age int check(age > 0 and age < 120),status char(1) default '1',gender char(1)
);

外鍵約束

添加外鍵:

CREATE TABLE 表名(字段名 字段類型,...[CONSTRAINT] [外鍵名稱] FOREIGN KEY(外鍵字段名) REFERENCES 主表(主表列名)
);
ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段名) REFERENCES 主表(主表列名);-- 例子
alter table emp add constraint fk_emp_dept_id foreign key(dept_id) references dept(id);

刪除外鍵:
ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名;

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

更改刪除/更新行為:
ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段) REFERENCES 主表名(主表字段名) ON UPDATE 行為 ON DELETE 行為;

多表查詢

多表關系

  • 一對多(多對一)
  • 多對多
  • 一對一
一對多

案例:部門與員工
關系:一個部門對應多個員工,一個員工對應一個部門
實現:在多的一方建立外鍵,指向一的一方的主鍵

多對多

案例:學生與課程
關系:一個學生可以選多門課程,一門課程也可以供多個學生選修
實現:建立第三張中間表,中間表至少包含兩個外鍵,分別關聯兩方主鍵

一對一

案例:用戶與用戶詳情
關系:一對一關系,多用于單表拆分,將一張表的基礎字段放在一張表中,其他詳情字段放在另一張表中,以提升操作效率
實現:在任意一方加入外鍵,關聯另外一方的主鍵,并且設置外鍵為唯一的(UNIQUE)

查詢

合并查詢(笛卡爾積,會展示所有組合結果):
select * from employee, dept;

笛卡爾積:兩個集合A集合和B集合的所有組合情況(在多表查詢時,需要消除無效的笛卡爾積)

消除無效笛卡爾積:
select * from employee, dept where employee.dept = dept.id;

內連接查詢

內連接查詢的是兩張表交集的部分

隱式內連接:
SELECT 字段列表 FROM 表1, 表2 WHERE 條件 ...;

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

顯式性能比隱式高

例子:

-- 查詢員工姓名,及關聯的部門的名稱
-- 隱式
select e.name, d.name from employee as e, dept as d where e.dept = d.id;
-- 顯式
select e.name, d.name from employee as e inner join dept as d on e.dept = d.id;

外連接查詢

左外連接:
查詢左表所有數據,以及兩張表交集部分數據
SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 條件 ...;
相當于查詢表1的所有數據,包含表1和表2交集部分數據

右外連接:
查詢右表所有數據,以及兩張表交集部分數據
SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 條件 ...;

例子:

-- 左
select e.*, d.name from employee as e left outer join dept as d on e.dept = d.id;
select d.name, e.* from dept d left outer join emp e on e.dept = d.id;  -- 這條語句與下面的語句效果一樣
-- 右
select d.name, e.* from employee as e right outer join dept as d on e.dept = d.id;

左連接可以查詢到沒有dept的employee,右連接可以查詢到沒有employee的dept

自連接查詢

當前表與自身的連接查詢,自連接必須使用表別名

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

自連接查詢,可以是內連接查詢,也可以是外連接查詢

例子:

-- 查詢員工及其所屬領導的名字
select a.name, b.name from employee a, employee b where a.manager = b.id;
-- 沒有領導的也查詢出來
select a.name, b.name from employee a left join employee b on a.manager = b.id;

聯合查詢 union, union all

把多次查詢的結果合并,形成一個新的查詢集

語法:

SELECT 字段列表 FROM 表A ...
UNION [ALL]
SELECT 字段列表 FROM 表B ...
注意事項
  • UNION ALL 會有重復結果,UNION 不會
  • 聯合查詢比使用or效率高,不會使索引失效

子查詢

SQL語句中嵌套SELECT語句,稱謂嵌套查詢,又稱子查詢。
SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2);
子查詢外部的語句可以是 INSERT / UPDATE / DELETE / SELECT 的任何一個

根據子查詢結果可以分為:

  • 標量子查詢(子查詢結果為單個值)
  • 列子查詢(子查詢結果為一列)
  • 行子查詢(子查詢結果為一行)
  • 表子查詢(子查詢結果為多行多列)

根據子查詢位置可分為:

  • WHERE 之后
  • FROM 之后
  • SELECT 之后
標量子查詢

子查詢返回的結果是單個值(數字、字符串、日期等)。
常用操作符:- < > > >= < <=

例子:

-- 查詢銷售部所有員工
select id from dept where name = '銷售部';
-- 根據銷售部部門ID,查詢員工信息
select * from employee where dept = 4;
-- 合并(子查詢)
select * from employee where dept = (select id from dept where name = '銷售部');-- 查詢xxx入職之后的員工信息
select * from employee where entrydate > (select entrydate from employee where name = 'xxx');
列子查詢

返回的結果是一列(可以是多行)。

常用操作符:

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

例子:

-- 查詢銷售部和市場部的所有員工信息
select * from employee where dept in (select id from dept where name = '銷售部' or name = '市場部');
-- 查詢比財務部所有人工資都高的員工信息
select * from employee where salary > all(select salary from employee where dept = (select id from dept where name = '財務部'));
-- 查詢比研發部任意一人工資高的員工信息
select * from employee where salary > any (select salary from employee where dept = (select id from dept where name = '研發部'));
行子查詢

返回的結果是一行(可以是多列)。
常用操作符:=, <, >, IN, NOT IN

例子:

-- 查詢與xxx的薪資及直屬領導相同的員工信息
select * from employee where (salary, manager) = (12500, 1);
select * from employee where (salary, manager) = (select salary, manager from employee where name = 'xxx');
表子查詢

返回的結果是多行多列
常用操作符:IN

例子:

-- 查詢與xxx1,xxx2的職位和薪資相同的員工
select * from employee where (job, salary) in (select job, salary from employee where name = 'xxx1' or name = 'xxx2');
-- 查詢入職日期是2006-01-01之后的員工,及其部門信息
select e.*, d.* from (select * from employee where entrydate > '2006-01-01') as e left join dept as d on e.dept = d.id;

事務

事務是一組操作的集合,事務會把所有操作作為一個整體一起向系統提交或撤銷操作請求,即這些操作要么同時成功,要么同時失敗。

基本操作:

-- 1. 查詢張三賬戶余額
select * from account where name = '張三';
-- 2. 將張三賬戶余額-1000
update account set money = money - 1000 where name = '張三';
-- 此語句出錯后張三錢減少但是李四錢沒有增加
模擬sql語句錯誤
-- 3. 將李四賬戶余額+1000
update account set money = money + 1000 where name = '李四';-- 查看事務提交方式
SELECT @@AUTOCOMMIT;
-- 設置事務提交方式,1為自動提交,0為手動提交,該設置只對當前會話有效
SET @@AUTOCOMMIT = 0;
-- 提交事務
COMMIT;
-- 回滾事務
ROLLBACK;-- 設置手動提交后上面代碼改為:
select * from account where name = '張三';
update account set money = money - 1000 where name = '張三';
update account set money = money + 1000 where name = '李四';
commit;

操作方式二:

開啟事務:
START TRANSACTION 或 BEGIN TRANSACTION;
提交事務:
COMMIT;
回滾事務:
ROLLBACK;

操作實例:

start transaction;
select * from account where name = '張三';
update account set money = money - 1000 where name = '張三';
update account set money = money + 1000 where name = '李四';
commit;

四大特性ACID

  • 原子性(Atomicity):事務是不可分割的最小操作但愿,要么全部成功,要么全部失敗
  • 一致性(Consistency):事務完成時,必須使所有數據都保持一致狀態
  • 隔離性(Isolation):數據庫系統提供的隔離機制,保證事務在不受外部并發操作影響的獨立環境下運行
  • 持久性(Durability):事務一旦提交或回滾,它對數據庫中的數據的改變就是永久的

并發事務

問題描述
臟讀一個事務讀到另一個事務還沒提交的數據
不可重復讀一個事務先后讀取同一條記錄,但兩次讀取的數據不同
幻讀一個事務按照條件查詢數據時,沒有對應的數據行,但是再插入數據時,又發現這行數據已經存在

這三個問題的詳細演示:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=55cd

并發事務隔離級別:

隔離級別臟讀不可重復讀幻讀
Read uncommitted
Read committed×
Repeatable Read(默認)××
Serializable×××
  • √表示在當前隔離級別下該問題會出現
  • Serializable 性能最低;Read uncommitted 性能最高,數據安全性最差

查看事務隔離級別:
SELECT @@TRANSACTION_ISOLATION;
設置事務隔離級別:
SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE };
SESSION 是會話級別,表示只針對當前會話有效,GLOBAL 表示對所有會話有效

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

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

相關文章

Python文件讀寫在“簡易記事本”項目中的應用

Python文件讀寫在“簡易記事本”項目中的應用 文件讀寫是“簡易記事本”項目實現數據持久化的關鍵部分。在本節中&#xff0c;我們將逐步拆解記事本的功能&#xff0c;詳細講解與文件讀寫相關的代碼&#xff0c;并結合實際操作幫助讀者更好地理解文件操作的核心知識點。 功能…

【Agent】AutoGen Studio2.0開源框架-UI層環境安裝+詳細操作教程(從0到1帶跑通智能體AutoGen Studio)

&#x1f4a5; 歡迎來到我的博客&#xff01;很高興能在這里與您相遇&#xff01; 首頁&#xff1a;GPT-千鑫 – 熱愛AI、熱愛Python的天選打工人&#xff0c;活到老學到老&#xff01;&#xff01;&#xff01;導航 - 人工智能系列&#xff1a;包含 OpenAI API Key教程, 50個…

三層交換機配置

一&#xff0c;三層交換 概念&#xff1a;三層交換技術就是&#xff1a;二層交換技術三層轉發技術(路由器功能)。它解決了局域網中網段劃分之后&#xff0c;網段中子網必須依賴路由器進行管理的局面&#xff0c;解決了傳統路由器低速&#xff0c;復雜所造成的網絡瓶頸問題。 …

js單例模式

單例模式是一種常見的設計模式&#xff0c;在JavaScript中也有廣泛應用&#xff0c;以下是關于它的詳細介紹&#xff1a; 定義 單例模式是一種創建型設計模式&#xff0c;它確保一個類只有一個實例&#xff0c;并提供一個全局訪問點來訪問該實例。在JavaScript中&#xff0c;…

【Golang 面試題】每日 3 題(六)

?個人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;專欄地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;專欄簡介&#xff1a;在這個專欄中&#xff0c;我將會分享 Golang 面試中常見的面試題給大家~ ??如果有收獲的話&#xff0c;歡迎點贊&#x1f44d;收藏…

SQL Server數據庫多主模式解決方案

SQL Server 本身并不直接支持多主模式(Multi-Master Replication),即多個數據庫實例可以同時進行寫操作,并且這些更改會自動同步到其他實例。不過,SQL Server 提供了多種高可用性和復制解決方案,可以實現類似多主模式的功能。以下是幾種常見的方法: 1. Always On 可用性…

連鎖餐飲行業數據可視化分析方案

引言 隨著連鎖餐飲行業的迅速發展&#xff0c;市場競爭日益激烈。企業需要更加精準地把握運營狀況、消費者需求和市場趨勢&#xff0c;以制定科學合理的決策&#xff0c;提升競爭力和盈利能力。可視化數據分析可以幫助連鎖餐飲企業整合多源數據&#xff0c;通過直觀、動態的可…

Zookeeper JavaAPI操作(Curator API常用操作)

構建項目 zk版本&#xff1a;3.5.7&#xff0c;引入4.0.0的curator版本&#xff0c;Curator依賴的版本只能比zookeeper依賴的版本高。 Curator簡單介紹 Curator是Netflix公司開源的一套zookeeper客戶端框架&#xff0c;解決了很多Zookeeper客戶端非常底層的細節開發工作&…

可搜索的下拉選擇框:filterable屬性詳解

在前端開發中&#xff0c;下拉選擇框&#xff08;Dropdown Select&#xff09;是一個常見的UI組件&#xff0c;它允許用戶從一組預定義的選項中選擇一個或多個值。然而&#xff0c;當選項數量較多時&#xff0c;手動查找特定的選項可能會變得繁瑣。為了解決這個問題&#xff0c…

精選9個自動化任務的Python腳本精選

大家好&#xff0c;我是老鄧&#xff0c;今天我們來一起學習如何用Python進行一些常見的自動化操作&#xff0c;涉及文件處理、網絡交互等實用技巧。即使你沒有任何Python基礎也沒關系&#xff0c;我會用最通俗易懂的語言來講解。 1. 對目錄中的文件進行排序 import osdef so…

滑動窗口 + 算法復習

維護一個滿足條件的窗口大小&#xff0c;然后進行雙指針移動 1.最長子串 題目鏈接&#xff1a;1.最長子串 - 藍橋云課 #include<bits/stdc.h> #define int long long using namespace std; string s; int k; signed main() {int max_len0,left0;cin>>s>>k;…

PDF書籍《手寫調用鏈監控APM系統-Java版》第9章 插件與鏈路的結合:Mysql插件實現

本人閱讀了 Skywalking 的大部分核心代碼&#xff0c;也了解了相關的文獻&#xff0c;對此深有感悟&#xff0c;特此借助巨人的思想自己手動用JAVA語言實現了一個 “調用鏈監控APM” 系統。本書采用邊講解實現原理邊編寫代碼的方式&#xff0c;看本書時一定要跟著敲代碼。 作者…

關于Vue的子組件改變父組件傳來的值

一、組件直接傳值 大家都知道父子組件傳值的方案&#xff0c;有以下幾個&#xff0c;不再詳細敖述 Props&#xff1a;父組件向子組件傳遞數據 $emit&#xff1a;子組件通過自定義事件向父組件傳遞數據 .sync修飾符&#xff1a;一個方便且強大的工具&#xff0c;可以簡化父子組…

Flink的Watermark水位線詳解

一、Flink的時間語義 Flink有如下三種時間語義&#xff1a; Flink的三種時間語義-CSDN博客 在實際應用中&#xff0c;一般會采用事件時間語義。而正如前面所說的&#xff0c;事件時間語義需要等窗口的數據全部到齊了&#xff0c;才能進行窗口計算。那么&#xff0c;什么時候數…

ES學習Promise對象(九)

這里寫目錄標題 一、概念二、示例基本使用使用 Promise 對象封裝Ajaxthen() 方法catch() 方法 一、概念 簡單說就是一個容器&#xff0c;里面保存著某個未來才會結束的事件&#xff08;通常是一個異步操作&#xff09;的結果。Promise 是一個對象&#xff0c;Promise 提供統一…

Kibana:LINUX_X86_64 和 DEB_X86_64兩種可選下載方式的區別

最近需要在vm&#xff08;操作系統是 Ubuntu 22.04.4 LTS&#xff0c;代號 Jammy。這是一個基于 x86_64 架構的 Linux 發行版&#xff09;上安裝一個7.17.8版本的Kibana&#xff0c;并且不采用docker方式。 在下載的時候發現有以下兩個選項&#xff0c;分別是 LINUX_X86_64 和 …

CMake 構建項目并整理頭文件和庫文件

本文將介紹如何使用 CMake 構建項目、編譯生成庫文件&#xff0c;并將頭文件和庫文件整理到統一的目錄中以便在其他項目中使用。 1. 項目結構 假設我們正在構建一個名為 rttr 的開源庫&#xff0c;初始的項目結構如下&#xff1a; D:\WorkCode\Demo\rttr-master\|- src\ …

【FAQ】HarmonyOS SDK 閉源開放能力 — Vision Kit(2)

1.問題描述&#xff1a; 人臉活體檢測返回上一頁App由沉浸式變為非沉浸式多了上下安全區域。 解決方案&#xff1a; 檢測結束后需要自己去設置沉浸式配置。 2.問題描述&#xff1a; Vision Kit文字識別是本地識別&#xff0c;還是上傳至服務器&#xff0c;由服務器來識別文…

AIA - IMSIC之二(附IMSIC處理流程圖)

本文屬于《 RISC-V指令集基礎系列教程》之一,歡迎查看其它文章。 1 ???????通過IMSIC接收外部中斷的CSR 軟件通過《AIA - 新增的CSR》描述的CSR來訪問IMSIC。 machine level 的 CSR 與 IMSIC 的 machine level interrupt file 可相互互動;而 supervisor level 的 CSR…

Vue單頁應用的配置

前面通過幾篇文章了解并掌握了 Vue 項目構建及運行的前期工作 。接下來我們可以走進 Vue 項目的內部&#xff0c;一探其內部配置的基本構成。 1. 路由配置 由于 Vue 這類型的框架都是以一個或多個單頁構成&#xff0c;在單頁內部跳轉并不會重新渲染 HTML 文件&#xff0c;其路…