mysql(1)

1.1 为什么学数据库

  • 数据库是所有软件中核心中的核心

 

1.2什么是数据库?

概念:数据仓库,软件,安装在操作系统(windows,linux,mac...)之上。SQL,可以有规律的存储大量数据;

作用:存储数据,管理数据

 

1.3 DBMS

关系型数据库:(SQL) - MySQL, Oracle,sqlServer,DB2,SQLlite - 通过表和表之间,行和列之间的关系今夕数据的存储,学员信息表,考勤表。。。

 

非关系型数据库:(NoSQL ) Not Only

  • Redis,MongDB

  • 非关系型数据库,对象存储,通过对象的自身属性来决定

 

DBMS(数据库管理系统)

  • 数据库的管理软件,科学有效的管理数据。维护和获取数据

  • MySQL 数据库管理系统(操作系统本身已有数据库,MySQL在更上一层,然后外面的应用通过连接MySQL去操作数据库)

 

1.4.下载安装

安装建议

1.尽量不要使用exe,会影响注册表,卸载麻烦;

教程 https://blog.csdn.net/qq_43238201/article/details/130519333

用压缩包安装;0

安装包下载地址:https://dev.mysql.com/downloads/file/?id=521744

2.加入环境变量

我的电脑右键>属性>高级>环境变量

mysql 安装位置bin目录加入path的环境变量;

3.在bin目录同级 创建my.ini文件

4.在my.ini文件中写入:

[mysqld]
​
basedir=D:\Java\mysql-5.7.44\
datadir=D:\Java\mysql-5.7.44\data 这个后续会自动生成data文件夹
port = 3306
skip-grant-table 跳过密码验证,但是5.7的时候貌似无法识别,会报错;如果不加这一行,初始化会随机生成密码,后续需要改密码

5.以管理员身份运行cmd命令

1. mysqld --install

2. mysqld --initialize-insecure --user=mysql 安装data目录

3.net start mysql 启动mysql ;

6.登录

mysql -uroot -p 执行命令后再输入之前存的密码

 

7.修改密码(初始化后不修改密码就执行mysql命令会报错)

ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘新密码’ 密码是wanyi

 

2.操作数据库

mysql关键字不区分大小写

1.创建库

2.删除库

 

数据库存储引擎 myisam和innodb的区别

 MYISAMINNODB
事务支持 不支持 支持
数据行级锁定 不支持 支持
外键约束 不支持 支持
全文索引 支持 不支持
表空间大小 较小 较大(2倍左右)

常规使用操作:

  • MYISAM 节约空间,速度较快

  • INNODB 安全性高,事务的处理,多表多用户操作

 

修改和删除表字段

change可以重命名字段,不能修改字段类型和约束

modify不能重命名字段,可以修改字段类型和约束‘

 

DDL——数据定义

对数据库,表的定义与修改的语言

数据库操作

连接 mysql -u root -p

查询 show databases;

使用 use 数据库名;

创建 create database [if exists] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则] ;

删除 drop database [if exists] 数据库名;

数据表操作

创建

create table 表名(
字段1 字段1类型 [comment 字段1注释],
字段2 字段2类型 [comment 字段2注释],
......
字段n 字段n类型 [comment 字段n注释]
)[comment 表注释];

查询 show tables;

修改 alter table 表名 add 字段名 类型(长度) [comment 字段注释] [约束]

删除 alter table 表名 drop 字段名;

(无法直接修改表字段,可以通过删除和添加操作一起用达到效果)

DML语言——数据操纵

DML语言即数据操纵语言

增删改查

增:insert into tableName (cloum1,cloum2) values(value1,value2),(value1,value2)...;

注意事项:

1,字段和字段之间使用英文逗号隔开

2,字段是可以省略的,但是后面的值就必须要和字段一一对应

3,可以同时插入多个值,values后面的值使用()包裹,每个()代表一条数据

改:update

update 表名 set colnum_name = value,[colnum_name2 = value2,...] where 条件;

- value是一个具体的值,也可以是一个变量(CURRENT_TIME)

删:delete

DELETE from test --不会影响自增

TRUNCATE TABLE test --自增会归零,不会影响事务

查:select

 

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

4.1、DQL

(Data Query Language: 数据查询语言)

  • 所有的查询操作都用它 select

  •  

     

4.2、指定查询字段

语法:SELECT 字段1,... FROM 表;

查询表达式

SELECt version() --查看系统版本(函数)
SELECT 100*3-1 as 计算结果 --计算(表达式)
​

SELECT 表达式 from 表

 

关键字

  • 去重 distinct

    SELECT DISTINCT student from result; (将查询结果去重)

4.3、where 条件子句

逻辑运算符

与&&,或 ||,非 !=

模糊查询

IS NULL

IS NOT NULL

BRTWEEN a AND b

LIKE 列名 like %str%(%代表0或多个值,_代表一个值)

IN

 

4.4 链表查询 join

思路:

1.分析需要查那几张表

2.确定表之间的联系(外键),然后选择用哪种连接查询。

并集 :inner join

左连接: --- FROM a left join b 返回左边表全部数据

右连接: ---FROM a right join b 返回右边表全部数据

超过2张表的连接查询,需要多次连接,可以先连接一次,根据返回结果慢慢增加;以此类推;

 

自连接(了解)

自己的表和自己的表连接;核心:一张表分成2张一样的表

 

分页和排序

第N页:limit 0,5

(n-0) * pageSize, pageSize

 

子查询和嵌套查询

where id = (select * from ... where ...) --()里面的雨具,返回一个固定的值;里面又嵌套了一层;

 

MySQL 常用函数(用的少)

 

聚合函数及分组过滤(常用)

sum() 总和;avg() 平均;count();min();max();

分组: Group BY();

分组之后的过滤: having();

拓展之数据库级别的MD5加密

有函数md5();

INSERT into tableName values(4, xiaoming, MD5('123456'));

Select 小结

select 去重 要查询的字段 from 表

xxx join 要连接的表 on 等值判断

where (具体的值,子查询语句)

Group By(通过哪个字段来分组)

having(过滤分组后的信息,条件和where相同,位置不同而已)

Order By(通过哪个字段排序)【升序,降序】

limit() 分页,每次返回行数

 

事务ACID原则,原子性,一致性,持久性,隔离性,脏读,不可重复读,幻读(虚读)

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

不可重复读:在同一个事务内多次读取同一条数据,多次结果不同;(不一定是错误,只是某些场合不同)

幻读:在一个事务内,读取到了别的事务插入的数据;导致前后读取不一致;一般是行影响,多了一行

原子性:要么都成功,要么都失败

一致性:事务前后数据完整性要保持一致;100块的转账不能超出100

持久性:事务一旦提交不可逆,被持久化到数据库中;

隔离性:事务的隔离性是多个用户并发访问数据库时,各个事务之间互不干扰(如果操作同一条数据,就会有行级锁,排队处理)

 

索引介绍及索引的分类

主键索引 :(PRIMARY KEY)

唯一索引:(UNIQUE KEY)

常规索引(非全文索引):(KEY/INDEX)

全文索引:(FUILText)

CRESTE INDEX 索引名 on 表名(字段)

 

索引原则

  • 索引不是越多越好

  • 不要对经常变动的数据加索引

  • 数据量不大的不要加索引

  • 一般加在紧要查询的字段上

posted @ 2023-11-25 10:38  消失的时光  阅读(28)  评论(0)    收藏  举报