MySQL学习笔记

一、初识数据库

JavaEE:企业级Java开发 Web

前端:(页面:展示,数据!)

后台:(连接点:连接数据库JDBC,连接前端【控制、控制视图跳转,给前端传数据】)

数据库:(存数据,txt/excel/word)

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

1.1为什么学数据库

1.岗位需求(趋势)

2.现在大数据时代,得数据者的天下!

3.被迫营业:存数据 ===去IOE

4.数据库是所有软件体系中最核心的存在 ===DBA

1.2什么是数据库

DB:数据库,DataBase

概念:数据仓库,软件,安装在操作系统(Windows,Linux,macOS)之上!SQL可以存储大量数据,500万!

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

1.3数据库分类

关系型数据库:(SQL)

  • MySQL、Oracle、SQLServer、DB2、SQLite

  • 通过表和表之间,行和列之间的关系进行存储,学员信息表、考勤表······

非关系型数据库:(NoSQL=not only SQL)

  • Redis、MongDB

  • 对象存储,通过对象自身的属性来决定

DBMS:数据库管理系统

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

  • MySQL 数据库管理系统

 

1.4 MySQL简介

MySQL是一个关系型数据库管理系统

前世:瑞典MySQL AB公司

今生: Oracle旗下产品

MySQL是最好的 RDBMS(Relational Database Management System,关系数据库管理系统) 应用软件之一

开源的数据库软件

体积小、速度快、总体拥有成本低,招人成本低,所有人必须会

中小型网站、或者大型网站,集群!

官网: MySQL

1.5MySQL安装

官网下载地址:MySQL :: Download MySQL Community Server (Archived Versions)

安装建议:

1.尽量不要使用exe,注册表很麻烦

2.尽可能使用压缩包安装

安装教程:自己网上随便找就行,基本上都是下一步下一步。

  • 解压

  • 放自己环境下

  • 配置环境变量

  • 新建配置文件ini(my.ini)

  • 编辑配置文件

[mysqld]
basedir=自己环境下的目录
datadir=会自动生成
port=3306
skip-grant-tables
  • 管理员模式cmd,切换到MySQLbin目录,运行mysqld -install

  • 再输入mysqld --initialize-insecure --user=mysql 初始化数据文件(自动生成datadir)

  • 然后再次启动Mysql 用mysql -u root -p进入mysql管理界面(密码可以空)

  • 进入界面后更改root密码

update mysql.user set authentication_string=password('123456') where user='root' and Host='localhost';
  • 输入flush privileges;刷新权限

  • 修改my.ini文件,删除最后一行skip-grant-tables

  • 重启MySQL

net stop mysql;
net start mysql;
  • 连接测试即可

如果服务安装错了可以清控服务:sc delete mysql

1.6可视化工具的安装

SQLyog

Navicat

自己安装就好了,很简单的。

二、基本的命令行操作

2.1连接数据库

mysql -u root -p
Enter password: *********

2.2查看全部数据库

show databases;

2.3使用某个数据库

use dbName;

2.4查看全部表

show tables;

2.5查看表信息

describe dbName;

2.6创建数据库

create database dbName;

2.7退出链接

exit
--SQL的单行注释
/*
SQL的多行注释
*/

三、操作数据库

操作数据库===>操作数据库中的表===>操作数据库中表数据

3.1操作数据库

如果表名或者字段名是特殊字符,加`就行了。

3.1.1创建数据库

create database [if not exists] dbName;

3.1.2删除数据库

drop database [if exists] dbName;

3.1.3使用数据库

use dbName;

3.1.4查询数据库

show databases;

3.2数据库的数据类型

3.2.1数值

名称含义字节数(Byte)
tinyint特小整数1
smallint较小整数2
mediumint中等大小整数3
int标准整数4
bigint较大整数8
float单精度浮点数4
double双精度浮点数8
decimal字符串形式浮点数金融计算用

3.2.2字符串

名称含义大小
char固定大小字符串0~2^8-1
varchar可变长字符串0~2^16-1
tinytext微型文本0~2^8-1
text文本0~2^16-1

3.2.3时间和日期

名称含义格式
date日期格式YYYY-MM-DD
time时间格式HH:mm:ss
datetime时间格式YYYY-MM-DD HH:mm:ss
timestamp时间戳1970.1.1到现在的毫秒数
year年份YYYY

3.2.4null

空值,不要用null进行运算,如果用了,结果一定是null。

3.3数据库的字段属性

3.3.1Unsigned:

  • 无符号的整数

  • 不能声明为复数

3.3.2zerofill:

  • 0填充

  • 不足的位数用0填充===> int(3) 5--->005

3.3.3自增:

  • 自动在上一条记录的基础上+1

  • 通常用来作为主键,必须是整数类型

  • 可以自定义设置主键的起始值

3.3.4非空:

  • 如果设置NOT NULL,如果不赋值会报错

  • NULL,如果不填值,默认就是NULL

3.3.5默认值:

  • 设置默认值

  • 如果不指定该列值,则为默认值填充

3.4创建数据库表

3.4.1建表语句

create table [if not exists] `表名`(
	`字段名` 列类型 [属性] [索引] [注释],
    `字段名` 列类型 [属性] [索引] [注释],
    ……
    `字段名` 列类型 [属性] [索引] [注释]
)[表类型] [字符集] [注释]

3.4.2常用命令

show create database dbName; --查看创建数据库的语句
show cretae table tbName; --查看创建表的语句
desc tbName; --显示表结构

3.4.3数据库引擎

InnoDB(默认使用)与MyISAM(早些年使用)

MyISAMInnoDB
事物支持NY
数据行锁定N(表锁)Y
外键约束NY
全文索引YN
表空间大小较小较大,约MyISAM2倍
特点节约空间,速度较快安全性高,事务处理,多表多用户操作
物理存放位置.frm文件,.MYD文件和.MYI文件.frm文件和上级目录的ibdata1文件

3.5修改删除表

3.5.1修改

alter table dbName_old rename as dbName_new; --修改表名
alter table dbName add `字段名` 列类型 ; --增加字段
alter table dbName modify `字段名` 列类型 ; --修改(重定义)字段(修改约束)
alter table dbName change `旧字段名` `新字段名` 列类型 ; --修改字段名(重命名)
alter table dbName drop `字段名` ; --删除字段

3.5.2删除

drop table [if exists] dbName; --删除表

四、MySQL数据管理

4.1外键

1.在创建表时候,增加约束(太复杂,不会用到的)

2.修改表,添加外键(也不简单,很麻烦,也不用)

alter table `表名` 
add constraint `FK_外键字段名` 
foreign key(`外键字段名`)
references `外表名`(`外键字段名`);

3.可视化界面操作

4.外键在程序级别处理

4.2DML语言

数据库意义:数据存储、数据管理

DML语言:数据库操作语言

  • insert

  • update

  • delete

4.3添加

insert into 表名([字段名1,字段名2,...,字段名n]) 
values('1值1','1值2',...,'1值n'),('2值1','2值2',...,'2值n'),...,('n值1','n值2',...,'n值n');

4.4修改

update 表名 set 字段名1=值1[,字段名2=值2,...,字段名n=值n] [where 条件];

where子句运算符:

操作符含义范围结果
=等于5=6false
<>或!=不等于5<>6true
>大于5>6false
<小于5<6true
>=大于等于5>=6false
<=小于等于5<=6true
between...and...介于5 [2,5]true
and5>1 and 1>2false
or5>1 or 1>2true
not5 not 6true

4.5删除

delete from 表名 [where 条件];  --删除数据(只删除数据)
truncate table 表名;  --清空表(删了重建表)

delete删除的问题:重启数据库现象

  • InnoDB 自增列会从1开始(存在内存里,断电即失)

  • MyISAM 自增量会继续自增(存在文件中,不会丢失)

五、DQL查询数据

5.1DQL

Data Query Language:数据查询语言

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

  • 简单查询、复杂查询都能做

  • 数据库中最核心的语言,最重要的语句

  • 使用频率最高的语句

5.2指定查询字段

--查询表的所有数据
select * from 表名;
--查询指定字段
select 字段1,字段2,...,字段n from 表名;
--字段别名与表别名
select 字段 as 字段别名 from 表 as 表别名;
--函数concat(a,b):连接两个字段的值
select concat(字段1,字段2) as 新字段名 from 表名; 
--去重
select distinct 字段 from 表名;
--查询数据库版本
select version();
--计算
select 100*3-2 as 计算结果;
--查询自增的步长
select @@auto_increment_increment;
--加入计算表达式
select 字段+1 as 加一后 from 表名;

5.3where条件子句

官网文档中函数和操作:

MySQL :: MySQL 8.0 Reference Manual :: 12.1 Built-In Function and Operator Reference

模糊查询:比较运算符

运算符语法结果
is nulla is nulla为空,则为true
is not nulla is not nulla不为空,则为true
between...and...a between b and ca介于b和c之间(包含b/c),则为真
likea like bSQL匹配,a匹配b成功,则为真
ina in (a1,a2,...,a3)a若在(a1,a2,...,a3)中,则为真
--查询姓刘的,'%'代表任意字符
select 字段名 from 表名 where 字段名 like '刘%';
--查询叫刘某的,'_'代表一个字符
select 字段名 from 表名 where 字段名 like '刘_';
--查询(1001,1002,1003)中的
select 字段名 from 表名 where 字段名 in (1001,1002,1003);

5.4连表查询(7种)

 

5.5排序和分页

--升序ASC,降序DESC 
select 字段名 from 表名 [where 条件] order by 字段名 ASC; 
--limit分页 limit start,size
select 字段名 from 表名 [where 条件] limit start,size;  --现在好多用瀑布

5.6子查询和嵌套查询

select 字段名 from 表名 [where 条件(select 字段名1 from 表名1)];

六、MySQL函数

官网资料:MySQL :: MySQL 8.0 Reference Manual :: 12.1 Built-In Function and Operator Reference

6.1常用函数

--数学运算符
select ABS(-8);    --绝对值  8
select CEILING(9.4);    --向上取整  10
select FLOOR(9.4);    --向下取整  9
select RAND();    --随机数 0~1之间的随机数 0.5
select SIGN(-10);    --判断一个数的符号 0返回0,负数返回-1,正数返回1
--字符串函数
select CHAR_LENGTH('今天是20211202对称日');    --字符串长度
select CONCAT('I','want','nothing!');    --拼接字符串
select INSERT('我爱编程很喜欢',1,3,'拉布拉多犬');    --从1开始删掉3个字符并插入'拉布拉多犬'
select LOWER('ShangHai');    --转小写
select UPPER('nba');    --转大写
select INSTR('pandaboy','b');    --返回第一次出现的索引
select REPLACE('只有爱拼才会赢','只有','不一定是');    --替换出现的指定字符串
select SUBSTR('听说只有爱拼才会赢',3,5);    --返回指定起始位置和长度的子串
select REVERSE('上海自来水来自浙江');    --反转字符串
--时间和日期函数
select CURRENT_DATE();    --获取当前日期
select CURDATE();    --获取当前日期
select NOW();    --获取当前时间
select LOCALTIME();    --本地时间
select SYSDATE();    --系统时间
select YEAR(NOW());
select MONTH(NOW());
select DAY(NOW());
select HOUR(NOW());
select MINUTE(NOW());
select SECOND(NOW());
--系统函数
select SYSTEM_USER();
select USER();
select VERSION();

6.2聚合函数

函数名称描述
COUNT()计数
SUM()求和
AVG()平均值
MAX()最大值
MIN()最小值
......
--关于count
select count(列名) from 表名; --忽略所有null
select count(*) from 表名; --不会忽略null,包括所有列
select count(1) from 表名; --不会忽略null,用1代表代码行

6.3分组过滤

select 字段名 from 表名 [where 条件] order by 字段名 [having 条件];
--order by 分组
--having 分组后的过滤

6.4数据库级别的MD5加密

什么是MD5?

主要是增强算法复杂度和不可逆性。

MD5不可逆,具体的值的md5是一样的

MD5破解网站的原理是:背后有一个字典,MD5加密前后对应

MD5(字段名/值);    --sql中加密

七、事物

7.1什么是事物?

要么都成功,要么都失败。

未完......

感谢狂神提供的免费课程:

首页-KuangStudyKuangStudy是一个致力于为每个想学习知识的人提供一个少走弯路的平台,包含优质体系课程、文章博客、专栏书写、技术论坛、资源下载等产品服务,提供有用、优质、完整内容的自学交流社区.https://www.kuangstudy.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值