mysql 简单入门
MySql
第一章mysql 入门
MySQL是基于 c/s 架构的软件
添加环境变量到path
1 | cmd 初始化 |
进程
1 | tasklist |findstr msyql # 查进程 |
忘记密码
1 | 1.先关闭服务 |
win10 中跳过授权表可以放在文件中更改 MySQL 中 my.ini 文件,无创建
统一字符编码
1 | [mysqld] |
修改字符集也可以使用
1 | # 查看所有字符集格式 |
进入 MySQL
1 | mysql -uroot -p |
创建 MySQL 用户
1 | use mysql |
可以修改为 192.168.1.% 表示本网用户
授权
@后面加的主机地址,需要设置
1 | # 查看权限 |
登录
1 | mysql -umjj - h 192.168.1.1 -P 3306 -p123 |
第二章MySQL命令
SQL命令
SQL语言主要用于存储数据、查询数据、更行数据和管理数据库系统、分为三种:
- DDL 语句 数据库定义语言:数据库、表、视图、索引、
- DML 语句 数据库操作语言:插入删除修改查看
- DCL 语句 数据库控制语言:
1 | select user(); |
数据库操作
1 | # 查看数据库 |
表的操作
1 | show create table t1; |
数据操作
1 | # 插入数据 |
存储引擎
mysql 5.5版本之后默认为innodb存储引擎
另外还有mysiam、memory、blackhone
#memory,在重启mysql或者重启机器后,表内数据清空
#blackhole,往表内插入任何数据,都相当于丢入黑洞,表内永远不存记录
第三章数据类型
整型
tinyint[数字] [unsigned无符号] 小整数 -128··127 布尔值可以用 tinyint(1)表示True 0表示False
int 后面的类型是显示宽度,不够补0,其他都是存储宽度,zerofill 用0 填充
浮点型
FLOAT
DOUBLE ,精度比 float 高
decimal 更精准的小数
日期
YEAR
YYYY
DATE
YYYY-MM-DD
TIME
HH:MM:SS
DATETIME 用的最多
字符
char 类型:定长,简单粗暴,浪费空间,存取快
varchar 类型:变长,存储速度慢,节省空间
其他
enum 枚举 表示多选一
set 集合 表示多选一,或者多选多
总结
小结:
数据类型:
整型:tinyint int bigint
浮点型: float double decimal
时间:year date time datetime
字符:char 定长 > varchar 变长 > text 文本
枚举:enum
集合:set
布尔:boolean tinyint(1) 存1 表示true,存0 表示false
函数: now() 根据字段的数据类型获取当前的时间格式
char_length: 获取字符长度
length():获取字节数
sql中默认是有符号的
如果设置无符号unsigned
用0填充 zefofill
对字段进行 约束
约束
保证数据的完整性和一致性
表的设计
1.not null 与 default
not null 不为空,default 默认值
create table tb1(id int not null default 2,name char(20) not null);
1 | create table tb1(id int not null default 2,name char(20) not null); |
2.unique
单列唯一的,不重复的,重复的数据不能插入
1 | create table dep(id int not null,name varchar(20) unique); |
多列唯一 表示每列都唯一
1 | create table dep2(id int unique,name varchar(20) unique); |
组合唯一
1 | create table dep3( |
3.primary key (索引优化查询)
主键 = not null + unique
sql 版本中,一张表只允许有一个主键,通常是id,cid,nid,sid
1 | create table stu( |
primary key (索引优化)
4.auto_increment
truncate table t1; 数据量大,删除速度比上一条快,直接从零开始。
外键 foreign key
被关联表 主表 先创建
关联表 从表 后创建,因为先创外键无法匹配
1 | constraint fk_dep forirgin key(dep_id) references dep(id) |
第三章表和表的关系
分析步骤:
先左表:
1.先从左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key;右表一个字段(通常是 id)
2.再右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段foreign key;左表一个自字段(通常是id)
3.1多对一
只有步骤 1 或者步骤 2 成立
的关系,凡是多的都是外键。
3.2多对多
同时成立
3.3一对一
步骤 1 和 2 都不成立
第四章表的查询
4.1单表查询
一、单表查询的语法
SELECT 字段1,字段2… FROM 表名
WHERE 条件
GROUP BY field
HAVING 筛选
ORDER BY field
LIMIT 限制条数
二、关键字的执行优先级(重点)
重点中的重点:关键字的执行优先级
from
where
group by
having 以前的版本不可以单独使用,现在可以
select
distinct
order by(asc升序,desc降序)
limit
1.找到表:from
2.拿着where指定的约束条件,去文件/表中取出一条条记录
3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组
4.将分组的结果进行having过滤
5.执行select
6.去重
7.将结果按条件排序:order by
8.限制结果的显示条数
在my.ini 配置中设置ONLY_FULL_GROUP_BY
分组之后 要想查询组内的信息,必须使用聚合函数,不能在 where 中使用必须分组
min() 求最小
max() 求最大
avg() 求平均
sum() 求和
count()求总个数
4.2多表查询
4.2.1多表连接查询
外连接操作
1 | SELECT 字段列表 |
内连接:符合条件查询
左连接:有限显示左表记录
右连接:优先显示右边记录
全外连接:显示左右两个表全部记录
4.2.2符合条件连接查询
4.2.3子查询
子查询是将一个查询语句嵌套在另一个查询语句中
一个查询语句查询的结果作为另一个查询语句的条件
级联删方式