mysql

本文详细介绍了MySQL数据库的操作,包括创建与修改数据库表、数据管理(DML)、查询(DQL)及事务处理。强调了DQL的重要性,并探讨了索引、权限管理、备份、数据库设计规范以及JDBC的使用。特别提到了防止SQL注入的安全措施。
摘要由CSDN通过智能技术生成

1— 操作数据库

1.1–创建数据库表(重要)

-- 创建一个数据库的表格
create table if not exists `student`(
 `id` int(4) not null auto_increment comment '学号',
 `name` varchar(30) not null default '匿名' comment'姓名',
 `pwd` varchar(20) not null comment'密码',
 `sex` varchar(2) not null comment '性别',
 `birthday` datetime default null comment '出生日期',
 `address` varchar(100) default null comment '家庭住址',
 `email` varchar(50) default null comment'邮箱',
 primary key(`id`)
)engine=innodb default charset=utf8

show  create database school  -- 查看创建school数据库
show create table student  -- 查看创建student数据表的定义语句
desc student    -- 显示表的结构
image-20210414162356599

1.2–数据表的类型

-- 关于数据库的引擎 
-- INNODB 是默认使用
-- MyISAM 是早些年使用的
MYISAM INNODB
事务支持 不支持 支持
数据行锁定 不支持 支持 行锁定
外键 不支持 支持
全文索引 支持 支持(新版本)
表空间大小 较小 较大,约为2倍
优势 节约空间,速度快 安全性高,支持事务处理,支持外键多表多用户操作

所有的数据库文件都存储在data 文件夹中D:\mysql\mysql-8.0.23\mysql-8.0.23\data

数据库本质还是文件的存储。

MySQL引擎在物理文件上的区别:

  1. —innode 在MySQL8.0版本只有.idb文件
  2. —myisam在MySQL8.0版本有三个文件 .MYD— 数据文件 .MYI—放置索引 .frm --表结构的定义文件
1.3–设置数据库表的字符集编码

1.4–修改删除表

 
ALTER TABLE teacher RENAME AS teacher1  -- 修改表的名称
ALTER TABLE teacher1 ADD age INT(9) -- 给标准增加字段

ALTER TABLE teacher1 MODIFY age VARCHAR(7) -- modify 修改表的字段
ALTER TABLE teacher1 CHANGE age age1 INT(19)  -- change 字段重命名 可以修改表的字段

ALTER TABLE teacher1 DROP age1 -- 删除表的字段
DROP TABLE  IF EXISTS teacher1  -- 删除表

2–MySQL数据管理

2.1 DML 语言

DML= Data Manipulation Language 数据操作语言

包括了增删改查四个部分

  • insert 插入
  • update 更新 改动
  • delete 删除
  • truncate 删除

2.2 insert

-- 插入语言insert
-- INSERT INTO tablename (field1, field2, .…, fieldn)VALUES (value1, value2, ..……, valuen);
INSERT INTO `school` (`name`) VALUES ('李四')
INSERT INTO `school` (`name`) VALUES ('王五'),('赵六') -- 插入一个字段的多个列属性

INSERT INTO `school` (`name`,`sex`) VALUES ('王五','boy'),('赵六','girl') -- 插入不同字段的不同属性

2.3 update


-- 修改学员名称,带了条件
UPDATE `school` SET `name` ='oliver' WHERE id=0015

-- 不指定条件的话 会改动所有表
UPDATE `school` SET `name` ='oliver'

-- 修改多个属性,逗号隔开
UPDATE `school` SET `name` ='oliver',`sex`='boy'WHERE id<0018

where 操作符会返回布尔值

操作符 含义 结果
= 等于
!= 或者<> 不等于
> 大于
< 小于
<= 小于等于
>= 大于等于
BETWEEN…AND… 在某个范围内
…AND… 我和你两者都要满足
…OR… 我或者你其中一个成立就可
UPDATE `school` SET `name` ='elio',`sex`='boy' WHERE id<0018 and id>0015

2.4delete/truncate

-- DELETE FROM tablename [where CONDITION]
DELETE FROM `school` -- 不会影响自增
--可以一次删除多个表的数据
--DELETE t1, t2, ..., tn FROM t1, t2, ..., tn [WHERE CONDITION]

TRUNCATE TABLE `school` -- 自增会归为0

所以一般推荐使用 truncate来进行删除

3-- DQL查询数据(最重点)

DQL=data query language=数据查询语言

DML(Database Manipulation Language)数据库表数据操作语言

关键字:Insert,Delete,Update,Truncate

DDL(Database Definition Language)数据库表结构操作语言

关键字:Create,Alter

DCL(Database Control language)数据库权限控制操作语言

关键字:Grant,Remove

DQL(Database Query Language)

关键字:Select

  • 所以的查询操作都用它
  • 简单复杂的查询它都能做
  • 数据库最核心的语言最重要的语言,使用频率最高的语句
1— 简单查询
-- 查询所有的学生 SELECT 字段(如果为*,表示所有字段) FROM 表名
SELECT * FROM student

--  查询指定字段 
SELECT `StudentNo`,`Phone` FROM student

-- 别名,可以给字段起名字,可以给表起名字
SELECT `StudentNo` AS `学号`,`Phone`  AS `电话` FROM student AS A

-- 函数 concat (a,b)
SELECT CONCAT ('姓名:',StudentName) AS 新名字  FROM student
2–去重

-- distanct 去除select 查询出来的结果中重复的数据,


-- 查询全部的成绩
SELECT * FROM result

-- 查询有哪些学生参加了考试
SELECT `StudentNo` FROM result
--  发现重复数据 去重
SELECT DISTINCT `StudentNo` FROM result

3 数据库的表达式
-- 查看系统版本
SELECT VERSION()

-- 用来计算
SELECT 100-9 AS jisuan --(别名)

-- 查询自增的步长
SELECT @@auto_increment_increment

-- 学员成绩+1分查看
SELECT `StudentNo`,`StudentResult` +1 AS '提分后' FROM result 
-- AS 后跟的始终是新的名字

数据库中 的表达式:文本值,列,null,函数,计算表达式,系统变量…

4–where 条件子句

作用: 检索数据中符合条件的值

返回结果为布尔值

--  逻辑运算符
--  ======================  where ==================

SELECT StudentNo ,`StudentResult` FROM result

-- 查询成绩在95-100之间
SELECT StudentNo ,`StudentResult` FROM result
WHERE StudentResult>=95 AND StudentResult<=100

 --  模糊查询
 SELECT StudentNo ,`StudentResult` FROM result
 WHERE  StudentResult BETWEEN 90 AND 100
 
-- 学生学号不等于1000 的学生 
 SELECT StudentNo ,`StudentResult` FROM result
 WHERE  NOT StudentNo=1000

运算符 语法 描述
and && a and b // a && b 两个为真才为真
or || a or b // a || b 一个为真即为真
not ! not a // !a 取反,真为假,假为真

模糊查询

运算符 语法 描述
IS NULL a is null 如果操作符为null ,则结果为真
IS NOT NULL a is not null 如果操作符不为null ,则结果为真
BETWEEN a between b and c 如a 在b和c之间,则结果为真
Like a Lile b SQL 匹配 如果a 匹配b ,则结果为真
In a in ( b,c,d…) 如果a 在b,huoc,d 里面的某一个值中,结果为真
-- ===========模糊查询========
 
 -- 查询姓什么的同学
 -- like 结合% (代表0到任意个字符) _ (一个字符)
 SELECT StudentNo ,`StudentName` FROM student
 WHERE StudentName LIKE '张%'
 
  -- 查询姓什么的同学 名字后面只有一个字
 -- like 结合% (代表0到任意个字符) _ (一个字符)
 SELECT StudentNo ,`StudentName` FROM student
 WHERE StudentName LIKE '张_'
 
 
  -- 查询姓什么的同学 名字后面只有两个字
 SELECT StudentNo ,`StudentName` FROM student
 WHERE StudentName LIKE '张__'
 
   -- 查询名字中带有嘉
 SELECT StudentNo ,`StudentName` FROM student
 WHERE StudentName LIKE '%强%'
 
 
5 —联表查询JoinON
-- 查询参加了考试的同学(姓名,学号,科目编号,分数)
SELECT * FROM student,result

/*
思路
1. 分析需求,需要查询的字段来自那些表格中,分别找到
2.确定是使用那种连接,left join
inner join    right join 
3.确定交叉点(这两个表中那些数据是相同的)这个是判断的条件
*/
-- inner join
SELECT s.StudentNo,StudentName,SubjectNo,StudentResult
FROM student  s
INNER JOIN result r
ON s.StudentNo=r.StudentNo

-- right join
SELECT s.StudentNo,StudentName,SubjectNo,StudentResult
FROM student  s
RIGHT JOIN result r
ON s.StudentNo=r.StudentNo


-- left join
SELECT s.StudentNo,StudentName,SubjectNo,StudentResult
FROM student  s
INNER JOIN result r
ON s.StudentNo=r.StudentNo

-- 查询姓名和学号没有填写的同学
SELECT s.StudentNo,StudentName,SubjectNo,StudentResult
FROM student  s
RIGHT JOIN result r
ON s.StudentNo=r.StudentNo
WHERE s.studentNo IS NULL

-- where 是等值查询
-- on 是连接查询
image-20210415142501742

思考题


/*
查询参加考试的学生信息:( 学号,学生姓名,科目名,分数)
1。分析需求,分析查询的字段来自哪些表 
2.确定使用哪种连接查询? 7种网上百度
3.确定交叉点(这两个表中哪些数据是相同的)
判断的条件: 学号==学号
*/
SELECT s.StudentNo,StudentName,SubjectName,StudentResult
FROM student  s
RIGHT JOIN result r
ON s.StudentNo=r.StudentNo
INNER JOIN `subject` sub
ON sub.subjectNo=r.subjectNo
6–自连接

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

image-20210415151744925
pid categoryid categoryname
1 2 信息技术
1 3 软件开发
1 5 美术设计
2 8 办公信息
3 6 web开发
3 4 数据库
5 7 ps技术

-- 查询父子信息,把一张表看出两张一模一样的表
SELECT a.`categoryName` AS'父栏目' ,b.`categoryName`AS'子栏目'
FROM `category` AS a,`category`AS b
WHERE a.`categoryid`=b.`pid`

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xwesOru3-1619838334500)(C:\Users\小石小石\AppData\Roaming\Typora\typora-user-images\image-20210415151717964.png)]

7–查询练习
-- 查询学生所属的年纪(学号,姓名,年级名称)
SELECT `StudentNo`,`StudentName`,`GradeName`
FROM student s
INNER JOIN grade g
ON s.`GradeId`=g.`GradeId`



-- 查询考试高等数学-1的同学信息(考试科目,学生姓名,学生成绩)
SELECT `SubjectName`,`StudentName`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值