day:38 总结(一)自我介绍+Linux+MySQL
一、自我介绍
面试官,您好,我叫***
二、Linux和数据库
1. Linux在公司当中应用有哪些场景?
Linux系统有哪些?==》centos6.5,Ubuntu、redhot
1)搭建Linux服务器(搭建测试环境)
2)查看实时日志 ==》tail -f
3)Linux中安装mysql数据库
2. 一分钟说出30个Linux命令?英文单词和分别的中英文意思
ping 查看网络是否通畅
ifconfig 查看ip地址
su 切换用户
pwd 查看当前在哪个路径下
ll 查看目录下的文件和目录(详细显示)
ls 查看目录下的文件和目录(不详细的显示,只显示文件和目录名称)
ls -a 查看目录下的文件和目录(包含隐藏文件)
cd 进入
cd .. 返回上级目录
touch 创建空文件
vim 编辑或创建文件(vim不能创建空文件)
mkdir 创建空目录
mkdir -p a/b/c 创建联级目录
mkdie a b c 创建平级目录
rm -r 删除目录(提示性的删除)
rm -rf 强制删除文件、目录
mv 移动或重命名
cp 复制一个文件
scp 远程拷贝;
具体语法:把根目录下的home目录下的aa.txt文件传到对方服务器的根目录下面》scp /home/aa.txt root@192.168.221.128:/
cat 查看文件所有内容; cat a.log | grep "error"》从a.log文件中过滤含有error关键字
cat a.log | grep -A 5 "error"==》从a.log文件中过滤含有error关键字后5行 》A后5行,B前五行,C上下5行
less 通过上下左右翻页显示文件内容
more 通过百分比的形式显示文件的内容
head a.log 默认查看文件的前10行数据
head -n 20 a.log 查看文件的前20行数据
tail a.log 默认查看文件的后10行数据
tail -n 20 a.log 查看文件的后20行数据
tail -n +20 a.log 从文件的第20行开始查看
例:查看a.log文件第5-10行的数据》head -n 10 a.log | tail -n +5 ==》sed -n "5,10p" a.log
tail -f a.log 查看实时日志
find 查看文件或目录的绝对路径
df 查看磁盘使用情况
df -h 带单位显示磁盘使用情况
top 查看cpu、进程、内存
top -d 5 每隔5秒刷新一次,查看cpu、进程、内存
free 查看运行内存
free -m 以兆为单位显示运行内存
netstat -nltp 查看端口和进程(查看正在被占用的端口)
lsof -i:8080 查看占用8080端口的服务
ps -ef|grep Tomcat 查看Tomcat的服务进程
kill 结束进程
kill -9 强制结束进程
du -sh 查看当前目录的大小
history 查看历史记录
history -C 清楚历史记录
reset 清空屏幕
alias 重命名
unalias 取消重命名
init 0 关机
shutdown now 关机
reboot 重启
打包和解压命令:
tar -cvf 包名.tar 源文件 ==》打包一个tar包
tar -xvf 包名.tar ==》解压一个tar包
tar -zcvf 包名.tar.gz 源文件 ==》打包一个tar.gz包
tar -zxvf 包名.tar.gz ==》解压一个tar.gz包
zip -r 包名.zip 源文件 ==》打包一个zip包(-r可以把目录也打包进去)
unzip 包名.zip ==》解压一个zip包
gzip 源文件 ==》打包一个gz包
gunzip 包名.gz ==》解压一个gz包
总结:
1、前三种既可以对文件打包,也可以对目录打包,gzip只能对文件进行打包,不能对目录进行打包
2、前三种解压后源文件和包名都存在,gzip打包之后源文件不存在只剩下包名,解压之后只剩下源文件包名不存在
用户权限命令三剑客==》chmod、chown、chgrp
chmod ==》修改文件或目录的用户权限(属主u、属组g、其他用户o)
chown ==》修改属主 ==》user ==》u
chgrp ==》修改属组 ==》group ==》g
其他用户 ==》other ==》o
权限:
读 ==》read ==》r ==》4
写 ==》write ==》w ==》2
执行 ==》execute ==》x ==》1
例:
1、给a.log文件的属组加一个写的权限 ==》chmod g+w a.log
2、让属主对a.log文件有读和写的权限,属组没有任何权限,其他用户有执行的权限 ==》chmod 601 a.log
3、把a.log文件的属主修改为root ==》chown root a.log
4、把a.log文件的属组修改为root ==》chgrp root a.log
5、同时把a.log的属主和属组修改为root ==》chown root:root a.log
6、要添加一个dcs1用户到dcs2的组里面去 ==》gpassword -a dcs1 dcs2
7、把dcs1这个用户从dcs2这个组里面移除 ==》gpassword -d dcs1 dcs2
查看所有的属主 ==》cat /etc/passwd
查看所有的属组 ==》cat /etc/group
添加用户 ==》useradd
删除用户 ==》userdel ==》删除不干净
强制删除 ==》userdel -r-f ==》可以删除正在登录的用户
vim有三种模式 ==》编辑模式、命令模式、末行模式
i ==》进入编辑模式
dd ==》删除
u ==》撤销
:set nu ==》显示行号
:set nonu ==》取消显示行号
:wq! ==》强制保存并退出
:q! ==》强制退出
:/error ==》快速查找对应的error关键字
service iptables stop/start/restart 关闭/启动/重启
service network restart 重启网卡
service mysqld start 启动数据库
mysql -u用户名 -p密码 进入数据库
面试题:你在公司中常用到的Linux命令有哪些?
重点命令:
tail -f a.log 查看实时日志
find 查看文件或目录的绝对路径
df 查看磁盘使用情况
df -h 带单位显示磁盘使用情况
top 查看cpu、进程、内存
top -d 5 每隔5秒刷新一次,查看cpu、进程、内存
free 查看运行内存
free -m 以兆为单位显示运行内存
netstat -nltp 查看端口和进程(查看正在被占用的端口)
lsof -i:8080 查看占用8080端口的服务
ps -ef|grep Tomcat 查看Tomcat的服务进程
3. 数据库中的增删改查操作
数据库定义语言==》DDL 》create database、create table、dorp database、drop table、alter table
数据库操作语言》DML 》insert into、delete from、update 表名 set...
数据库查询语言》DQL ==》select * from 表名
切换数据库 》use 数据库名称
查看所有的库》show databases
查看所有的表 ==》shoe tables
查看表结构 ==》desc 表名 (description 描述)
常见的数据类型:
1、字符型:varchar、char
2、数值型:int、bigint、float、decimal、bigdecimal(金融项目使用,增加数字精度,减少资损)
3、日期型:datedatestamp、date_format(日期格式化)
常见的约束类型:
1、主键约束 ==》primary key
2、自增长约束 ==》auto_increment
3、默认值约束 ==》default
4、非空约束 ==》not null
5、唯一约束 ==》unique
6、外键约束 ==》foreign key ==》表与表之间的约束
创建表的语法:
create table 表名(字段 数据类型(字段长度) 约束);
修改表结构:
alter table 表名 rename 》修改表名
alter table 表名 change id sid int(20) primary key;》修改字段名并增加主键约束
alter table 表名 change id sid int(20) primary key auto_increment; ==》修改字段名并增加主键约束和自增长约束;(注意:只有设置了主键约束的字段才可以设置自增长约束)
alter table 表名 change id id int(20); ==》去掉自增长约束,但是去不掉主键约束
alter table 表名 drop primary key; ==》删除主键约束
alter table 表名 add 字段名 数据类型(字段长度) ==》增加字段
alter table 表名 drop 字段名 ==》删除字段
alter table 表名 modify id int(20) after name; ==》把id字段放到name字段的后面
mysql数据库里面的增加:
insert into 表名(字段) values(值);
insert into 表名(字段) values(值1),(值2),(值3);
insert into 表名(字段1,字段2) values(值1,值2),(值1,值2);
insert into 表名 values(值1,值2),(值1,值2) ==》值的数量需求和表中字段的数量一致,不然会报错
mysql数据库里面的删除:
delete from 表名;
delete from 表名 where 条件;==》delete from student where id=5;
drop table 表名;
truncate 表名;
总结一下:
1)delete from只能删除表数据,不会删除表结构
2)drop table既能删除表数据,又能删除表结构
3)truncate 快速删除大量数据
mysql数据库里面的修改:
update 表名 set 修改的内容 where 条件;
例:把student表中英语成绩不合格的数据都修改为60分
update student set english=60 where english<60 or english is null;
mysql数据库里面的查询
select * from 表名; 》查询全表的数据
select id,name,age from 表名;》查询指定的字段
select * from 表名 where 条件;==》带条件的查询
例:
1、查询某表中年龄大于25岁小于30岁的数据 》开区间
select * from 表名 where age>25 and age<30
2、查询某表中年龄在25-30之间的数据(查询某表中年龄大于等于25小于等于30之间的数据)》闭区间
select * from 表名 where age between 25 and 30;
3、查询某表中年龄小于25岁或大于30岁的数据
select * from 表名 where age<25 or age>30;
4、查询某表中姓张的同学的数据
select * from 表名 where name like '张%';
5、查询某表中姓名包含财字的同学的数据
select * from表名 where name like “%财%";
6、查询某表中姓名以财字的同学的数据
select * from表名 where name like “%财";
7、查询某表中前5行的数据
select * from 表名 limit 5; ==》 也可以写成 select * from 表名 limit 0,5; 》0是下标,下标是从0开始的,5是取的行数
8、查询某表中的3-6行的数据
select * from 表名 limit 2,4;
9、查询某表中的7-23行的数据
select * from 表名 limit 6,17;
排序函数》order by ==》desc 降序(descend),asc 升序(ascend)
10、将student表以英语成绩降序排序
select * from student order by english decs;
11、将student表以英语成绩升序排序
select * from student order by english;
select * from student order by english acs;
分组函数 ==》group by
聚合函数:
sum ==》求和
avg ==》平均值
max ==》最大
min ==》最小
count ==》统计
distinct ==》去重
1)先分组再筛选
求出每个班级的英语平均分大于80分的班级
select class,avg(english) from student group by class having avg(english) >80;
select class,avg(english) as a from student group by class having a >80;
2)先筛选再分组
求出每个班级英语成绩大于80分的班级
select class,english from student where english>80 group by class;
求出每个班级性别为男的英文总分和班级
select class,sum(english)from student where age='男' group by class;
3)先筛选再分组再筛选
求出每个班级性别为女的英语平均分大于80分的班级和分数
select class,avg(english) as a from student where age='女' group by class having a>80;
延伸题:求出每个班级中男生的总分数(score)大于200分的班级和总分数,并通过总分数进行降序排序取前3名
select class,sum(score) as s from student where age='男' group by class having s>200 order by s desc limit 3;
分组函数需要注意的地方:
1)group by后面不能接where,只能用having来进行条件筛选
2)where后面可以接group by,表示先筛选再分组
3)group by 只能和聚合函数、还有分组字段一起使用
错误示范:select class,avg(english),name as a from student where age='女' group by class having a>80; ==》select后面不能有name
多表查询:
1、基本连接==》只会取2个表相交集部分的数据
select * from aa,cc where aa.id=cc.sid;
2、左连接==》左连接以左边的表为主,左表中的数据会全部显示出来,右边数据不够的会补null处理
select * from aa left join cc on aa.id=cc.sid;
3、右连接==》右连接以右边的表为主,右表中的数据会全部显示出来,左边数据不够的会补null处理
select * from aa right join cc on aa.id=cc.sid;
4、内连接==》只会取2个表相交集部分的数据
select * from aa inner join cc on aa.id=cc.sid;
5、硬连接==》机械式的追加,拼接的两个表的字段必须为一致的
select * from aa union select * from cc;
6、嵌套in和嵌套= 》in后面可以接多个值,=后面只能是一个值
emp》部门编号dept2、收入、入职时间、年龄
dept==》部门编号dept1、部门名称
例:找出财务部门所有人的年龄
select dept1 from dept where dept_name='财务'; ==》找到财务部门的部门编号
select age from emp where dept2=(select dept1 from dept where dept_name='财务');
select age from emp where dept2 in (select dept1 from dept where dept_name='财务');
7、临时表
例:找出财务部门所有人的年龄
(select * from emp,dept where emp.dept2=dept.dept2) t ==》临时表
select t.age from (select * from emp,dept where emp.dept2=dept.dept2) t where t.dept_name='财务'
三表查询:
(select * from emp,dept where emp.dept2=dept.dept2) t ==》临时表
加一个aa表
select * from aa inner join (select * from emp,dept where emp.dept2=dept.dept2) t on aa.dapt3=t.dept1
4. 数据库中的视图、索引、存储过程
1)视图的作用:视图是为了防止基础表的数据泄露,可以保护数据的隐私安全
2)索引的作用:提高查询速度,索引一般是开发创建
索引的类型有哪些?它们之间的区别?
1)索引的类型:普通索引,主键索引,唯一索引,联合索引
2)创建索引的基本格式:create index on student(name)
普通索引:可以创建多个
主键索引:主键索引和主键具有唯一性的,创建了主键也就创建了主键索引,创建了主键索引也就是创建了主键
唯一索引:创建了唯一索引的表字段对应的值必须是唯一的,不重复的
联合索引:采用的是最左前缀原则 ==》create index on student(name,age,sex)
select * from student where name=; ==》索引生效
select * from student where age=; ==》索引不生效
select * from student where sex=; ==》索引不生效
select * from student where name= and age=; ==》索引生效
select * from student where age= and name=; ==》索引不生效
select * from student where name= and age=*** and sex=***; ==》索引生效
如何查看索引是否生效?》也就是查看sql语句的执行计划
mysql里面:1)desc sql语句;2)explain sql语句;
》输入例里面看type字段》type表示访问表的方式,如果是all全表扫描》没有走索引,索引没有生效;如果是index索引全扫描 ==》走了索引,索引生效
存储过程:
作用:可以很快的批量造测试数据
基本格式:
create procedure test()
begin
写循环、判断逻辑和sql语句
end
call test() ==》调用存储过程
作业:
1、背诵Linux命令
2、复习mysql,重新去做一做之前的单表和多表的题,以及存储过程的那个题
浙公网安备 33010602011771号