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的区别
| MYISAM | INNODB | |
|---|---|---|
| 事务支持 | 不支持 | 支持 |
| 数据行级锁定 | 不支持 | 支持 |
| 外键约束 | 不支持 | 支持 |
| 全文索引 | 支持 | 不支持 |
| 表空间大小 | 较小 | 较大(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
studentfrom 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)
全文索引:(FUILText)
CRESTE INDEX 索引名 on 表名(字段)
索引原则
-
索引不是越多越好
-
不要对经常变动的数据加索引
-
数据量不大的不要加索引
-



浙公网安备 33010602011771号