数据库xjbd

本文详细介绍了MySQL的数据查询语言(DQL)的五个核心部分:更新(update),删除(delete)与结构修改(alert),插入(insert),以及查询(select)技巧,包括指定字段、条件筛选、模糊查询和联表查询。此外,涵盖了MySQL函数、事务的ACID原则与隔离级别,以及索引的分类、全文索引和用户权限管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.1DQL(Date Query LANGUAGE: 数据查询语言,即增删改查)

1.1update

1.2delete(很少用到)

1.3alert(修改表的结构,应在dml中)

1.4insert

1.5select(重要)

1.2指定查询字段

1.3where条件字句

1.4模糊查询运算符

1.5联表查询

1.6排序和分页 

1.7子查询和嵌套查询

2MySQL函数

2.1mysql常用函数

2.2聚合函数  

3事务

3.1事务原则:ACID

3.2事务的隔离级别

4索引

4.1索引的分类

4.2全文索引的基本用法

 4.3索引详细介绍

5用户权限管理




1.1DQL(Date Query LANGUAGE: 数据查询语言,即增删改查)

1.1update

格式:update 表名 set `字符段`= ' 修改的属性',`字符段`= ' 修改的属性' where 条件grade

update grade set `gradename` = ' 挂科' where gradeid = '5'

1.2delete(很少用到)

 delete from 表名 where 条件

delete from student where id = 1
truncate table student

 trvncate和delete相同点:都删除数据表结构

 不同点:trvncate使用后计数器也会重置为0

1.3alert(修改表的结构,应在dml中)

 alert table 旧表名 rename as 新表名

alert table student rename as student1

alert table 表名 change 旧字符段 新字符段 约束条件

alert table student change studentnb studentno int(14)

  alert table 表名 motify 字符段 约束条件

alert table student motify studentno varchar(14)

alert table add 字符段 约束条件

alert table student add sex varchar(2)

1.4insert

        格式insert into 表名 (·字符段·,·字符段·) values (属性值,属性值),()每一个括号代表一行数据

insert into student (studentno,studentname,sex,address) values (1,2,0,1546),(1,25,0,18)

1.5select(重要)

        基本语法:

        1.查询全部:

select * from student--(*代指表中全部信息)

        2.查询表中的特定信息:

select `studentNo` as 学号,`studentName` as 学生姓名 from student--as可以更改表头名

        3函数 conact(a,b):

select contact ('姓名' ,studentName) as 新名字 from student2

1.2指定查询字段

        1.distinct :当一个表中有多个重复的信息,但只需要使用一个时,加入distinct前缀即可去除重复信息:

select distinct `studentno` from result

        2 .用于计算直接修改数据:

 select `gradeid` as 学号, `numbber` + 1 as 修改后的成绩 from result

        3.计算:select  3*100 - 1 as 结果  

1.3where条件字句


  • 运算符语法描述
    and &&a and b a&&ba与b都为真才为真
    or ||a or b a||ba与b 只要一个为真即为真
    not !not a !aa为反则为真
    -- and 和 && 运算符 
    select `studentno` as 学号, `studentresult` as  成绩 from result 
    where studentresult >= 60 && studentresult <=95
    
    select `studentno` as 学号, `studentresult` as 成绩 from result 
    where studentresult >=60 and studentresult <=95 
    
    -- or 和 ||运算符
    select `studentno` as 学号, `studentresult` as 成绩 from result 
    where studentno = 1001 or studentno = 1002
    
    select `studentno` as 学号, `studentresult` as 成绩 from result 
    where studentno = 1001 || studentno = 1002
    -- 模糊查询
    select `studentno` as 学号, `studentresult` as 成绩 from result 
    where studentresult BETWEEN 60 AND 95
    -- 否
    select `studentno` as 学号, `studentresult` as 成绩 from result 
    where studentno != 1002

1.4模糊查询运算符

运算符语法描述
is NULLa is null如果a为空,则为真
is not nullb is not null如果b不为空,则为真
betweenbetween a and b若结果在a和b之间,则为真
likea like bsql匹配,如果a匹配b,则为真
ina in (b,c,d)如果a和b,c,d之中其中一个相等,则为真

sql语言中不能使用 a=null或a != null来判断是非为空

-- in是和()中条件相等的匹配将其输出
select `studentno` as 学号,`studentname` as 姓名,`address` as 地址  from student
where `studentno` in ('1001','1002','1003')

-- like中%代表任意数量的字符(可以为0个) _是必须一个任意字符
-- like不能使用 and 和 or 运算符
-- 找到姓李的学生
select `studentno` as 学号,`studentname` as 姓名,`address` as 地址  from student
where `studentname` like '李%'

-- 找到名字中含有四的同学
select `studentno` as 学号,`studentname` as 姓名,`address` as 地址  from student
where `studentname` like '%四%' 

-- 姓李的两个字的学生
select `studentno` as 学号,`studentname` as 姓名,`address` as 地址  from student
where `studentname` like '李_'
 
-- 姓李的三个字的学生
select `studentno` as 学号,`studentname` as 姓名,`address` as 地址  from student
where `studentname` like '李__'

-- NULL 和 NOT NULLI 判断是否为空
select `studentno` as 学号,`studentname` as 姓名,`address` as 地址  from student
where `studentname` is null
select `studentno` as 学号,`studentname` as 姓名,`address` as 地址  from student
where `studentname` is not null

-- between判断条件在A和B之间
select `studentno` as 学号,`studentname` as 姓名,`address` as 地址  from student
where `studentno` BETWEEN 1000 and 1004

1.5联表查询

进行join时先将a和b笛卡尔积相乘 ,前面表的为左,,后面的表为右

主要联表方式描述
select from a inner join b on [条件]在笛卡尔积中找到满足条件的a和b的交集
select from a inner join b on [条件]在笛卡尔积中找到满足条件的a和b的交集,并且返回a中条件的值
select from a inner join b on [条件]在笛卡尔积中找到满足条件的a和b的交集,并且返回b中条件的值
-- 查询挂科和缺考学生的学年,学号,姓名,学科,以及挂科成绩

select gradename as 学年,st.studentno as 学号,studentname as 姓名, subjectname as 学科, studentresult as 成绩
from result as r
RIGHT JOIN  student as st
ON st.studentno = r.studentno
LEFT JOIN `subject` as sb
on sb.gradeid = st.gradeid
LEFT JOIN grade as gr
on gr.gradeid = st.gradeid
where studentresult BETWEEN 0 and 60 or studentresult IS NULL

1.6排序和分页 

分页 语法:limit 查询起始值,pagesize

SELECT *FROM student
limit 0,2
limit 1,2
//limit 初始值,pagesize 显示从初始值往后pagesize个的数据

排序 语法:order by asc (从小到大),desc(从大到小)

//显示大一年纪高数前三名
select studentname,gradename,subjectname,studentresult
FROM student as st
INNER JOIN grade as g
on st.gradeid = g.gradeid
INNER JOIN result as r
on st.studentno = r.studentno
INNER JOIN `subject` as `subject`
on `subject`.gradeid = st.gradeid
where subjectname = '高等数学-1'
ORDER BY studentresult desc
LIMIT 0,3

1.7子查询和嵌套查询

相当于双重循环,在where()括号中继续查询需要的条件,例子暂无,不想写1mysql函数

2MySQL函数

2.1mysql常用函数

MySQL 函数 | 菜鸟教程

较常用函数:

select rand(),返回一个0到1的随机数

select sign(n),n为正数返回1,负数返回-1

select abs() 返回绝对值

select celing(9.4)向上取整,返回10

select floor(9.4) 向下取整,返回9

...需要时查看即可

2.2聚合函数  

select count() 计数

count(字段名)不会去统计值为NULL的行
count(*)        行的数量
count(1)行的数量

select sum() 求和

select avg() 平均数

select max() 最大值

select min() 最小值

聚合函数配合group by 和having 使用,having来筛选条件,和where作用相同

//判断各个学科的参加人数,最高分,最低分,平均分,
select DISTINCT subjectname as '科目',count(re.subjectno) as '人数',
MAX(studentresult) as '最高分',MIN(studentresult) as '最低分',AVG(studentresult)
FROM student as st
INNER JOIN result as re
on re.studentno = st.studentno
INNER JOIN `subject` as su 
on su.subjectno = re.subjectno
GROUP BY re.subjectno
//判断各个学科的参加人数,最高分,最低分,平均分,平均分大于70
select DISTINCT subjectname as '科目',count(re.subjectno) as '人数',
MAX(studentresult) as '最高分',MIN(studentresult) as '最低分',AVG(studentresult)
FROM student as st
INNER JOIN result as re
on re.studentno = st.studentno
INNER JOIN `subject` as su 
on su.subjectno = re.subjectno
GROUP BY re.subjectno
having AVG(studentresult) > 70

 

3事务

要么都成功,要么都失败


1.sql执行  A给B转账500 A:1000,B:500

2.sql执行  B收到A的转账500 A:500,B:1000

将一组SQL放在一个批次中执行


3.1事务原则:ACID

原子性:事务执行过程中,要么都执行,要么都不执行

隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失

一致性:事务前后数据的完整性必须保持一致


3.2事务的隔离级别

脏读:一个事务读取了另一个事务未提交的数据

不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同

虚读:在一个事务内读取到了别的事务插入的数据,导致前后读取不一致


set auticommit = 0;-- 关闭自动提交
START TRANSACTION;-- 开始事务
UPDATE bank set money = money + 500 WHERE id = 1;
UPDATE bank set money = money - 500 where id = 2;
COMMIT; --提交
ROLLBACK; --回滚,持久化,如果提交之后,回滚则不会变化,否则返回事务之前的数据
set autocommit = 1;

4索引

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。

索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。

4.1索引的分类

  • 主键索引(primary key)
  • 唯一索引(unqiue key)
  • 常规索引(key omdex)
  • 全文索引 (fulltext index)
    -- 显示所有的索引信息
    show index from student;
    -- 增加全文索引索引名(列名)
    alter TABLE student add FULLTEXT index `studentname`(studentname);
    -- EXPLAIN
    EXPLAIN SELECT * FROM student; -- 全文索引
    EXPLAIN SELECT * from student where MATCH(`studentname`) AGAINST ('李');

4.2全文索引的基本用法

-- 增加全文索引索引名(列名)
alter TABLE student add FULLTEXT index `studentname`(studentname);
-- EXPLAIN
EXPLAIN SELECT * FROM student; -- 全文索引
EXPLAIN SELECT * from student where MATCH(`studentname`) AGAINST ('李');

 4.3索引详细介绍

(37条消息) MySQL数据库索引_张花生的博客-优快云博客_数据库索引有哪几种

5用户权限管理

mysql数据库用户及用户权限管理_dayi_123的博客-优快云博客_数据库用户权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值