1.Mysql数据库的安装与介绍
(1)概念介绍
数据库:
存储数据的仓库,按照数据结构,来组织,管理和存储数据,并提供了增、删、改、查的功能。
事物: 将一组增删改的操作看成一个独立的执行单元,要没都成功,如果有一个操作失败,那么数据库会执行回滚,一组操作都会不生效
事物的特性:
1.原子性:事物被当做一个不可分割的执行单元,要么全部成功,要么全部失败,成功则将数据应用到数据库,失败不会对数据产生影响
2.一致性:开始事物前的状态必须和事物执行之后的状态保持一致
3.隔离性:当用户并发访问数据库时,数据库会给每个用户线程开启一个事物,事物和事物之间相互隔离,互不影响
4.持久性:一旦事物提交,那么数据就会永久性地应用于数据库,就算机器出现故障,也不会将数据修改
事物的回滚:
事物作为一个独立不可分割的执行单元,要么都成功,只要这一组操作中有一个失败,事物会执行回滚,恢复到事物执行之前的状态
在不考虑事物的隔离性的情况下,会导致以下情况:
脏读:
当以一个事物执行时,访问了另一个未提交事物的数据,并使用了这条数据
不可重复读:
事物A多次读取一条数数据,事物B对这条数据做了修改,最终导致A事物两次读取的数据不一样
幻读:
事物A读取一张表中的所有数据,事物B在这个表中添加或者删除了一条数据,导致A的结果和实际结果不符,类似于出现了幻觉。
注意:幻读和不可重复读都读取另一条已提交的事物,不同的的是不可重复读查询的都是同一条数据项,而幻读针对的是一批数据整体。
事物的四种隔离级别:
**Read uncommitted**:读未提交 最低级别,可能会出现任何情况
**Read committed**:读已提交 可以避免脏读
**Repeatable read**:可重读 可以避免脏读和不可重复度
**Serializable**:串行化 可避免 脏读 不可重复读 幻读 最高的隔离级别
数据库的分类:
关系型数据库 SQL sever MySQL Oracle
是建立在数据模型的基础之上,借用集合、代数等数据概念,来去管理数据
非关系型数据库
Redis mongodb
{key:val}
Mysql引擎:
**Myisam** : 在5.5版本之前 是默认引擎
不支持事物
数据查询速度快
相对数据安全性差
将数据存在三个文件当中
一个文件存表结构 一个文件存索引 一个文件存数据
**Innodb**:在5.5之后默认引擎
支持事物
相对于myisam 查询效率低
数据安全性高
将数据存在两个文件中
一个文件存表结构 一个文件存索引和数据
(2)安装
1.把mysql-5.7.25-winx64.zip解压放到C盘目录下
2.MySQL软件bin目录添加到PATH环境变量中 C:\mysql-5.7.25-winx64\bin
3.在MySQL安装目录下创建my.cnf文件
4.my.cnf中粘贴默认选项
[mysqld]
basedir=c:/mysql-5.7.25-winx64
datadir=c:/mysql-5.7.25-winx64/data
character-set-server=utf8
explicit_defaults_for_timestamp
[mysql]
5.安装MySQL服务,以管理员运行cmd
执行切换到bin目录下,执行mysqld --install MySQL
6.查看MySQL服务 services.msc 或者计算机->管理-->服务和应用程序-->服务
7.初始化安装MySQL数据库在bin目录下执行
mysqld --initialize-insecure,无密码安装,看是否多data文件夹
8.启动MySQL服务
9.MySQL连接测试 mysql -uroot -p
卸载mysql
1、停止服务,删除C:mysql该目录下剩余了所有文件,把mysql文件夹也删了
2、windows+R运行“regedit”文件,打开注册表
3、删除注册表:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL文件夹
4、删除
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL文件夹,如果没有可以不用删除了
5、使用管理员权限进去cmd,sc delete MySQL ,这里是MySQL
(3)数据的基本认识和操作
启动服务
在命令行 输入 net start mysql
停止服务: net stop mysql
连接数据库
Mysql -u root -p -h -P
-u 你的mysql的用户名
-p 你的mysql密码
-h 你mysql服务的地址 ip
-P mysql数据库的端口号 默认3306
完整写法:
Mysql -uroot -p -hlocalhost -P3306
数据库服务装在了本地所以-h可以省略
端口号使用是默认端口索引-P也可以省略
操作如下:连接成功

Mysql数据库的基本结构
Mysql关系型数据库管理软件
Mysql>database>table>filed
多条数据组成一张表
多张表组成一个库
Mysql管理多个库
Sql语句分类:
SQL结构化查询语言,用于关系型数据库数据的操作
DDL(定义) 一般适用于对库的操作和表的操作
DML(操作) 一般是 数据的添加 数据的修改 数据的删除
DQL(查询) 一般是查询
DCL(控制) 一般使用权限管理 一般是有dba来去操作
Sql的语法规则
1.sql语句必须以分号结尾
2.Sql 不去分大小写 但是一般文档中 sql关键都是大写
数据库的命令完整版
1.连接数据库
mysql -uroot -p
2.库操作
查看所有的库
SHOW DATABASES;
创建库
CREATE DATABASE 库名;
切换数据库
USE 库名;
查看当前所在的库
SELECT DATABASE();
删除数据库
DROP DATABASE 库名;
3.表操作
查看当前库中所有的表
SHOW TABLES;
创建表
CREATE TABLE 表名(字段 类型 约束,字段 类型 约束)CHARSET=UTF8;
查看表结构
DESC 表名;
查看建标语句
SHOW CREATE TABLE 表名;
删除表:
DROP TABLE 表名;
4.数据的操作
添加数据
格式:INSERT INTO 表名(字段1,字段2,...) values(值1,值2,...);
指定所有字段添加数据
不指定字段添加数据
向student表中添加一条数据 值的顺序必须按照表结构的顺序来添加
INSERT INTO student values(5,'赵六',30,'1','z@163.com','web');
指定部分字段添加
INSERT INTO student(id,name) values(6,'田七');
一次添加多条数据
INSERT INTO student values
(7,'王八',28,'0','w@.com','ui'),
(8,'九九',19,'1','j@qq.com','python'),
(9,'后羿',80,'1','h@qq.com','python'),
(10,'吴刚',79,'1','w@qq.com','python');
更新数据
格式: UPDATE 表名 SET 修改的字段 WHERE 条件;
更新name为吴刚的数据 把年龄修给成77 把性别改成0
UPDATE student SET age=77,gender='0' WHERE name='吴刚';
删除数据
格式:DELETE FROM 表名 WHERE 条件
删除name是吴刚的数据
DELETE FROM student WHERE name='吴刚';
查询数据
格式:SELECT 字段 FROM 表名;
查询所有的数据
SELECT * FROM student;
5.数据的数据类型
数值
Int 4字节
Tinyint 1字节
decimal 一般存浮点型 小数
格式:DECIMAL(M,D) M你要存的数据 D保留几位小数
decimal(1234,2) 12.34
字符串
char
定长字符串
varchar
变长字符串
char(20) 就算你当前字段中只存储了1个字符 那么它也是占据20个字符的大小
varchar(20)
最多能存20个字符 如果存了小于20个字符 它的实际占据大小是以你存的内容为准
text文本类型
时间日期类型
datetime 混合事件日期类型 年月日时分秒 格式 年-月-日 时:分:秒
6.常见的字段约束
Unsigned 无符号 一般给数值型的字段添加
如果添加代表当前字段只能存正数
Int(5) 5代表显示的宽度 如果是有符号默认是11 如果是无符号默认10
Not null 不能为空 默认字段可以为空 如果添加了 那么此字段不能为空
Default 默认值
Primary key 主键约束(主键索引) 不能为空 且唯一 用于表示数据的唯一标识
Unique 唯一约束(唯一索引) 可以为空 不能重复 具有唯一性
Auto_increment 自动递增 一般配合主键去使用
创建一张表 demo
有字段 id 唯一索引
uname 字符串类型 不能为空
email 字符串类型 可以为空
gender 字符串 不能为空 默认值为 2
create table demo(
id int unsigned not null auto_increment primary key,
uname varchar(32) not null,
email varchar(32),
gender varchar(5) not null default '2'
)charset=utf8;
7.表结构的操作
格式: ALTER TABLE 表名 操作
添加字段 add
给student表添加一个phone
ALTER TABLE student ADD phone varchar(11) not null default '110';
修改字段 modify/change (modify改约束,change可改字段名和约束)
注意:如果要修改约束, modify/change 都需要将对应的约束修改,其他的保持不变,否则修改后只剩下修改的那一项约束
修改字段约束
将phone字段的类型改成char类型
ALTER TABLE student MODIFY phone char(11);
将phone字段的类型改成int类型
注意:将字符串转成数值型的时候,当前字段的值都必须是数字表示的字符串
ALTER tABLE student MODIFY phone int;
修改字段名
将phone字段的名字改成 aa
ALTER TABLE student CHANGE phone aa varchar(11);
将字段的约束改成 char(11);
ALTER TABLE student CHANGE aa aa char(11);
删除字段 drop
删除aa字段
ALTER TABLE student DROP aa;
修改表名 rename as
修改student表名为 students
ALTER TABLE student RENAME AS students;
修改表的编码格式
ALTER TABLE students CHARSET=GBK;
修自增值
修改自增值为20
ALTER TABLE students AUTO_INCREMENT=20;
8.where条件查询
运算符 可以用在where条件
查询所有的数据
SELECT * FROM 表名 WHERE 条件
练习:
1.查询年龄不等于18岁的所有用户信息
SELECT * FROM students WHERE age!=18;
2.查询班级为python的所有用户信息
SELECT * FROM students WHERE class='python';
3.查询年龄大于16岁的所有用户信息
SELECT * FROM students WHERE age>16;
4.查询年龄在18到24岁之间的所有用户信息 包含18和24岁;
SELECT * FROM students WHERE age>=18 and age<=24;
SELECT * FROM students WHERE age between 18 and 24;
5.查询年龄不在18到24之间的所有用户信息 not between 不包含开始和结束
SELECT * FROM students WHERE age<18 or age>24;
SELECT * FROM students WHERE age not between 18 and 24;
6.查询id值是1,3,4,6的所有用户信息
SELECT * FROM students WHERE id=1 or id=3 or id=4 or id=6;
SELECT * FROM students WHERE id in (1,3,4,6);
7.查询python班和web班级的所有女生信息
SELECT * FROM students WHERE (class='python' or class='web') and gender='0';
9.模糊查询:
like 有两个
% 任意位的任意字符
_ 一位任意字符
1.查询名字以‘小’开头的用户信息
SELECT * FROM students WHERE name like '小%';
2.查询emial中包含q的所有用户信息
SELECT * FROM students WHERE email like '%q%';
3.查询姓名是两个字的用户信息
SELECT * FROM students WHERE name like '__';
4.查询姓名以小开头并且是两个字的用户信息
SELECT * FROM students WHERE name like '小_';
10.聚合函数:
Max() min() count() avg() sum()
1.统计当前表中一共有多少条数据
SELECT count(*) FROM students;
2.查询python班级最大年龄最小年龄以及平均
SELECT max(age),min(age),avg(age) FROM students WHERE class='python';
3.统计男生的数量
SELECT count(*) FROM students WHERE gender='0';
11.去除重复的数据:distinct
1.查询所有的班级
SELECT distinct class FROM student;
SELECT class FROM students group by class;
2.查询不重复的班级和性别
SELECT distinct class,gender FROM student;
12.分组group by
注意:count(*) 在分组中使用时,统计的分别是分组后每个组的数据条数
1.查询表中有哪些班级
SELECT class FROM students GROUP BY class;
2.统计当前表中男生和女生的人数各多少人
SELECT gender,count(*) FROM students GROUP BY gender;
3.统计每个班级的人数
SELECT class,count(*) FROM student GROUP BY class;
4.统计每个班,男生和女生个多少人
SELECT class,gender,count(*) FROM students GROUP BY class,gender;
Having 子句查询
只能在分组后面去使用
类似于where 但是having筛选的是分组后的数据
1.统计每个班级的人数,并查询出班级人数大于2的班级
SELECT class,count(*) FROM students GROUP BY class HAVING count(*)>2;
2.查询每个班级男生人数大于2的班级
SELECT class,gender,count(*) FROM students GROUP BY class,gender HAVING gender='1' and count(*)>2;
先查询出所有的男生 在按照班级分组 然后在用having过滤
SELECT class,count(*) FROM students WHERE gender='1' GROUP BY class HAVING COUNT(*)>2;
13.运算符:
算术运算符: + - * / %
比较运算符:> < >= <= = != <>
特殊比较运算符:in, not in,is null,is not null,like,between and
逻辑运算符:and or not
逻辑运算符优先级 or<and<not
本文深入讲解Mysql数据库的安装步骤,数据库与事物的概念,事物的四大特性,隔离级别的理解,数据库分类,Mysql引擎对比,以及数据库操作命令,包括库、表、数据的基本操作,数据类型,字段约束,表结构操作,条件查询,聚合函数,去除重复数据,分组与Having子句的使用。

2万+

被折叠的 条评论
为什么被折叠?



