安装(5.7.30)
解压->放到想要安装的位置
修改文件名为mysql 在同级目录创建data目录存放数据
![]()
进入mysql目录
创建 my.ini:
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=D:\java\mysql-5.7.30\mysql
# 设置mysql数据库的数据的存放目录
datadir=D:\java\mysql-5.7.30\data
default-time_zone = '+8:00'
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为UTF8
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
配置环境变量
![]()
在path中加入
![]()
运行cmd ->进入mysql\bin目录下
![]()
输入命令
mysqld --initialize --user==mysql --console
会在data生成相关数据文件
执行安装命令
mysqld install
启动服务
net start MySQL
初始化密码
mysqladmin -u root password 密码
可以在服务里找到mysql服务右键->属性 将自动改为手动,避免每次开机都自动启用,占用资源
![]()
数据库基本命令
启动服务
net start MySQL
关闭服务
net stop MySQL
登录
mysql -u root -p
查看全部数据库
#查看所有数据库
show databases;
建库
#建库 if not exists:判断有没有 default charset:默认字符集 collate utf8_general_ci:排序规则
create database if not exists gold default charset utf8mb4 collate utf8mb4_general_ci;
选择数据库
#选择数据库
use gold;
查看数据库定义
#查看数据库定义
show create database gold;
查看当前使用的数据库
select database()
查看数据库的系统变量及其值
show variables
删除数据库
#删除数据库
drop database gold;
表
查看所有表
show tables;
建表
#建表 int(11):字段类型和最大位数 auto_increment:自增 not null:不能为空 comment:字段注解 primary key主键
#ENGINE=InnoDB:它提供了事务控制能力功能,它确保一组命令全部执行成功,或者当任何一个命令出现错误时所有命令的结果都被回退,可以想像在电子银行中事务控制能力是非常重要的。支持COMMIT、ROLLBACK和其他事务特性。
#DEFAULT CHARSET=utf8mb4:默认字符集
#mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等。
#
create table if not exists student(
s_id int(11) not null auto_increment comment '学号',
s_name varchar(5) not null comment '姓名',
s_age int(3) not null comment '年龄',
s_sex int(1) not null comment '性别',
primary key (s_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 comment '学生表';
#班级表
create table if not exists the_class(
t_id int(11) not null auto_increment comment '班级号',
t_name varchar(10) not null comment '班级名字',
primary key (t_id)
)engine=InnoDB default charset=utf8mb4 comment '班级表';
#中间表
create table if not exists class_student(
id int(11) not null auto_increment comment '中间表id',
t_id int(11) not null comment '班级id',
s_id int(11) not null comment '学生id',
primary key (id),
#设置外键 外键名 外键字段 目标表字段
constraint cs_t foreign key(t_id) references the_class(t_id),
constraint cs_s foreign key (s_id) references student(s_id)
)engine = InnoDB default charset utf8mb4 comment '班级和学生中间表';
show tables ;
查看表结构
#查看表结构
describe student;
#简写
desc student;
## NOLL:是否可以存储NULL值
## Key:是否已编制索引 FRI表示该列是主建的一部分 UNI 表示该列是UNIQUE索引的一部分 MUL表示在列中某个给定的值允许出现多次
## Default:是否有默认值,值是多少
## EXTRA:可以获取的与给定列有关的附加信息,例如 auto_increment等
查看表详细结构
#查看表详细结构
show create table student;
修改表名
#修改表名
alter table student rename students;
修改字段数据类型
#修改字段数据类型
alter table student modify s_name int;
添加字段
#添加字段 表名 增加字段 类型以及位数
alter table student add xxx int(11)
#在表的第一列添加字段
alter table student add xxxx int(11) first ;
#在表的制定列添加字段
alter table student add xxxxx int(11) after s_age;
删除字段
#删除字段
alter table student drop xxxxx;
修改字段
#修改字段到表的指定位置
#将s_sex插入s_id后面
alter table student modify s_sex int(1) after s_id;
#修改字段为表第一字段
alter table student modify s_age int(11) first ;
删除外键约束
#删除外键约束 表名 要删除的外键
alter table class_student drop foreign key cs_s;
基本查询语句
SQL四种语言:DDL,DML,DCL,TCL
- DDL(Data Definition Language)数据库定义语言
- DML(Data Manipulation Language)数据操纵语言
- DCL(Data Control Language)数据库控制语言
- TCL(Transaction Control Language)事务控制语言
查询所有字段和指定字段
#查询所有字段
select * from student;
#查询指定字段
select s_id,s_name from student;
查询指定记录
# = 相等
#<>,!= 不相等
#< 小于
#<= 小于或等于
#> 大于
#>= 大于或等于
#id等于1的学号和名字
select s_name,s_id from student where s_id=1;
IN
#in操作符用来查询满足指定范围的条件记录
select * from student where s_id in (1,100);
NOT IN
#NOT IN操作符与IN相反,用来检索不在范围的记录
select * from student where s_id not in (1,100);
BETWEEN AND
#BETWEEN AND用来查询某个范围内的值
select * from student where s_id between 1 and 200;
LIKE 匹配查询
#LIKE 模糊查询
# 尽量不要再字符前面启用% 后通配 走索引 前通配 走全表。
# %:百分号统配匹配任意长度字符,甚至包括零字符
#_:下划线一次只能匹配任意一个字符
select * from student where s_name ='_c%';
空值查询
#null查询
select * from student where s_name is null;
AND
#带AND的多条件查询
select * from student where s_age>18 and s_sex=1;
OR
#OR:满足一个条件就ok
select * from student where s_age>18 or s_sex=1;
DISTINCT
#DISTINCT:去重复
select distinct s_age from student;
ORDER BY
#ORDER NY:对指定的列数据排序 按名字排序
select * from student order by s_name;
#多列排序 id和名字
select * from student order by s_id,s_name;
#指定排序方向 desc:降序排序
select * from student order by s_name desc;
GROUP BY
#分组查询 年龄一样的分一组
select s_age,count(*) as '人数' from student group by s_age;
#分组查询,只显示年龄大于20的分组
select s_age,count(*) from student where s_age>20 group by s_age;
HAVING
#having 通常和group by一起使用 前者分组 后者根据前者分组情况在作出筛选
# 分组后筛选 学生年龄分组成员大于1的记录
select s_age,count(*) from student group by s_age having count(*)>1;
LIMIT
#LIMIT:分页查询 显示前面0-5的记录
select * from student limit 0,5;
聚合函数
| 函数 | 作用 |
|---|---|
| AVG() | 返回某列的平均值 |
| CONUT() | 返回某列的行数 |
| MAX() | 返回某列的最大值 |
| MIN() | 返回某列的最小值 |
| SUM() | 返回某列值的和 |
COUNT()
#聚合函数count() 计算表中总行数
select count(*) as '行' from student;
#聚合函数count() 统计年龄大于20的同学个数
select count(*) as '年龄大于20的同学' from student where s_age>20;
## 结合GROUP BY 统计全班性别情况
select s_sex '性别',count(*) '人数' from student group by s_sex;
SUM()
#SUM()函数 班上女生年龄总和
select sum(s_age) from student where s_sex=1;
AVG()
#聚合函数AVG() 返回学生年龄的平均值
select avg(s_age) from student;
链接查询
内连接(INNER JOIN)
外连接
左连接(LEFT JOIN)
有链接(RIGHT JOIN)
子查询
插入数据
#为表所有字段插入数据
insert into student values(default,'小白',18,0);
更新数据
#更新数据
update student set s_name = '小黑' where s_id=1;
删除数据
#删除学号为1的记录
delete from student where s_id=1;
索引
事务
比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
- 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
- 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
- 事务用来管理 insert,update,delete 语句
一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。
- **原子性:**一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
- 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
- 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
- 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
在 MySQL 命令行的默认设置下,事务都是自动提交的
事务控制语句
- BEGIN 或 START TRANSACTION 显式地开启一个事务;
- COMMIT 也可以使用 COMMIT WORK,不过二者是等价的。COMMIT 会提交事务,并使已对数据库进行的所有修改成为永久性的;
- ROLLBACK 也可以使用 ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
- SAVEPOINT identifier,SAVEPOINT 允许在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT;
- RELEASE SAVEPOINT identifier 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;
- ROLLBACK TO identifier 把事务回滚到标记点;
- SET TRANSACTION 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。
事务的处理
主要有两种
- 用 BEGIN, ROLLBACK, COMMIT来实现
- BEGIN 开始一个事务
- ROLLBACK 事务回滚
- COMMIT 事务确认
- 直接用 SET 来改变 MySQL 的自动提交模式:
- SET AUTOCOMMIT=0 禁止自动提交
- SET AUTOCOMMIT=1 开启自动提交