MySQL学习笔记(正在学习中ing)

MySQL学习笔记

1、什么是数据库?什么是数据库管理系统?什么是sQL?他们之间的关系是什么?

数据库:
英文单词DataBase,简称DB。按照一定格式存储数据的一些文件的组合。顾名思义:存储数据的仓库,实际上就是一堆文件。这些文件中存储了具有特定格式的数据。
数据库管理系统:
DataBaseManagement,简称DBMS。
数据库管理系统是专门用来管理数据库中数据的,数据库管理系统可以对数据库当中的数据进行增删改查。
常见的数据库管理系统:
MySQL、Oracle、 MS SqlServer、 DB2、 sybase等. .. .
SQL:结构化查询语言
程序员需要学习sQL语句,程序员通过编写SQL语句,然后DBMS负责执行SQL语句,最终来完成数据库中数据的增删改查操作。

​ SQL是一套标准,程序员主要学习的就是sQL语句,这个sQL在mysql中可以使用,
同时在Oracle中也可以使用,在DB2中也可以使用。

三者之间的关系?
DBMS--执行--> SQL --操作--> DB

只会写代码,学好数据库 基本混饭吃!
操作系统,数据结构与算法! 当一 个不错的程序猿!
离散数学,数字电路,体系结构,编译原理。+ 实战经验 高级程序猿优秀的程序猿

1、安装mysql

\1. 下载安装文件 https://dev.mysql.com/downloads/file/?id=494993
img
\2. 解压下载的安装文件 mysql-8.0.20-winx64.zip 到需要存放的位置,如 E:\mysql-8.0.20-winx64;

\3. 在解压后的目录下新建文件夹 data 用于存放数据库的数据文件,并新建 my.ini 配置文件,如下所示
img
\4. my.ini 配置文件中写入如下内容:

[复制代码](javascript:void(0)😉

#代码开始
[Client]
#设置3306端口
port = 3306
[mysqld]
#设置3306端口
port = 3306
#设置mysql的安装目录
basedir=E:\mysql-8.0.20-winx64
#设置mysql数据库的数据的存放目录
datadir=E:\mysql-8.0.20-winx64\data
#允许最大连接数
max_connections=200
#服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8
#代码结束

[复制代码](javascript:void(0)😉

\5. 配置环境变量

\1. 新建系统变量 MYSQL_HOME ,并配置其值为 “E:\mysql-8.0.20-winx64”
  img
\2. 编辑系统变量 Path,将 ;%MYSQL_HOME%\bin 添加到Path变量值的后面(Windows 7),直接新增该变量值

  img
\6. 安装 mysql 服务

mysqld install

\7. 初始化:

mysqld --initialize

\8. 开启服务

net start mysql

\9. 查找初始密码

mysq在5.7版本以上为root用户默认生成了一个临时登录密码,该密码是生成在数据目录下的.err文件里的;在my.ini配置文件里我写的数据目录是:

datadir=D:/db/mysqldata

所以找到文件:
img

代开该文件,找到如下红色圈出内容,即为 root 用户的密码。
img

SELECT * FROM stu

再输入密码

Enter password: ******

进入mysql后更改密码

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

SQLyog 报错2058

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

2、MYSQL基本语句

use school;

使用school数据库

SELECT *   //明确想要获得的列
FROM school.stu  //明确想要查询的表
where stuNum = 1; //删选结果
order by MARK 	//排序

不能改变语句顺序,否着会使SQL语包的语义语法或者结构不正确。

1、选择子句

SELECT 
name,
stuNum,
mark+10 AS 'new mark' //新列命名
//查询名字和学号的一列和进行运算的新一列
SELECT DISTINCT mark //防止列中重复

2、WHERE子句

SELECT *
FROM school.stu
-- WHERE mark > 90 
-- where name = '小红'
 where name != '小红' //选择语句的应用

3、AND,OR,ONT运算符

优先级: ONT > AND > OR

SELECT *
FROM school.stu
where not(stuNum>1 AND mark<95 )
where mark=90 OR 95	//错误用法

or 只能搭配一个判断,判断返回true or false,不能直接和字符串配合使用

4、IN运算符

in同一个系列比较一个属性

SELECT *
FROM school.stu
where stuNum NOT IN ('2','4')

5、between运算符

SELECT *
FROM school.stu
where stuNum between 2 and 4 //从2到4(包含2)

6、LIKE运算符

模糊搜索

SELECT *
FROM school.stu
where mark like '%9%'	//%不限字符
where mark like '_9'	//_表示一个字符

7、REGEXP运算符

SELECT *
FROM school.stu
where mark regexp '9'
  • ^搜索前缀
  • $搜索后缀
  • |多个搜索模式
  • [abc]匹配任意在括号里的单字符
  • [a-c]用-表示一个范围

8、IS NULL运算符

搜索列中null的一项

SELECT *
FROM school.stu
where point is null

9、order by运算符

排序

SELECT *
FROM school.stu
order by mark DESC, `point` 	//desc倒序

10、limit运算符

SELECT *
FROM school.stu
limit 3 	//显示前3数据
limit 2,2	//跳过前2条数据后显示2条数据

3、连接

1、内连接

USE school ;
SELECT id,`name`,date 
FROM customers c //名字后面可以用简称
JOIN stu s
	on c.id = s.stuNum;

2、跨数据库连接

use school;
SELECT *
FROM school.stu s
JOIN dd.customers c //跨数据库连接要加数据库前缀
	on s.stuNum = c.id

3。自连接

use school;
SELECT *
FROM school.stu s
JOIN customers c
	ON s.stuNum =c.manager  

4、多表连接

use school;

SELECT *
FROM customers c
JOIN school.stu s
	ON s.stuNum =c.manager  
JOIN ready r
	ON c.id = r.id

10、JDBC(重点)

10.1、数据库驱动

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

image-20210305110006726

我们的程序会通过数据库驱动,和数据库打交道!

10.2、JDBC

SUN公司为了简化开发人员的(对数据库的统- -) 操作,提供了一一个(ava操作数据库的)规范,俗称JDBC
这些规范的实现由具体的厂商去做~
对于开发人员来说,我们只需要掌握JDBC接口的操作即可

image-20210305105335235

CREATE DATABASE jdbcstudy CHARACTER SET utf8 COLLATE utf8_general_ci;
USE jdbcstudy;
CREATE TABLE users(
id INT PRIMARY KEY,
NAME VARCHAR (40),
PASSWORD VARCHAR(40),
email VARCHAR(60),
birthday DATE
);
INSERT INTO users (id,NAME,PASSWORD,email,bi rthday)
VALUES(1,'zhansan','123456','zs@sina.com','1980-12-04'),
(2,'lisi','123456','lisi@sina.com','1981-12-04'),
(3,'wangwu','123456','wangwu@sina.com','1979-12-04');

10、3链接数据库

package com.luo;

import java.sql.*;

public class JDBC {
    public static void main(String[] args)throws ClassNotFoundException, SQLException {
        //1.加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver"); //mysql 8.0版本后的驱动位置
        //2.用户信息url
        String url = "jdbc:mysql://localhost:3306/school?useUnicode=ture&characterEncoding=utf-8&serverTimezone=GMT&useSSL=false"; //school就是你要打开的数据库名字
        /*
        useUnicode=ture     支持中文
        &characterEncoding=utf-8   选择字符 
        &serverTimezone=GMT  设置区时
        &useSSL=false  兼容高版本mysql
         */
        String username = "root";
        String password = "123456";

        //3.连接成功,数据库对象

        Connection conn = DriverManager.getConnection(url, username, password);
        //4.执行SQL的对象
        Statement statement = conn.createStatement();
        //5.执行SQL 的对象去执行SQL,可能存在结果,查看返回结果
        String sql = "SELECT * FROM stu";

        ResultSet resultSet = statement.executeQuery(sql);

        while (resultSet.next()){
            System.out.println("stuNum="+resultSet.getObject("stuNum"));
            System.out.println("name="+resultSet.getObject("name"));
            System.out.println("gender="+resultSet.getObject("gender"));
            System.out.println("age="+resultSet.getObject("age"));
            System.out.println("mark="+resultSet.getObject("mark"));
        }
        //6.释放连接
        resultSet.close();
        statement.close();
        conn.close();
    }
}

口诀:贾琏欲执事(加连预执释) 引入依赖,加载驱动 连接数据库 创建预编译语句 设置参数,执行sql 关闭连接,释放资源

posted @ 2021-03-16 12:45  洛依尘  阅读(89)  评论(0编辑  收藏  举报