services.msc
https://blog.csdn.net/weixin_37753215/article/details/93778855
创建表
create table 表名称(字段名称 字段类型(长度)约束,字段名 字段类型 约束····);
java数据类型: byte/short/int/long float/double/boolean/char和string
Mysql数据类型:tinyint/smallint/int/bigint float/double/bit/char和varchar
char:代表是固定的长度字符串或字符串
varchar:代表的是可变长度的字符串
约束
约束作用:保证数据的完整性
单表约束分类:
主键约束(primary key) 唯一约束(unique) 非空约束(not null)
建库 create database web_test1;
use web_test1;
建表 create table user(
id int primary key auto_increment,
username varchar(20) unique,
passpord varchar(20) not null,
age int,birthday date,
);
查表 show tables;
查表结构: desc 表名;
删除表: drop table 表名;
修改表
添加列,(alter table 表名 add 列名 类型(长度) 约束; )
修改列类型,长度和约束(alter table 表名 modify 列名 类型(长度) 约束;)
删除列(alter table 表名 drop 列名;)
修改列名称(alter table 表名 change 旧列名 新列名 类型(长度) 约束;)
修改表名(rename table 表名 to 新的表名;)
修改表的字符集(alter table 表名 characher set 字符集)
添加表信息:insert into 表名(列名1,列名2)values(值1,值2)
添加所有的信息: insert into 表名 values(,,1,)
修改表记录信息
update 表名 set 列名=值,列名2=值 where 条件
删除记录
delete from 表名 where条件 ----删除 所有记录,属于DML语句,一条记录一条记录删除,事务可以作用在DML语句上
---truncate table user;属于DDL语句,将表删除,然后重新创建一个结构一样的表,事务不能控制DDL的
查询表信息
select * from 表名 ----- 查询不重复的信息 select distinct 列名 from 表名;
查询/别名命名 select usename,score+english as sum from exam; (as可以省略)
条件查询
使用where子句 1.>,<,>=,<=,<>,= select *from exam where name = '李四' and english>90;
2. like模糊查询,在like子句中可以使用 _ 或者 %作为占位符,只能代表一个字符,而且%可以代表任意个字符
like '李%' select * from exam where ueaname like '李%'
like '_' 名字必须是两个字,而且是姓李的
like '%四' : 名字中以四结尾的
leke '%王%' : 只要名称中包含这个字就可以
3. in范围查询 select * from exam english in(55,100);
4.条件关联:and ,or, not
排序查询 select * from exam order by english; -- 默认升序
(从大到小) select * from exam order by english desc;(降序)
(从小到大) select * from exam order by english asc;(升序)
select * from exam order by english desc,score asc;
按姓查询 select * from exam where usename like '李%' order by english desc;
分组统计查询
聚合函数使用: sum();获取所有学生英语成绩总和;select sum(english) from exam;
获取英语和数学成绩总和: select sum(english),sum(score) from exam;
获取某个人的英语成绩: select sum(english) from exam where usename like '赵%''
获取个人所有的成绩: select sum(score)+sum(english) from exam where usename like '赵%';
select sum(score+english) from exam; select sum(ifnull(scor,0)+english) from exam;
获得学生总数 count(); select count(*) from exam;
获得最高分max() select max(english) from exam;
获得最小值min() select min(english) from exam;
获取平均值avg() select avg(english) from exam;
分组查询 语法:select product,count(*) from orderzqx group by product;
产品的总金额 select product,sum(price) from orderzqx group by product;
where后面不能跟聚合函数,通过having过滤
select product,sum(price)from orderzqx group by product having sum(price)>4000;
select product,sum(price)from orderzqx group by product having sum(price)>4000 order by sum(price) desc;
总结: S(select) .....F(from).....W(where).....G(group by).....H(having ).....O(order by)..
重置mysql密码
1.services.msc ----找到myssql 停止
2.启动(cmd) mysqld --skip-grant-tables
3.重新启动cmd,输入(mysql -u root -p)回车不输入任何密码就能进入
数据库版(不关上一个){use mysql; update user set password = password('abc') where user='root';} 成功
4. 结束mysqld进程 进任务管理器 详细哪>结束mysqld.exe
5.重新启动mysql服务 进命令services.msc 找到mysql 启动 完成
数据库的备份
1.打开cmd mysqldump- u root -p 数据库名字 >D:/
数据库还原
1.创建一个数据库
2.重新打开一个窗口, mysql -u root -p db1 < D:/db1.sql
第二种: 创建数据库 用那个数据库 source D:db1.sql
链接外键 ALTER TABLE employee ADD FOREIGN KEY (dno) REFERENCES dept(did);
连接查询
交叉连接 :查询到的是两个表的笛卡尔积
语法: select * from 表1 cross join 表2
select*from 表 1,表2
内连接: inner join
语法:select*from表 1 inner join 表2 on 关联条件
SELECT * FROM class c INNER JOIN stu s ON c.`cid`= s.`cno`
隐式内连接: select * from 表1,表2 where 关联条件
SELECT * FROM class c,stu s WHERE c.`cid`=s.`cno`;
外连接 outer join (outer 可以省略)
左外连接:
语法:select* from 表1 left outer join 表2 on 关联条件
右外连接:
语法:select* from 表1 right outer join 表2 on 关联条件
SELECT* FROM class c RIGHT OUTER JOIN stu s ON c.`cid`=s.`cno`;
子查询:一个子查询语句条件需要依赖另一个查询语句的结果
带in
SELECT * FROM class WHERE cid IN (SELECT cno FROM stu WHERE birthday>'199-11-11');
带exists
SELECT * FROM class WHERE EXISTS (SELECT cno FROM stu WHERE birthday>'199-11-11');
带any
SELECT *FROM class WHERE cid>ANY(SELECT cno FROM stu )
带all
SELECT * FROM class WHERE cid>ALL(SELECT cno FROM stu)
多表查询练习
查询班级的个数
SELECT c.cname,COUNT(*) FROM class c ,stu s WHERE c.cid=s.cno GROUP BY c.cname;
查询学生平均成绩
SELECT s.`sname`,AVG(sc.score) FROM stu s,stu_course sc WHERE s.`sid`=sc.`sno` GROUP BY s.`sname`;
查询学生的姓名和学生选课总数 选课>2
SELECT s.`sname`,COUNT(*) FROM stu s,stu_course sc WHERE s.`sid`=sc.`sno` GROUP BY s.`sname`HAVING COUNT(*) > 2;
查询平均成绩大于80分的学生总数
SELECT COUNT(*) FROM stu s WHERE s.`sid` IN (SELECT sc.sno FROM stu_course sc GROUP BY sc.`sno` HAVING AVG(sc.`score`)>80);
查询学生和平均成绩,但是平均和层级大于 01班的任何一个学生的平均成绩
SELECT s.`sname`,AVG(sc.score) FROM stu s,stu_course sc WHERE s.`sid`=sc.`sno` GROUP BY s.`sname` HAVING AVG(sc.`score`) > ANY(SELECT AVG(sc.score) FROM stu s,stu_course sc,class c WHERE s.`sid`=sc.`sno` AND c.`cid` =sc.`cno` AND c.`cname`='01班'GROUP BY s.`sname`);
事务 转账案例 (1)环境准备 (2)转账案例 开启事务start transaction; 提交事务commit 回滚rollback
解决这些问题的安全性:
1.read uncommitted 脏读,不可重复读,虚读都有可能发生
2. read committed 避免脏读,但是不可以重复读和恶虚读是有可能的
3.repeatable read 避免脏读和不可重读,但是虚读有可能发生
4.serializable 避免脏读,不可重读 虚读。(最高)
设置事务的隔离级别
set session transaction isolation level 隔离级别
查看当前级别:select @@tx_isolation