Fork me on GitHub

MySQL基本使用

MySQL基本使用

1.安装类型:

​ developer default(开发者默认):安装mysql开发所需的所有产品
​ server only(服务器):只安装mysql服务器产品
​ client only(客户端):只安装没有服务器的mysql客户端产品
​ full(完全):安装所有包含的mysql产品和功能

cd D:\Program\mysql-8.0.30-winx64\bin

查看用户信息
mysqld –initialize –comsole

下载
mysqld –install

开启服务
net start mysql
关闭服务
net stop mysql

修改密码
ALTER USER ‘root‘@’localhost’ IDENTIFIED BY ‘123456’;

登录
mysql -uroot -p

登录
mysql -h localhost -u root -p

查看版本信息
status

–DDL 数据定义语言 定义数据对象

–数据库操作;

1
2
3
4
5
6
7
8
show databases;
create database casedb;
create database [if not exists] casedb;
use casedb;
select database();
drop database casedb;
alter database casedb character set utf-8;

–表操作;

1
2
3
4
5
6
7
show tables;
create table stu;
drop table stu;
drop table if exists emp;
truncate table emp;
desc stu;
show create table stu;

–关键字
–add
–modify change
–drop
–rename …

1
2
3
4
alter table stu add nickname varchar(20) comment '昵称';
alter table stu change nickname username varchar(10) comment '用户名';
alter table stu drop username;
alter table emop rename to employee;

–*******************************************************************************************
–DML 数据操作语言

–关键字
–insert 增
–delete 删
–update 改

1
2
3
4
5
6
7
8
9
10
11
12
13
insert into stu(title,auther,data) values ("t","a","d");
insert into stu values ("t","a","d"...);
insert into stu values ("t","a","d"),("t1","a1","d1");

delete from emp ;
delete from emp where gender = '1';
delete from tableName where tableId=3;
delete from tableName [where clause];

update tableName set title='studrc' where tableId=3;
update emp set name='itheima' where id = 1;
update emp set name='hfh', gender ='2' where id = 1;
update emp set worktime='2008-01-01';

–*******************************************************************************************
–DQL 数据查询语言

– 编写顺序
–select 字段列表
–from 表名列表
–where 条件列表
–group by 分组字段查询
–having 分组后条件列表
–order by 排序字段列表
–limit 分页参数

1
2
3
4
5
6
select 字段列表 from 表名;
select * from emp;
select workadddress from emp;
select distinct workadddress from emp;
select id,name,workno,score,gender,age from emp;

–聚合函数
–count 统计数量
–max 最大值
–min 最小值
–avg 平均数
–sum 求和

1
2
3
4
5
6
7
select count(*) from emp;
select count(idcard) from emp;
select max(age) from emp;
select min(age) from emp;
select avg(age) from emp;
select sum(age) from emp where workaddress = '西安';

–条件查询 where
–> >= < <= = <> !=
–between and
–in()
–like ‘_ _’
–is null
–and && or || not !

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
select 字段列表 from 表名 where 条件;
select * from emp where age = 80;
select * from emp where age < 80;
select * from emp where idcard is null;
select * from emp where idcard is not null;
select * from emp where age != 80;
select * from emp where age <> 80;
select * from emp where age <= 80 && age >= 18;
select * from emp where between 15 and 80;
select * from emp where gender='女' and age = 18;
select * from emp where age = 15 or age = 18 or age = 20;
select * from emp where age in(15,18,20);
select * from emp where name like '_ _';
select * from emp where idcard like '%x';
select * from emp where idcard like '_________________x';
select 字段列表 from 表名 where 条件;

–分组查询 group by
–执行顺序:where>聚合函数> having

1
2
3
4
5
6
select 字段列表 from 表名 where 条件 group by 分组字段 having 分组后过滤条件;
select gender, count(*) from emp group by gender;
select gender, avg(*) from emp group by gender;
select workaddress, count(*) from emp where age<30 group by workaddress having count(*) >= 3;
select workaddress, count(*) address_count from emp where age<30 group by workaddress having address_count >= 3;

–排序查询 order by
–asc 升序
–desc 降序

1
2
3
4
5
6
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
select * from emp order by age asc;
select * from emp order by age desc;
select * from emp order by enterdate desc;
select * from emp order by age asc, enterdate desc ;

–分页查询 limit
–起始索引=(查询页码-1)* 每页的记录数

1
2
3
4
select 字段列表 from 表名 limit 起始索引, 查询记录数;
select * from emp limit 0,10;
select * from emp limit 10;
select * from emp limit 10,10;

–案例

1
2
3
4
5
6
7
select * from emp where gender = '女' and age in (18,19,20);
select * from emp where gender = '女' and (age between 10 and 20) and name like '_ _ _';
select gender, count(*) from emp where age<20 group by gender;
select name, age from emp where age<=20 group by age asc, entrydate desc;
select * from emp where gender = '男' and age between 20 and 40 order by age asc , entrydate asc limit 5;


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
--执行顺序验证
--form
--where
--group by
--select
--order by && having
--limit
select name, age from emp where age >15 order by age asc;
select name, age from emp e where e.age >15 order by age asc;
select e.name, age from emp e where e.age >15 order by age asc;
select e.name ename , age from emp e where e.age >15 order by age asc;
select e.name ename , age from emp e where e.age >15 order by eage asc; (X)
select e.name ename , age eage from emp e where e.age >15 order by eage asc;

--*******************************************************************************************
--DCL 数据控制语言:管理用户&&权限控制

--管理用户
-- 查询用户
-- 创建用户
-- 修改用户密码
-- 删除用户
use mysql;
select * from user;

-- 创建用户 itcast , 只能够在当前主机localhost访问, 密码123456;
create user 'itcast'@'localhost' identified by '123456';

-- 创建用户 heima , 可以在任意主机访问该数据库, 密码123456 ;
create user 'heima'@'%' identified by '123456';
create user '用户名' @ '主机名' identified by '密码'
create user 'itcast' @ 'localhost' identified by '123456'
create user 'itcast' @ '%' identified by '123456'


-- 修改用户 heima 的访问密码为 1234 ;
alter user 'heima'@'%' identified with mysql_native_password by '1234';
alter user '用户名' @ '主机名' identified with mysql_native_password by '新密码'
alter user 'itcast' @ '%' identified with mysql_native_password by '1234'


-- 删除itcast@localhost用户
drop user 'itcast'@'localhost';
drop user '用户名' @ '主机名'
drop user 'itcast' @ 'localhost'


--权限控制
--all,all peivileges 所有权限
--select 查询数据
--insert 插入数据
--update 修改数据
--delete 删除数据
--alter 修改表
--drop 删除数据库/表/视图
--create 创建数据库/表

--查询权限show
--授予权限grant
--撤销权限revoke

-- 查询权限
show grants for 'heima'@'%';
-- 授予权限
grant all on itcast.* to 'heima'@'%';
-- 撤销权限

revoke all on itcast.* from 'heima'@'%';
show grants for '用户名'@'主机名';
grant 权限列表 on 数据库名.表名 to '用户名'@‘主机名’;
grant 权限列表 on *.* to 'itcast'@‘localhost’;
revoke 权限列表 on 数据库名.表名 from '用户名'@‘主机名’;



--*******************************************************************************************
--函数
--字符串函数
--数值函数
--日期函数
--流程函数

--字符串函数
--CONCAT(s1,s2,s3...) 字符串拼接
--LOWER(str) 字符串全部转为小写
--UPPER(str) 字符串全部转为大写
--LPAD(str,n,pad) 左填充 用字符串PAD对str左边进行填充 达到n个字符串长度
--RPAD(str,n,pad) 右填充
--TRIM(str) 去掉字符串头部和尾部的空格
--SUBSTRING(str,start,len) 返回从字符串str从start位置起的len个长度的字符串

select concat ('hello' ,'mysql');
select lower ('HELLP' ,'MYSQL');
select upper ('hello' ,'mysql');
select lpad ('01' ,5'-');
select rpad ('01' ,5,'-');
select trim (' hello mysql ');
select substring ('hello mysql' ,1 , 5 );

update emp set workno = lpad (workno ,5 , '0');

--数值函数
--CELT(x) 向上取整
--FLOOR(x) 向下取整
--MOD(x,y) 返回x/y的模
--RANG() 返回0~1内的随机数
--ROUND(x,y) 求参数x的四舍五入的值,保留y的小数位

select ceil(1.1);
select floor(1.1);
select mod(3,4);
select rand();
select round(2.34555,2);

--生成随机六位验证码
select round(rand()*1000000 , 0);
select lpad(round(rand()*1000000 , 0) ,6 , '0');

--日期函数
--curdate() 返回当前日期
--curtime() 返回当前时间
--now() 返回当前日期和时间
--year(date) 获取指定date的年份
--month(date) 获取指定date的月份
--day(date) 获取指定date的日期
--date_add(date, interval expr type) 返回一个日期/时间值加上一个时间间隔expr后的时间值
--datediff(date1, date2) 返回起始时间date1和结束时间date2之间的天数

select curdate();
select curtime();
select now();

select year(now());
select month(now());
select day(now());

select date_add(now(), interval 70 days);
select date_add(now(), interval 70 month);
select date_add(now(), interval 70 year);

select datediff('2021-12-01', '2021-10-01');

select * from emp;
select name,datediff(curdate(), entryfate ) from emp ;
select name,datediff(curdate(), entryfate )as 'entrydays' from emp order by entrydays desc;

--流程控制
if(value, t, f ); 如果valuetrue,则返回t,否则返回f;
ifnull(value1, value2); 如果value不为空,返回value1,否则返回value2;
case when[val1] then [res1] ...else [default] end; 如果valuetrue,...否则返回default默认值;
case [expr] when [val1] then [res1] ...else [default] end; 如果expr的值等于val1,返回res1,...否则返回default默认值;

select if (false ,'ok', 'err');
select ifnull('ok', 'default');
select ifnull(' ', 'default');
select ifnull (null, 'default');

--case when then else end
select name,(case workadress when '北京' then '上海' then '一线城市' else '二线城市' end) as '工作地址' from emp;

create table score(
id int comment 'ID',
name varchar(20) comment 'NAME'
math int comment 'MATH',
english int comment 'ENGLISH',
chinese int comment 'CHINESE'
) comment 'SCORE';
insert into score (id, name, math, english, chinses) values (1,'Tom' ,79,88,99), (2,'ROSE' ,79,88,99), (3,'JACK' ,79,88,99);

select id,name,
(case when math>=85 then 'great' when math>=60 then 'good' else 'bad' end )'math',
(case when math>=85 then 'great' when math>=60 then 'good' else 'bad' end )'math',
(case when math>=85 then 'great' when math>=60 then 'good' else 'bad' end )'math'
from score;


--*******************************************************************************************



--约束
--not null 非空约束 限制该字段的数据不能为null
--unique 唯一约束 保证该字段的所有数据都是唯一的
--primary key 主键约束 主键是一行数据的唯一的标识符要求非空且唯一
--default 默认约 束 保存数据时如果未指定该字段则采用默认值
--check 检查约束 保存字段值满足某一要求
--foreign key 外键约束 用来让两张表之间建立链接保证数据的一致性和完整性

create table user(
id int primary key auto_increment comment '主键',
name varchar(10) not null unique comment '姓名',
age int check (age>0&&user.age<=120 ) comment '年龄',
status char(1) default '1' comment '状态',
gender char(1) comment '性别'
)comment '用户表';
insert into user (name, age, status, gender) vakues ('jack', 18, '1', '男'),('tom', 20, '0', '男');

--外键约束 foreign key
create tables user(
字段名 数据类型,
...
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 emp drop foreign key fk_emp_dept_id;

--外键约束 删除更新行为
no action 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与 RESTRICT 一致)
restrict 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与 NOACTION 一致)
cascade 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。
set null 当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这就要求该外键允许取null)。
set default 父表有变更时,子表将外键列设置成一个默认的值(Innodb不支持)

cascade
alter table emp add constraint fk_emp_dept_id foreign key(dept_id) references dept(id) on update cascade on delete cascade;
set null
alter table emp add constraint fk_emp_dept_id foreign key(dept_id) references dept(id) on update set null on delete set null;






--**********************************************************************************************
--多表查询
·多表关系
·多表查询概述
·内连接
·外连接
·自连接
·子查询
·多表查询案例


多表关系
概述
项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所
以各个表结构之间也存在着各种联系,基本上分为三种:
>1.—对多(多对一)
>2.多对多
>3. 一对一

1.一对多(多对一)
>案例:部门 与员工的关系
>关系:一个部门对应多个员工,一个员工对应一个部门
>实现:在多的一方建立外键,指向一的一方的主键

2.多对多
案例:学生 与 课程的关系
>关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择
>实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

3.一对一
>案例:用户 与 用户详情的关系
> 关系:一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率
> 实现: 在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)

select * from emp,dept;
select * from emp,dept where emp.dept_id = dept.id;



--多表查询的分类
1.连接查询:
内连接:相当于查询A、B交集部分数据
外连接:
左外连接:查询左表所有数据,以及两张表交集部分数据
右外连接:查询右表所有数据,以及两张表交集部分数据
自连接:当前表与自身的连接查询,自连接必须使用表别名
2.子查询;


--内连接
隐式内连接
select 字段列表 from1,表2 where 条件...(emp.dept_id = dept.id);
select * from emp,dept where emp.dept_id = dept.id;
select emp.name , dept.name from emp,dept where emp.dept_id = dept.id;
select e.name , d.name from emp e,dept d where e.dept_id = d.id;

显式内连接
select 字段列表 from1 inner join2 on 连接条件...;
select * from emp e inner join dept d on e.dept_id = d.id;
select emp.name , dept.name from emp e inner join dept d on e.dept_id = d.id;
--外连接
左外连接 相当于查询左表的全部数据,包括表1和表2交集的数据
select 字段列表 from1 left outer join2 on 连接条件...;
select e.* from emp left outer join dept d on e.dept_id=d.id;
select e.* from emp left join dept d on e.dept_id=d.id;
右外连接 相当于查询右表的全部数据,包括表1和表2交集的数据
select 字段列表 from1 right outer join2 on 连接条件...;
select d.*,e.* from emp e right outer join dept d on e.dept_id=d.id;
select d.*,e.* from emp e right join dept d on e.dept_id=d.id;
=
select d.*,e.* from dept d left outer join emp e on e.dept_id=d.id;

--自连接
不要看成一张表看成两张表
select 字段列表 from1 别名1 join1 别名2 on 条件...;
select a.name , b.name from emp a, emp b where a, managerid = b.id;
select a.name '员工' , b.name '领导' from emp a lef outer join emp b on a.managerid =b.id;

联合查询: union union all 查询字段需一致(列数)
select 字段列表 from1...
union all
select 字段列表 from2...;

查询结果合并
select * from emp where salary < 5000
union all
select * from emp age > 50;

查询结果合并去重
select * from emp where salary < 5000
union
select * from emp age > 50;


--子查询 嵌套查询
概念:SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。
SELECT * FROM t1 WHERE column1=(SELECT column1 FROM t2);

子查询外部的语句可以是INSERT/UPDATE/ DELETE/ SELECT的任何一个。
根据子查询结果不同,分为:
>标量子查询(子查询结果为单个值)
>列子查询(子查询结果为一列
>行子查询(子查询结果为一行)
表子查询(子查询结果为多行多列)
根据子查询位置,分为:WHERE之后、FROM之后、SELECT之后。

>标量子查询(子查询结果为单个值)
子查询结果为单个值,数字,字符串,日期,最简单的形式
常用操作符: = <> > >= < <=
select id from dept where name ='销售部';
select * from emp where dept_id =4;
select * from emp where dept_id =(select id from dept where name ='销售部');

select entrydate from emp where name = 'Aminn';
select * from emp entrydate >'2009-02-10';
select * from emp entrydate >(select entrydate from emp where name = 'Aminn');


>列子查询(子查询结果为一列
常用操作符:IN NOT IN AND SOME ALL

IN 在指定的集合范围之内,多选一
NOT IN 不在指定的集合范围之内
ANY 子查询返回列表中,有任意一个满足即可
SOMEANY等同,使用SOME的地方都可以使用ANY
ALL 子查询返回列表的所有值都必须满足

select id from dept where name ='销售部' or name ='市场部';
select * from emp where dept_id in (2,4);
select * from emp where dept_id in (select id from dept where name ='销售部' or name ='市场部');

select id from dept where name ='销售部';
select salary from emp where dept_id = 3;
select salary from emp where dept_id = (select id from dept where name ='销售部');
select * from emp where salary > all(select salary from emp where dept_id = (select id from dept where name ='销售部'));

select id from dept where name ='销售部';
select salary from emp where dept_id = 3;
select salary from emp where dept_id = (select id from dept where name ='销售部');
select * from emp where salary > any(select salary from emp where dept_id = (select id from dept where name ='销售部'));

>行子查询(子查询结果为一行)
















事务:
事务简介
事务操作
事务四大特性
并发事务问题
事务隔离级别



事务简介
事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作
请求,即这些操作要么同时成功,要么同时失败。

默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。

select * from account where name ='zs';
update account set money = money - 1000 where name ='zs';
update account set money = money + 1000 where name ='ls';

事务操作
查看/设置事务提交方式
SELECT@@autocommit
0:手动提交
1:自动提交
SET@@autocommit=0;
提交事务
COMMIT;
回滚事务
ROLLBACK
select * from account where name ='zs';
update account set money = money - 1000 where name ='zs';
update account set money = money + 1000 where name ='ls';
commit;

开启事务
START TRANSACTION 或BEGIN}
提交事务
COMMIT;
回滚事务
ROLLBACK

start transaction;
select * from account where name ='zs';
update account set money = money - 1000 where name ='zs';
update account set money = money + 1000 where name ='ls';
commit;
rollback;

事务四大特性 ACID
原子性(Atomicity): 事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性(&onsistency): 事务完成时,必须使所有的数据都保持一致状态。
隔离性(Isolation): 数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
持久性(Durability): 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

并发事务问题




事务隔离级别

Vue组件间通信实践

Vue组件间通信实践

在Vue中,组件间的通信是构建复杂应用的关键。本教程将通过几个简单的例子来展示如何在Vue组件之间传递数据和方法。

defineProps和defineEmits的作用

在Vue 3中,definePropsdefineEmits是Composition API的一部分,它们用于在组件中声明props(接收来自父组件的数据)和emits(触发事件传递给父组件)。

defineProps

defineProps用于声明组件接收的props。它允许你定义一个接口,指定哪些属性将作为props传递给组件。这有助于提供类型检查和自动完成功能,使得组件的props使用更加清晰和安全。

1
2
3
4
5
6
7
8
9
10
11
12
13
import { defineProps } from 'vue';

const props = defineProps({
// 定义一个名为 'message' 的 prop,类型为 String
message: String,
// 定义一个名为 'age' 的 prop,类型为 Number,可选,默认值为 18
age: {
type: Number,
default: 18
},
// 定义一个名为 'isStudent' 的 prop,类型为 Boolean
isStudent: Boolean
});

在上面的例子中,props是一个响应式引用,你可以在组件的其他地方使用它来访问这些props。

defineEmits

defineEmits用于声明组件可以触发的事件(emits)。这允许你在组件内部定义可以被父组件监听的事件。与defineProps类似,它也提供了类型检查和自动完成的功能。

1
2
3
4
5
6
7
8
9
import { defineEmits } from 'vue';

const emits = defineEmits({
// 定义一个名为 'update:name' 的事件
// 当这个事件被触发时,它将传递一个名为 'name' 的参数
'update:name': (name: string) => true,
// 定义一个名为 'delete' 的事件,没有参数
'delete': () => true
});

在上面的例子中,emits是一个对象,它描述了组件可以触发的事件。你可以在组件内部使用emits来触发这些事件。

父子组件通信

父组件传递数据和方法给子组件

在父组件中,我们定义了一些数据和方法,并通过props传递给子组件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<template>
<div>
<div @click="props.viewFun">***main组件***</div>
<hello-world
:fuData="fuData"
:fuFunc="fuFunc"
@child-event="receiveCh"
></hello-world>
</div>
</template>

<script setup lang="ts">
import HelloWorld from "@/components/HelloWorld.vue";

// 定义数据和方法
const fuData = "main数据";
const fuFunc = (i: any) => {
console.log("main组件的方法", i);
};

// 子组件触发的事件处理
const receiveCh = () => {
console.log("main组件的方法被调用了");
};

// 使用defineProps定义props
import { defineProps } from "vue";
const props = defineProps(["viewFun"]);
</script>

子组件调用父组件的方法

在子组件中,我们可以通过emit来触发父组件的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<template>
<div @click="chFunc">---hello组件---</div>
<div @click="fuFunc(111)">{{ fuData }}</div>
<div>{{ viewData }}</div>
</template>

<script setup lang="ts">
// 使用defineProps接收父组件传递的数据和方法
import { defineProps } from "vue";
interface Props {
fuData?: String;
fuFunc?: Function | any;
}
defineProps<Props>();

// 使用defineEmits定义子组件触发的事件
import { defineEmits } from "vue";
const emit = defineEmits(["child-event"]);
const chFunc = (data: any) => {
emit("child-event", data);
};

// 使用inject接收父组件通过provide注入的数据
import { inject, Ref, ref } from "vue";
const viewData = inject<Ref<number>>("view", ref(0));
</script>

跨层级组件通信

使用provide/inject

在Vue 3中,我们可以使用provideinject来实现跨层级组件的通信。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<template>
<div>
<div>@@@页面@@@</div>
<main-layout :view-fun="viewFun"></main-layout>
</div>
</template>

<script setup lang="ts">
import MainLayout from "@/components/MainLayout.vue";

// 在父组件中provide数据
import { provide } from "vue";
provide("view", "provide注入数据");

// 在子组件中inject数据
const viewFun = () => {
console.log("页面加载");
};
</script>

CentOS安装配置Nginx

CentOS上安装与配置Nginx

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。以下是在CentOS系统上安装和配置Nginx的步骤。

1. 准备工作

在开始之前,确保你的系统已经更新到最新版本,并且网络连接正常。

1
2
3
4
5
# 检查网络连接
ping www.baidu.com

# 更新系统源
sudo yum update

2. 安装编译环境

Nginx需要编译安装,因此需要先安装编译环境和一些必要的库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装编译工具
sudo yum -y install gcc

# 安装PCRE库
sudo yum -y install pcre pcre-devel

# 安装Zlib库
sudo yum -y install zlib zlib-devel

# 安装OpenSSL库
sudo yum -y install openssl openssl-devel

# 安装wget工具
sudo yum -y install wget

3. 下载与安装Nginx

从Nginx官网下载最新的稳定版本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 下载Nginx安装包
wget http://nginx.org/download/nginx-1.9.9.tar.gz

# 解压安装包
tar -zxvf nginx-1.9.9.tar.gz

# 进入解压后的目录
cd nginx-1.9.9

# 配置Nginx
./configure

# 编译并安装Nginx
make
sudo make install

4. 运行Nginx

安装完成后,Nginx的二进制文件将位于/usr/local/nginx/sbin/目录下。

1
2
3
4
5
# 切换到Nginx安装目录
cd /usr/local/nginx/sbin

# 启动Nginx
sudo ./nginx

5. 检查Nginx运行状态

确认Nginx是否成功运行。

1
2
# 查看Nginx进程
ps -ef | grep nginx

6. 配置Nginx

编辑Nginx的配置文件,通常位于/usr/local/nginx/conf/nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 用户配置
user nobody;

# 工作进程数
worker_processes 1;

# 错误日志和PID文件
error_log logs/error.log;
pid logs/nginx.pid;

# 事件配置
events {
worker_connections 1024;
}

# HTTP服务器配置
http {
include mime.types;
default_type application/octet-stream;

# 日志配置
access_log logs/access.log main;

# 性能优化
sendfile on;
keepalive_timeout 65;

# Gzip压缩
gzip on;

# 虚拟主机配置
server {
listen 80;
server_name localhost;

location / {
root /usr/local/nginx/html;
index index.html index.htm;
}

# 错误页面配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/nginx/html;
}
}
}

7. 重启Nginx

配置完成后,重启Nginx使配置生效。

1
2
3
4
5
# 停止Nginx
sudo /usr/local/nginx/sbin/nginx -s stop

# 启动Nginx
sudo /usr/local/nginx/sbin/nginx

8. 验证安装

在浏览器中输入服务器的IP地址,如果看到Nginx的欢迎页面,说明安装成功。


Vue接入百度地图

vue3接入百度地图的基本步骤及代码实现:

以下是使用vue3接入百度地图的基本步骤及代码实现:

  1. 引入百度地图API

在页面头部引入百度地图API

1
<script src="http://api.map.baidu.com/api?v=3.0&ak=您的密钥"></script>

其中,ak 是您的百度地图 API 密钥。如果您还没有密钥,可以在 这里 进行申请。

  1. 在 vue3 组件中创建地图

mounted 钩子函数中创建地图实例:

1
2
3
4
5
6
7
mounted() {
const map = new BMap.Map("map-container");
//开始初始地图
map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
// 开启鼠标滚轮缩放
map.enableScrollWheelZoom(true);
}

其中,map-container 是在页面中预设的地图容器。

  1. 添加标注

在地图中添加标注,示例代码如下:

1
2
3
4
// 创建标注
const marker = new BMap.Marker(new BMap.Point(116.404, 39.915));
// 添加标注到地图
map.addOverlay(marker);
  1. 获取当前位置

获取当前位置并在地图中进行显示

1
2
3
4
5
6
7
8
9
10
// 定位当前位置
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(r) {
if(this.getStatus() == BMAP_STATUS_SUCCESS){
// 显示当前位置
map.panTo(r.point);
}else {
alert('failed'+this.getStatus());
}
},{enableHighAccuracy: true})

至此,您就可以在您的 vue3 项目中集成百度地图了。

完整代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<template>
<el-card style="height: calc(100vh - 80px);" shadow="hover">
<div id="map-container" style="width: 100%; height: 640px;"></div>
</el-card>
</template>

<script>
export default {
mounted() {
//开始初始地图
// eslint-disable-next-line no-undef
const map = new BMap.Map("map-container");
// 设置中心点和缩放级别
// eslint-disable-next-line no-undef
map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
// 添加控件,如缩放控件
// eslint-disable-next-line no-undef
map.addControl(new BMap.NavigationControl());
// 开启鼠标滚轮缩放
map.enableScrollWheelZoom(true);

// 定位当前位置
// eslint-disable-next-line no-undef
const geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function (r) {
if (this.getStatus() == 0) {
// eslint-disable-next-line no-undef
const point = new BMap.Point(r.point.lng, r.point.lat);
// eslint-disable-next-line no-undef
const marker = new BMap.Marker(point);
map.addOverlay(marker);
map.panTo(point); // 显示当前位置
}
});
},
};
</script>
<style scoped>

</style>



CentOS如何安装Redis

CentOS系统上安装Redis操作教程

Redis(Remote Dictionary Server)是一个开源的,基于内存的高性能键值对(NoSQL)数据库。它支持多种类型的数据结构,如字符串(strings)、列表(lists)、集合(sets)、有序集合(sorted sets)、哈希(hashes)、位图(bitmaps)、超日志(hyperloglogs)和地理空间(geospatial)索引半径查询。Redis因其出色的性能、可扩展性和广泛的功能集而广受欢迎。

前期准备

在开始安装Redis之前,确保你的CentOS系统已经安装了必要的依赖项,并且系统是最新的。这有助于避免在安装过程中遇到不必要的问题。

  1. 更新系统

    1
    sudo yum update
  2. 安装编译工具
    除了gcc,你可能还需要安装maketcl,因为它们是编译Redis的依赖项。

    1
    sudo yum install -y gcc make tcl

下载Redis

  1. 下载Redis
    选择一个稳定的Redis版本进行下载。这里我们以6.2.6版本为例。

    1
    wget https://download.redis.io/releases/redis-6.2.6.tar.gz
  2. 解压下载的压缩包

    1
    tar -zxvf redis-6.2.6.tar.gz
  3. 进入Redis目录

    1
    cd redis-6.2.6/

编译安装Redis

  1. 编译Redis
    在Redis目录中,执行编译命令。这将自动检测系统环境并编译Redis。

    1
    make
  2. 安装Redis
    使用make install命令将Redis安装到指定目录。这里我们选择/usr/local/redis作为安装目录。

    1
    sudo make install PREFIX=/usr/local/redis

配置Redis

  1. 创建Redis配置文件目录

    1
    sudo mkdir /etc/redis
  2. 复制配置文件
    将默认的配置文件复制到/etc/redis目录。

    1
    sudo cp redis.conf /etc/redis/
  3. 编辑配置文件
    使用文本编辑器(如vinano)编辑配置文件,根据需要调整设置。

    1
    sudo vi /etc/redis/redis.conf

    例如,你可以设置bind指令来限制Redis服务的访问,或者调整内存使用策略等。

启动Redis服务

  1. 启动Redis
    使用以下命令启动Redis服务。

    1
    /usr/local/redis/bin/redis-server /etc/redis/redis.conf
    1
    2
    # 查看进程来确定redis是否启动成功,非必须
    ps -ef |grep redis
  2. 设置Redis开机自启
    创建一个systemd服务文件来管理Redis服务。

    1
    sudo vim /etc/systemd/system/redis.service

    在文件中添加以下内容(请根据实际情况修改ExecStart路径):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [Unit]
    Description=Redis In-Memory Data Store
    After=network.target

    [Service]
    User=redis
    Group=redis
    ExecStart=/usr/local/redis/bin/redis-server /etc/redis/redis.conf
    ExecStop=/usr/local/redis/bin/redis-cli shutdown
    PrivateTmp=true

    [Install]
    WantedBy=multi-user.target

    保存并退出编辑器。

  3. 启用Redis服务

    1
    sudo systemctl enable redis.service
  4. 启动Redis服务

    1
    sudo systemctl start redis.service

验证Redis安装

  1. 检查Redis服务状态

    1
    sudo systemctl status redis.service
  2. 测试Redis
    使用Redis命令行客户端测试服务。

    1
    /usr/local/redis/bin/redis-cli

    在客户端中,尝试执行一些基本命令,如setget,来验证Redis是否正常工作。

停止和重启Redis服务

  1. 停止Redis服务

    1
    sudo systemctl stop redis.service
  2. 重启Redis服务

    1
    sudo systemctl restart redis.service

卸载Redis服务

  1. 停止并禁用Redis服务

    1
    2
    sudo systemctl stop redis.service
    sudo systemctl disable redis.service
  2. 删除Redis服务文件

    1
    sudo rm /etc/systemd/system/redis.service
  3. 删除Redis安装目录

    1
    sudo rm -rf /usr/local/redis
  4. 清理Redis配置文件

    1
    sudo rm /etc/redis/redis.conf

在执行上述步骤时,请确保你有足够的权限来执行系统命令。如果你不是root用户,你可能需要在命令前加上sudo来获取必要的权限。此外,建议在进行任何更改之前备份你的系统或相关文件。

  • Copyrights © 2022-2024 何福海
  • 访问人数: | 浏览次数:

请我喝杯奶茶吧~

支付宝
微信