MYSQL操作

一丶基本命令:

创建数据库:create  database 库名 charset utf8; 		

create database if not exists 库名 charset utf8;    如果数据库中没有这个库才会执行成功

查看所有数据库: show databases;

删除数据库: drop database 库名;   drop database if exists 库名;  如果数据库有这个库才会删除;

选择进入数据库:  use 库名 ;

查看表结构:desc 表名;

查看表: show  tables;

删除表:drop table if exists 表名;

创建stu表:   use db1;

create stu(

id  int,

name varchar(50),

gender  varchar(10),

birthday  date,

score double
)

二丶DML语言:数据操作语言

语法:

insert into 表名 【(字段名1,字段名2,字段名3)】value("值1","值2","值3");

insert into  `student` (student_id,student_name) value (1,"张三");   在学生表中插入一条学生id为1,名字为张三的数据

UPDATE 表名 set colnum_name=value,[colnum_name=value...] where [条件];

UPDATE `student` SET name = "学生1" where id=1;    		修改id为1的姓名为"学生1"
UPDATE `student` SET name = "长江7号"    					 修改所有的名字为长江7号

删除 DELETE 语法:DELETE FROM 表名 WHERE [条件]

DELETE FROM `student` where id=1;   删除学生表中id为1的的数据。

TRUNCATE 命令    完全清空一个数据库,表的结构和索引约束不会变。

TRUNCATE `student`

 

相同点:都能删除数据,都不会删除表结构。

不同点:

-------- TRUNCATE 重新设置 自增列 计数器都会归零

-------- DELETE 不会影响事务

查询 SELECT 语法: SELECT 字段1,字段2... FROM 表名;

--查询全部学生
SELECT * FROM `student`;

--查询指定字段
SELECT `studentno` ,`studentname` FROM `student`;

--别名   给结果起一个名字AS   可以给字段器别名,也可以给表起别名
SELECT `studentno` AS 学号,	`studentname` AS 学生姓名 FROM `student`

--函数  CONCAT(a,b)
SELECT CONCAT("姓名: ",`studentname`) as 新名字 FROM `student`;

去重 DISTINCT     去除SELECT查询出来的结果中重复的数据,重复的只显示一条

SELECT * FROM `result`;      --查询全部的考试成绩

SELECT `studentno` FROM `result`;  --查询有那些同学参加了考试
--发现重复数据,去重
SELECT DISTINCT `studentno` FROM `result`;

模糊查询:比较运算符

--------------------模糊查询 ------------------------
--=====LIKE 结合	%(代表0到任意的字符)   _(表示一个字符)========--
--查询姓刘的同学--
SELECT `studentno`,`studentname` FROM `student` WHERE `studentname` LIKE "刘%";
--查询姓刘的同学,名字后边只有一个字--
SELECT `studentno`,`studentname` FROM `student` WHERE `studentname` LIKE "刘_";
--查询姓刘的同学,名字后边有2个字--
SELECT `studentno`,`studentname` FROM `student` WHERE `studentname` LIKE "刘__";
--查询名字中间有"伟"的同学,  "%伟%"--
SELECT `studentno`,`studentname` FROM `student` WHERE `studentname` LIKE "%伟%";

-- =========================in(具体的一个或者多个值)===============================---
--查询 1001,1002,1003号学生--
SELECT `studentno`,`studentname` FROM `student` WHERE `studentno` in (1000,1001,1002);
--查询在广州的学生--
SELECT `studentno`,`studentname` FROM `student` WHERE `address` in ("广州");
--查询在广州,深圳,天津的学生--
SELECT `studentno`,`studentname` FROM `student` WHERE `address` in ("广州","深圳","天津");

--=========================NULL,not NULL================================--
--查询地址为空的学生--
SELECT `studentno`,`studentname` FROM `student` WHERE `address`="" or `address` is NULL;
--查询有出生日期的学生   不为空--
SELECT `studentno`,`studentname` FROM `student` WHERE `borndate` is not null;

--查询有出生日期的学生   不为空--
SELECT `studentno`,`studentname` FROM `student` WHERE `borndate` is not null;
--查询没有出生日期的学生   为空--
SELECT `studentno`,`studentname` FROM `student` WHERE `borndate` is  null;

联表查询 join 对比

--==================================联表查询====================================--
--查询参加了考试的同学(学号,姓名,科目编号,分数)
SELECT * FROM student;
SELECT * FROM result;

/*  思路
	1.分析需求,分析查询的字段来自那些表,(链接查询)
	2.确定使用那种链接查询。(7种)
	确定交叉点(2个表中哪个数据是相同的)
	判断条件: 学生表中studentno = 成绩表中的 studentno
*/

-- join(连接的表) on (判断的条件)链接查询  
-- where 等值查询

-- inner join ---
-- 如果表中至少有一个匹配,就返回行 --

SELECT s.studentno,studentname,studentresult,subjectno
FROM student as s
INNER	 JOIN result as r 
on s.studentno = r.studentno;

-- right join --
-- 会从右表中返回所有的值,即使左表中没有匹配 --
SELECT s.studentno,studentname,studentresult,subjectno
FROM student s
RIGHT JOIN result r
on s.studentno = r.studentno

-- left join --
-- 会从左表中返回所有的值,即使右表中没有匹配 --
SELECT s.studentno,studentname,studentresult,subjectno
FROM student s
LEFT JOIN result r
on s.studentno = r.studentno;

--查询缺考的同学--
SELECT s.studentno,studentname,studentresult,subjectno
FROM student s
LEFT JOIN result r
on s.studentno = r.studentno
WHERE studentresult is NULL;

-- 	思考题(查询了参加了考试的同学的信息:学号,学生姓名,科目名,分数)
/* 	思路:
	1.确定需求,分析查询的字段来自那些表,student,result,subject(连接查询)
	2.确定使用那种链接查询。(7种)
	确定交叉点(3个表中哪个数据是相同的)
	判断条件:学生表中的studentno=成绩表中的 studentno 成绩表中的 subjectno=subject表中的 subjectno
*/

SELECT s.studentno,studentname,subjectname,studentresult
FROM student s
LEFT JOIN result r
on s.studentno = r.studentno
LEFT JOIN subject sub
on r.subjectno = sub.subjectno;

-- 我要查那些数据  select ...
-- 要从那几个表中查 from 表 XXX join  连接的表 on 交叉条件
-- 假设存在一种多张表查询,慢慢来,先查询2张表然后在慢慢加

-- FROM a LEFT JOIN  b
-- FROM a RIGHT JOIN  b

自连接:自己的表和自己的表连接,一张表拆为两张一样的表即可

 

-- =============================自连接================================ --
SELECT f.categoryname as "父栏目",z.categoryname as "子栏目"
FROM category f ,category z
WHERE f.categoryid = z.pid



-- 查询学员所属的年级(学号,学生姓名,年级名称) --
SELECT studentno,studentname,gradename
FROM student s,grade g
WHERE s.gradeid = g.gradeid

SELECT studentno,studentname,gradename
FROM student s
INNER JOIN grade g
on s.gradeid = g.gradeid

-- 查询科目所属的年级 (科目名称,科目年级)--
SELECT subjectname,gradename
FROM subject s,grade g
WHERE s.gradeid = g.gradeid

SELECT subjectname,gradename
FROM grade g
INNER JOIN subject s
on s.gradeid = g.gradeid


-- 查询参加了 C语言 - 1 考试学生的信息(学号,学生姓名,科目名,分数) --
SELECT s.studentno,studentname,subjectname,studentresult
FROM student s
INNER JOIN result r
on s.studentno = r.studentno
INNER JOIN subject sub
on r.subjectno = sub.subjectno
WHERE subjectname="C语言 - 1"


SELECT s.studentno,studentname,subjectname,studentresult
FROM student s,result r,subject sub
WHERE	s.studentno = r.studentno and r.subjectno = sub.subjectno and subjectname="C语言 - 1"

SQL执行顺序

select distinct 
        <select_list>
from
    <left_table><join_type>
join <right_table> on <join_condition>
where
    <where_condition>
group by
    <group_by_list>
having
    <having_condition>
order by
    <order_by_condition>
limit <limit number>
1、from <left_table><join_type>
2、on <join_condition>
3、<join_type> join <right_table>
4、where <where_condition>
5、group by <group_by_list>
6、having <having_condition>
7、select
8、distinct <select_list>
9、order by <order_by_condition>
10、limit <limit_number>

事务

1什么是事务:

事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为ACID(原子性、一致性、隔离性和持久性)属性。

4.2 事务管理(ACID)

原子性(Atomicity)(要么都成功,要么都失败) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

一致性(Consistency)(事务前后的数据完整性保持一致) 事务前后数据的完整性必须保持一致。

隔离性(Isolation)(每个事务执行时互不影响) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

事务的隔离级别

1 脏读:

指一个事务读取了另外一个事务未提交的数据。

2不可重复读:

在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对)。

3虚读(幻读):

是指在一个事务内读取到了别的事务插入的数据,导致前后读取数量总量不一致。 (一般是行影响,如下图所示:多了一行)。

四种隔离级别设置


set transaction isolation level 设置事务隔离级别 select @@tx_isolation 查询当前事务隔离级

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值