mysql 数据库
(1)纯命令:怎么启动 windows 找到windows系统 找到命令提示符 以管理员身份运行
1、停止、启动MySQL服务。(我们本身的电脑启动,MySQL服务,就已经启动了)
启动:net start MYSQL80 //可能每个MySQL的名字不一样
停止:net stop MYSQL80
注意:在命令行中输入一个命令加回车后,由谁在做什么事?
OS从环境变量定义包含的目录里面,查找命令对应的文件,再执行这个文件
(2)创建一个远程登录的用户,并且用这个用户远程登录
1、创建远程登录的用户(MySQL中操作)
MySQL> create user 'mytest'@'%' Identified By '123456';
mysql>grant All on *.* To 'mytest'@'%' with grant option;
mysql> flush privileges;
2、远程登录
①找到自己的ip地址:
在dos窗口下,使用ipconfig命令查看
②使用MySQL客户端远程连接数据库
在windows 窗口下: mysql -u mytest -h 别人的IP地址 -p;
3、用户修改指定用户的密码:
mysql>set password for '用户名'@'机器名'
4、删除用户:
drop user '需要删除的用户名'@'localhost';
小结:
show tables; //查看这个数据库的表
desc 表名; //查看表结构
(3)数据库数据类型:
decimal(m,d); m:表示长度 d:表示小数的个数
char(3) 定长字符串:当只放一个3进去,那么输出为:3__ 后面两个自动为添加空格
varchar(3) 可变字符串:放一个3 那么输出也只有:3
(4)约束:用来保证保存在数据库中的数据的完整性。
1、数据类型:not null/null Defalut check 主键, 外键,自增。
2、实体完整性:(行)
规则:
每条记录,都有相同数量的字段。
在表中,不允许存在2条或以上,完全一样的行。
primary key auto_increment unique(唯一)
检查(check) 引用
(1)给名字添加唯一标识
alter table Student_jxc add unique(StuName_jxc)
//在表中的字段后面添加
unique 约束名(自己起的) (需要添加唯一标识的字段名)
(2)取消某一个字段的的唯一标识
alter table Student_jxc drop indenx StuName_jxc;
(3)添加check
alter table Student_jxc add check (StuAge_jxc between 1 and 150 );
(4)在实际项目中,会将多个字段,合在一起,形成一个主键。(联合主键/组合主键)
一个表中不允许出现多个字段
(5)一般添加默认的是在表中添加
StuSex_jxc char(2) default '男'
(5)添加外键: foreign key
表与表之间的关系有:
1对1: 主表的主键必须是唯一的不需要改变; 子表中的每条数据对应主表中的一个:在子表中的外键加上唯一约束:nuique
1对多:主表中的一条记录对应子表中的多条记录:主表中的主键是唯一的,子表的外键不需要加任何约束:可以实现一对多
多对1: 主表中的多条记录对应子表的多条记录:这种是不可能的:因为主键是唯一的:
多对多: 创建一个中间表作为子表,引用两个主表的主键。
(6)表结构的修改:
修改表名:alter table 表名 rename 新表名;
修改字段:alter table 表名 change 原字段名 新字段名 数据类型[属性]
添加字段:alter table 表名 add 字段名 数据类型[属性]
删除字段:alter table 表名 drop 字段名;
删除约束名:alter table 表名 约束类型 约束名
给stusys_exam里面的exm_stu_id添加一外键约束(stusys_stu_info->stu_info_id)
alter table stusys_exam
add constranint FK_exm_stu_id foreign key (exm_stu_id)
references stusys_stu_info (stu_info_id);
(7):删除约束:
delect from 表名; //删除这个表中的所有数据;
1、实现从表中删除的数据之后,添加的数据从1开始,
truncate table 表名; //让自增列重置 什么时候用:上线之前测试删除所有的数据
删除主表数据的时候,需要取消外键数据引用。
(8):查询数据
1、#查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
select * from score where cno='3-105' and degree>(select degree from score where sno='109'and cno='3-105');
2、select * from test LIMIT 1 OFFSET 2;(在mysql 5以后支持这种写法)
当 limit和offset组合使用的时候,limit后面只能有一个参数,表示要取的的数量,offset表示要跳过的数量 。
查询入员工入职时间排名倒数第三的员工所有信息
select * from employees order by hire_date desc limt 0,3;
limt n,m; n表示从第几位开始,m 表示需要查询几个数;
3、多表连接查询:
多表连接查询思路:
--确定好需求目标
--数据源
--条件
--分组处理‘
--分组后的过滤
--最后结果排序需求
(1)相等关联:
查询学生的姓名,课程,成绩的信息
sselect student.Sname,score.cno,score.degree from student,score where student.sno = score.sno;
1、相等内关联:
特点:将两个或多个表直接有关系的数据组合起来,没有共同数据的数据舍弃掉。
语法:A表 inner join B表 on A.字段=B.字段
2、外关联
(1)左外连接
先保留左边的数据,用左边的数据同右边的数据关联,左边存在右边不存在的情况,右边用null代替
A表 left join B表 on A.字段=B.字段
(2)笛卡尔乘积
select * from student cross join class_info order by Sname;
使用 cross join 实现 不需要条件直接进行连接
数据库经典例题:
#3、 列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称。
select ename,sal,dname from dept,emp
where dept.deptno= emp.deptno and sal>all (select sal from emp where deptno=30);
这个题:两张表的数据先把表连接起来,然后在添加条件
#统计出每个年级的最高分
select gradeNmae,max(studentResult) from grade,student,result
where grade.gradeId=student.gradeld and student.studentNO=result.studentNO
group by gradeNmae;
#用内关联实现alter
select gradeNmae,max(studentResult) from
grade inner join student on grade.gradeId=student.gradeld
inner join result on student.studentNO=result.studentNO
#用左外关联实现alter
group by gradeNmae;
select gradeNmae,max(studentResult) from
grade left join student on grade.gradeId=student.gradeld
left join result on student.studentNO=result.studentNO
group by gradeNmae;
三、视图:视图中的数据是来自真实表中的数据
作用:不使用视图的话,没次查询多表连接查询的时候都需要关联表与表之间的关系
当有视图的时候,视图中已经把表与表之间的关系连接起来了,
我们查询数据的时候使用视图进行查询的时候就不需要进行表与表之间的关联
例题:#统计出每个年级的男生最高分和女生最高分
#不使用视图进行查询
select gradeNmae,sec,max(studentResult) from grade,student,result
where grade.gradeId=student.gradeld and student.studentNO=result.studentNO
group by sec,gradeNmae;
#创建一个视图alter
create view V_gr_stu_result
as
select grade.*,student.*,result.studentResult from grade,student,result
where grade.gradeId=student.gradeld and student.studentNO=result.studentNO;
#有了视图之后就可以直接查询
select gradeNmae,sec,max(studentResult) from V_gr_stu_result group by sec,gradeNmae;
四、数据库中的常见函数
1、字符串连接:concat(str1,str2,...strn); select concat(studentName,':',sex); //输出的是一个字符串 蒋星灿 :男
2、字符串替换:insert(str,pos,len,newstr); select
3、将英文转为小写 lower('fjdks');
4、将字符转成大写 upper('fdsfs');
select now(); 获取当前的日期和时间
select curtime(); 获取当前的时间
select curDate(); 获取当前的日期;
select year(now()); //只获取挡年份
select month(now()); 只获取当前的月份
select day(now()); 只获取当前的天数
select hour(curtime()); //获取当前的小时
select minute(curtime()); 获取当前的分钟
select addDate(now(),30); //获取当前的日期时间加上30 天
select addDate(now(),-30); //获取当前的日期时间-30天
select datediff('2020-01-01','2080-01-01'); //计算两个日期时间的间隔天数
select rand();
select rand()*100000;
select floor(rand()*100000);
select floor(rand()*100000) mod 5;
select (floor(rand()*10000) mod 5)+3;
五、临时表:
当一条SQL语句中包含的3层或三层以上的子查询时那么这个数据库的性能就会出现层次下降;
这时候可以使用临时表,然后在表的基础上进行查询
#基于临时表查询成绩及格的学生的姓名,学号,科目,成绩
#第一步:创建临时表:保存所有学生的姓名,学号,科目,成绩alter
#第二步在表的基础上查询所有分数大于90分以上的同学;alter
create temporary table stu_linshi
(select name,score.sno,cno,degree from tb_person,score where tb_person.sno = score.sno);
select * from stu_linshi where degree>93;
六、事务:
事务(transacction) 是作为逻辑工作单元执行的一系列操作多个操作作为一个整体
向系统提交,要么都执行,要么都不执行,事务是一个不可分割的工作逻辑单元。
事务的特性(ACID)
原子性,一致性,隔离性,持久性;
begin;
n条SQL语句
commit;
rollback;
事务隔离级别:
未提交读,提交读,可重复读,串行
七、数据库的备份:
mysqldump -u root -p <数据库名> [数据库表命名,多个表名中用空格隔开] > 路径名 路径最后需要一个sql文件
导出:mysqldump -u root -p test_ceshi >D:\java2\daochu\one.sql 这是导出整个数据库
恢复/导入:
mysql -u root -p <数据库名称> < 导入的原文件的目录和名称
八:索引:
增加查询速度:反过来会影响到数据库的增删改的速度;
本质原理:通过不断缩小想要获取数据的范围来筛选出想要的结果,同时把随机的事件,
变成一个顺序事件,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据。
索引的分类:
1、普通索引 index :加速查找。
2、唯一索引:
主键索引:primary key :加速查找+约束就(不为空且唯一)
唯一索引:unique:加速查找+约束(唯一)
(1)普通索引:
//在student 表的studentName,sex 创建一个ind_student 的索引
create index ind_studnet on student(studentName,sex);
//当创建了一个索引之后,下面第条查询语句的速度比第二条查询语句块
//索引只会影响查询速度,不会对SQL语句有什么影响。
select * from student where studentName ='张三' and sex='女';
select * from student where sex='女' and studentName ='张三' ;
DML :增加 修改 删除
数据定义:DDL:create alter drop
DCl:grant im
DQL:数据查询
开启关闭防火墙:systemctl start/stop/restart firewalld.service
systemctl start/stop/restart firewalld.service
软件测试基础MySQL语句
最新推荐文章于 2025-02-06 13:18:48 发布