mySQL

本文介绍了MySQL数据库的基本操作,包括创建表、定义数据类型和约束,如主键、唯一性和非空。还涉及了DML语句,如插入、更新和删除记录,以及DDL语句如修改表结构。此外,文章讨论了查询语句的使用,如WHERE、LIKE、ORDERBY和GROUPBY,以及子查询和连接查询。最后,提到了事务处理和事务的隔离级别设置。
摘要由CSDN通过智能技术生成
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






 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值