1.初识MySQL

1.初识MySQL

JDBC:Java Database Connectivity

腾讯云镜像源:https://mirrors.cloud.tencent.com

2.安装MySQL

  1. 下载安装包解压

  2. 添加到环境变量:将bin文件夹路径加到path变量中

  3. 编写配置文件my.ini

    [mysqld]
    basedir=D:\tools\mysql-5.7.33-winx64\
    datadir=D:\tools\mysql-5.7.33-winx64\data\
    port=3306
    #跳过密码
    skip-grant-tables
    
  4. 用管理员权限进入到bin目录下,执行 mysqld -install ,安装MySQL

  5. 初始化MySQL,mysqld --initialize-insecure --user=mysql

  6. 启动MySQL,net start mysql,如果提示找不到文件,可能是mysql服务的路径与安装的路径不一致导致,修改注册表中的安装路径即可

  7. 进入MySQL,mysql -u root -p,不用输密码,直接跳过

  8. 修改密码:update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';

  9. 最后输入 flush privileges 刷新权限

  10. 修改配置文件,注释掉跳过密码

3.安装SQLyog

4.命令行操作数据库

如果表名是特殊字符,查询时可以加符号区分

select user from school
select `user` from school --加字符区分特殊字符

5.关于数据库引擎

/*
INNODB 现在默认使用的
MYISAM 早些年使用的
*/
MYISAMINNODB
事务支持不支持支持
数据行锁定不支持支持
外键约束不支持支持
全文索引支持不支持
表空间的大小较小较大(2倍)

6.表的修改与删除

表的修改:关键字 ALTER

表的删除:关键字 DROP

7.数据库的外键

作用:保持数据的一致性

缺点:当表数量过多或外键较多时,数据库性能较差

8.增删改查

添加数据

-- 插入语句(添加)
-- insert into 表名([字段名1,字段名2,字段名3]) values ([值1,值2,值3])
-- 一般写插入语句时,我们一定要一一对应,否则会自动一一匹配导致报错

INSERT INTO `student`(`name`,`pwd`,`sex`) VALUES('张三','AAA','男')

删除数据

-- 删除数据
DELETE FROM `student` WHERE id = 1;

TRUNCATE:删除数据库]\

作用:完全情况一个数据库表,表的结构和约束不会变

TRUNCATE TABLE `student`

delete和 TRUNCATE 的区别

  • 相同点:都能删除数据,但不会删除表结构和约束
  • 不同:
    • TRUNCATE 重新设置自增列,计数器会归零
    • TRUNCATE 不会影响事务

修改数据

-- 修改学员的名字,如果不带where则会修改所以的数据
UPDATE `student` SET `name`='李思思' WHERE `id`=1
-- 修改多个属性,用逗号(英文)隔开
UPDATE `student` SET `name`='李四',`age`=99 WHERE `id` =2

-- 语法
-- UPDATE 表名 SET colnum_name =value,... where 条件

where 语句运算符

操作符含义范围结果
=等于5=6false
<>或!=不等于5<>6true
>
<
<=
>=
BETWEEN…AND …在某个范围内,两头都是闭区间[2,5]
AND
OR

语法:UPDATE 表名 SET colnum_name =value,… where 条件

9.DQL查询数据(最重点)

9.1、DQL

  • 所有的查询操作都用它 Select
  • 简单的查询,复杂的查询都能做
  • 数据库中最核心的语言,最重要的语句
  • 使用频率最高的语句

9.2、查询所有的字段

-- 查询所有的学生
SELECT * FROM student

-- 查询指定字段,字段之间用逗号隔开
SELECT `StudentNo`,`syudentName` FROM studnet

-- 别名,给结果起一个名字 AS  
SELECT `StudentN0` AS 学号,`StudentName` AS 学生姓名 FROM student

-- 函数  Concat(a,b) ,将查询出的结果按函数要求拼接
SELECT CONCAT('姓名:',StudentName) AS 姓名字 FROM student

语法:SELECT 字段... FROM 表名

SELECT 完整语法

-- JOIN
-- WHERE
-- GROUP BY
-- HAVING
-- ORDER BY
-- LIMIT

去重 distinct

作用:去除SELECT查询出来的结果中重复的数据

-- 查询一下有哪些同学参加了考试,会产生重复问题
SELECT `StudentNo` FROM result

-- 用DISTINCT关键字去重
SELECT DISTINCT `StudentNo` FROM result

数据库的列(表达式)

SELECT VERSION()   -- 查询版本
SELECT 100*3-1 AS 计算结果  -- 用来计算
SELECT @@auto_increment_increment   -- 查询自增的步长
-- 学员考试成绩+1分查看
SELECT `StudentNo`,`StudentResult`+1 AS 提分后 FROM result

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

语法:select 表达式 from 表

9.3、where 条件语句

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

逻辑运算符

运算符语法描述
and &&a and b a&&b
or ||a or b a || b
not !=not a != a

模糊查询:比较运算符

运算符语法描述
IS NULL
IS NOT NULL
BETWEEN
LIKEa like bSQL匹配,如果a匹配到b,则结果喂真
INa in (a1,a2,a3)
-- 模糊查询
-- 查询姓刘的同学
-- like结合  %(代表0到任意个字符)   _(代表一个字符)
SELECT `StudentNo`,`StudentName` FROM student WHERE StudentName like '刘%'

-- in (具体的一个或多个值,不能用%等通配符)
-- 查询 1001 1002 1003号学员
SELECT `StudentNo`,`StudentName` FROM student WHERE StudentNo IN (1001,1002,1003)

9.4、联表查询:join

/*  思路
1. 分析需求,分析查询的字段来自哪些表
2. 确定使用哪种查询? 7种
3. 确定交叉点(两个表中哪个数据时相同的)
*/

-- 为避免系统无法确定返回哪个表中的studentNo,用s.studentNo指定返回数据的来源
SELECT s.StudentNo,studentName,SubjectNo,StudentResult
FROM student AS s
INNER JOIN result AS r
on s.studentNo = r.studentNo

-- join (连接的表) on (判断的条件)   连接查询
-- where  等值查询
-- 两者查询的结果一样

-- 三表查询
SELECT s.studentNo,studentName,subjectNo,subjectName
FROM student s
RIGHT JOIN result r
ON s.studentNo = s.studentNo
INNER JOIN subject sub
ON r.subjuectNo = sub.subjectNo

-- 思路--------
-- 我要查询哪些数据   select ...
-- 从哪几个表中查  FROM 表名 别名  xxx JOIN 连接的表名  别名  on  交叉条件  
操作描述
inner join如果表中至少有一个匹配,就返回行
left join会从左表中返回所有的值,即使右表中没有匹配
right join会从右表中返回所有的值,即使左表中没有匹配

自连接

自己的表与自己的表连接,核心:一张表拆成两张一样的表

9.5、分页与排序

-- 排序:升序   ASC  ,  降序  DESC
-- ORDER BY 通过哪个字段排序,怎么排
-- limit a , b  a:起始值   b:页面大小

9.6、子查询

where (值是计算出来的)

本质:在where语句中嵌套一个子查询语句

9.7、MySAQL函数

常用函数

-- 数学运算
SELECT ABS(-8)  -- 取绝对值
SELECT CEILING(9.4)  -- 向上取整
SELECT SIGN(10)   -- 判断一个数的符号

-- 字符串函数
SELECT CHAR_LENGTH('即使再小的反也能远航')   -- 字符串长度
-- 时间与日期函数(记住)
SELECT CURRENT_DATE()  -- 获取当前日期
SELECT CURDATE()
SELECT NOW()

聚合函数

10、事务

10.1、什么是事务?

要么都成功,要么都失败

-- mysql是默认开启事务自动提交的
SET autocommit = 0  -- 关闭
SET autocommit = 1 -- 开启(默认开启)

-- =====手动处理事务====
-- 事务开启
START TRANSACTION  -- 标记一个事务的开始
INSERT XX

-- 提交:持久化
COMMIT
-- 回滚:回到原来的样子
ROLLBACK
-- 事务结束
SET autocommit = 1 -- 开启自动提交

-- 了解
SAVEPOINT 保存点名字  -- 设置一个事务的保存点
ROLLBACK TO SAVEPOINT 保存点名字   -- 回滚到保存点名字
RELEASE SAVEPOINT 保存点名字  -- 删除保存点名字

模拟事务

-- 转账
CREATE DATABASE shop CHARACTER SET utf8 COLLATE utf8_general_ci
USE shop

CREATE TABLE `account` (
`id` INT(3) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(6) NOT NULL,
`money` DECIMAL(9,2) NOT NULL,
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

INSERT INTO `account`(`name`,`money`) VALUES ('A',1000.00),('B',9000.00)

-- 模拟转账:事务
-- 关闭自动提交
SET autocommit = 0
-- 开启一个事务
START TRANSACTION

UPDATE `account` SET `money`=`money`-500 WHERE `name`='A'
UPDATE `account` SET `money`=`money`+500 WHERE `name`='B'

COMMIT  -- 提交事务,数据持久化
ROLLBACK -- 回滚
SET autocommit = 1 -- 回复自动提交

11、索引

MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构

11、1、索引的分类

  • 主键索引:PRIMARY KEY
    • 唯一的标识,主键不可重复,只有一个列作为主键
  • 唯一索引:UNIQUE KEY
    • 避免重复的列出现,唯一索引可以重复,多个列都可以标识为 唯一索引
  • 常规索引:KEY
    • 默认的,INDEX,KEY来设置
  • 全文索引:FullText
-- 索引的使用
-- 1、在创建表的时候给字段增加索引
-- 2、创建完毕后,增加索引

-- 显示所有的索引信息
SHOW INDEX FROM student

-- 增加一个全文索引  (索引名)  列名
ALTER TABLE `student` ADD FULLTEXT INDEX `studentName`(`studentName`)

-- EXPLAIN 分析sql执行的状况
EXPLAIN SELECT * FROM student   -- 非全文索引

11、2、索引的测试

-- 插入100万数据

11、3、索引原则

  • 索引不是越多越好
  • 不要对经常进行变动的数据加索引
  • 小数据量的表不需要加索引
  • 索引一般加在常用来查询的字段上

12、三大范式

第一范式

原子性:保证每一列不可再分

第二范式

前提:满足第一范式

每张表只描述一件事情

第三范式

前提:满足第一范式和第二范式

第三范式需要确保数据表中的每一列数据都与主键直接相关,而不能间接相关

13、JDBC

13.1、数据库驱动

驱动:声卡,显卡,数据库

13.2、第一个JDBC程序

public class FirstJDBCDemo {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // 1.加载驱动
        Class.forName("com.mysql.cj.jdbc.driver");
        // 2.用户信息
        String url = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8&useSSL=true";
        String username = "root";
        String password = "password";
        // 3.连接数据库,获得数据库对象
        Connection connection = DriverManager.getConnection(url, username, password);
        // 4.获得执行SQL的对象
        Statement statement = connection.createStatement();
        // 5.执行SQL,查看结果
        String sql = "SELECT * FROM student";
        ResultSet resultSet = statement.executeQuery(sql);

        while (resultSet.next()){
            System.out.println(resultSet);
        }

        // 6.释放连接
        resultSet.close();
        statement.close();
        connection.close();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值