4-2 Mysql 基础

SQL基础练习:http://sample.jimstone.com.cn/xsql/

Mysql 基础 X-mind 思维导图
点此下载

在这里插入图片描述

1. Mysql 基础

  • 数据库分类
  • 其他 Other

2. SQL 语言

  • DDL 数据定义
  • DQL 数据查询
  • DML 数据操纵
  • DTL 事务控制
  • DCL 数据控制

3. 数据库 DataBase

  • 查看、使用、查询数据库
  • 创建、删除、修改数据库

4. 表 Table

  • 查看、创建、复制、删除、修改表

5. 字段 Column (列名)

  • 添加、删除、修改字段
  • change 和 modify 的区别

6. 约束 Constraint

7. 操作符 Operator

8. 关键字 Keyword

  • 联合查询 union
  • 分组 group by
  • 过滤 having
  • 排序 order by
  • 分页查询 limit

9. 常用函数 Function

  • 求和 sum()
  • 平均数 avg()
  • 最大值 max()
  • 最小值 min()
  • 统计 count()
  • 去重 distinct()
  • 系统日期 curdate()
  • 系统日期时间 sysdate()

10. 数据 Data

11. 用户管理及授权 User

12. 事务 Transaction

13. 远程连接 Remote Connect

  • 连接本地数据库
  • 导入导出本地数据
  • 连接远程数据库
  • 导出远程数据

1. Mysql 基础


 - 数据库分类:
(1)关系型数据库:Mysql、Oracle、SQLServer、DB2
(2)非关系型数据库:MongoDB、redis
 - DBA:数据库管理员
 - DBS:数据库系统(包含)
(1)DB:数据库
(2)DBMS:数据库管理系统
 - sql 语句以 `;` 结尾
 - as:一般为别名,可省略
 - 除数值外,其他数据类型需加单引号或双引号
 - 查询时,`%` 代表模糊查询,`_` 代表占位

2. SQL 语言


SQL 语言分类:
DDL 数据定义、DQL 数据查询、DML 数据操纵、DTL 事务控制、DCL 数据控制
  • DDL 数据定义(Data Definition Language)
createalterdroptruncate
create:创建数据库、表(字段、约束)
alter:修改数据库、表(字段、约束)
drop:删除数据库、表(字段、约束)
truncate:清空表数据
  • DQL 数据查询(Data Query Language)
select
select:查询表数据
  • DML 数据操纵(Data Manipulation Language)
insertupdatedelete
insert:插入表数据
update:修改表数据
delete:删除表数据
  • DTL 事务控制
commitrollback
commit:提交事务
rollback:回滚事务
  • DCL 数据控制(Data Control Language)
grantrevoke
grant:授权
revoke:撤销授权

3. 数据库 Databease


# 查看数据库
show databases;

# 使用数据库
use 库名;

# 查询数据库
show database like '%库名%';

# 创建数据库
create database 库名 default character set 默认字符集 collate 排序规则;
# default character set utf8 collate utf8_general_ci
# default character set gb2312 collate gb2312_chinese_ci

# 删除数据库
drop database 库名;

# 修改数据库(字符集)
alter database 库名 character set 新字符集 collate 排序规则;

4. 表 Table


# 查看所有表
show tables;

# 查看表结构
desc 表名;
show create table 表名;

# 查看表键值
show keys from 表名;

# 创建表
create table 表名 (字段 类型(长度) 约束,字段 类型(长度) 约束,...);
create table 表名 (字段 类型(长度),...,约束(字段,字段...),约束(字段,字段...));

# 复制表
# 复制表结构
create table 表名1 like 表名2;

# 复制表结构和数据
create table 表名1 as select * from 表名2;

# 删除表
drop table 表名;

# 修改表
# 修改表名
alter table 表名 rename to 新表名;
rename table 表名 to 新表名;

# 修改表字符集
alter table 表名 convert to character set 新字符集;

5. 字段 Column(列名)


# 增加表字段
alter table 表名 add 新字段 类型(长度) 约束;

# 在某字段后插入新字段
alter table 表名 add 新字段 类型(长度) after 字段;

# 删除表字段
alter table 表名 drop 字段;

# 修改表字段
alter table 表名 change 字段 新字段 类型(长度) 约束;

# 修改表字段类型
alter table 表名 modify 字段 新类型(长度);

change 和 modify 的区别
change 和 modify 都可以修改表的定义
change 需要写两次字段名,可以修改字段名称
modify 只需写一次字段名,不可以修改字段名称

6. 约束 Constraint


约束 Constraint : 
主键(Primary Key)、外键(Foreign Key)、唯一性(Unique)、默认值(Default)、非空(Not Null)、主键自增长(auto_increment
6.1 主键(Primary Key,PK)
# 创建表时添加主键
create table 表名(字段 类型(长度) primary key);
# primary key 可搭配:unique、unsigned、zerofill、not null、auto_increment

# 添加主键
alter table 表名 add primary key(字段);

# 删除主键
alter table 表名 drop primary key;

一个表只能有一个主键,分为单个主键和复合主键
复合主键的所有字段相同,才为重复
6.2 外键(Foreign Key,FK)
主表与从表
主表:被引用数据
从表:引用其他表数据
插入:先主表再从表
删除:先从表再主表

前置条件:
1、主表与从表西段类型一致
2、主表与从表的字符集相同
3、主表被调用的列有索引
4、存储引擎为 InnoDB

# 创建表时添加外键
create table 从表 (...,foreign key(字段) references 主表 (引用字段));

# 添加外键,定义约束名
alter table 从表 add constraint 约束名 foreign key(字段) references 主表(字段);

# 添加外键,不定义约束名,约束名自动生成
alter table 从表 add foreign key(字段) references 主表(引用字段)

# 删除外键
# 1、获取约束名 constraint
show create table 表名;
# 2、删除约束
alter table 表名 drop foreign key 约束名;
# 3、删除索引
drop index 约束名 on 表名;

删除外键
1、获取约束名 constraint
2、删除约束
3、删除索引

如图,CONSTRAINT 后面为约束名,即 COUNTR_REG_FK
在这里插入图片描述

6.3 唯一性(Unique)
# 添加唯一性
alter table 表名 add unique(字段);

# 删除唯一性
alter table 表名 drop index 字段;
6.4 默认值(Default)
# 添加默认值
alter table 表名 alter 字段 set default;

# 删除默认值
alter table 表名 alter 字段 drop default;
6.5 非空(Not Null)
# 使用 change 和 modify 都可以
# 添加非空
alter table 表名 modify 字段 类型(长度) not null;

# 删除非空
alter table 表名 modify 字段 类型(长度) null;
6.6 主键自增长(auto_increment)
# 只有主键 PK 可使用
# 使用 change 和 modify 都可以
# 添加主键自增长
alter table 表名 change 字段 新字段 类型(长度) auto_increment;

# 删除主键自增长
alter table 表名 change 字段 新字段 类型(长度) null;

7. 操作符 Operator


操作符 Operator : 
算数运算符、比较运算符、逻辑运算符、位运算符
7.1 算数运算符
+ , - , * , / , % 
7.2 比较运算符
> , < , >= , <= , = ,<=>
!= , <> : 不等于
is null / is not null : 是否为空

like / not like : 相似 , % 模糊搜索 , _下划线占位符(1)
# '_2%' : 第二位为2的模糊搜索

in / not in : 取值集合
between and : 取值范围
7.3 逻辑运算符
or : 或
and : 与
not : 非
xor : 异或
# 查询优先级 : () > not > and > or
7.4 位运算符
& , | , ^ , ~ , >> , <<

8. 关键字 Keyword


关键字 Keyword : 
union(联合查询)、group by(分组)、having(过滤)、order by(排序)、limit(分页查询)

1、联合查询 : union
   合并重复数据 : SQL1 union SQL2
   不合并重复数据 : SQL1 union all SQL2
   
2、分组 : group by , 条件 : 不同xx

3、过滤 : having 条件(含函数) 
   分组 + 过滤 , 过滤在排序前
   与 where 区别 : where 不用于分组后 , 条件不含函数
   
4、排序 : order by asc / desc (升降序)

5、分页查询 : limit , 常用于 : 排序 + 分页查询
   limit 数字 : 显示前几行 , 相当于 limit 0,数字
   limit 3,1 : 取第三行后的1行数据
   
6、执行顺序 : 
select - from - where - group by - having - order by - limit

9. 常用函数 function


常用函数 : 
sum()avg()max()min()count()distinct()、curdate()、sysdate()

1、求和 : sum()
2、平均值 : avg()
3、最大值 :  max()
4、最小值 : min()
5、统计 : count()
6、去重 : distinct() ,count() 配合使用,统计字段类型
7、系统日期 : curdate() , 返回系统时间 select curdate();
8、系统日期时间 : sysdate() , 返回系统日期时间 select sysdate();

10. 数据 data


10.1 数据类型
数据类型 : 
数值型、字符型、日期时间型、混合型
  • 数值型
整型 : int , integer , tinyint , smallint , mediumint , bigint
	  无符号 - 0 与正整数 : unsigned
	  零填充 : zerofill
	  搭配使用 : int(10) unsigned zerofill
浮点型 : float , double
	  (数值总长度 , 小数长度) ,float(7,2)
  • 字符型
定长 : char , 定长10字节,不足补空格
变长 : varchar (推荐) , 最长10字节,以输入长度为准
文本 : tinytext , text , mediumtext , longtext
二进制 : tinyblob , blob , mediumblob(图片) , longblob(音频视频)
0-M字节二进制 : binary(M) , varbinary(M)
  • 日期时间型
year : YYYY
date : YYYY-MM-DD
time : HH:MM:SS
datetime : YYYY-MM-DD HH:MM:SS
timestamp(时间戳) : YYYYMMDD HHMMSS
					输入 NULL , 则转为当前系统日期时间
  • 混合型
enum(枚举类型) : 单选
set(集合类型) : 多选
10.2 查询数据
查询数据 :
1、一般查询 : 单表查询 , 多表查询
2、内连接 inner join - on
3、外连接 : 左连接 left join - on , 右连接 right join - on
4、子查询 : 嵌套 , all , any
  • 一般查询(单表查询、多表查询)
# 查询语句执行顺序
select - from - where - group by - having - order by - limit

# 单表查询
# 查询所有数据
select * from 表名;
# 查询某字段
select 字段 from 表名;
select 字段 from 表名 where 条件;
# 复杂查询 : where + group by 分组 + having + order by 排序 + limit 分页查询
select 字段 from 表名 where 条件 group by 字段 having 条件 order by asc/desc limit 数字;

多表查询
步骤:
1、了解查询的数据和条件分布在哪些表中
2、多表间是否有联系条件 : 直接联系(相同字段) , 间接联系(共同引用字段)
3、结合其他条件

# 多表查询语句  
select 别名.字段 - from1 as 别名1 ,2 as 别名2 ,... - where 联系条件 and 其他条件
# 联系条件 : 别名1.字段 = 别名2.字段
  • 内连接查询(inner join)
    在这里插入图片描述
内连接 : inner join- on 条件 , 返回符合条件的数据
inner 可省略 
每个 inner join 后只能添加一张表 , 多个表使用多个 inner join

# 内连接查询语句
select 别名.字段 - from1 as 别名1 - inner join 表名2 as 别名2 - on 联系条件 and 其他条件 - ...
  • 外连接查询(左连接 left join、右连接 right join)
    在这里插入图片描述
外连接包括 : 左连接、右连接
外连接与内连接区别 
外连接 : 返回符合条件的数据 , 和不符合条件的数据为 null
使用条件 : 某条件含不同情况

# 左连接 left join
# 以第一个表为左表 , 左表所有值都列出,返回符合条件的右表数据 , 不符合条件则值为 null
select 别名.字段 - from1 as 别名1 - left join 表名2 as 别名2 - on 联系条件 and 其他条件 - ...

# 右连接 right join 
# 以最后一个右表为主 , 右表所有值都列出,返回符合条件的左表数据 , 不符合条件则值为 null
select 别名.字段 - from1 as 别名1 - right join 表名2 as 别名2 - on 联系条件 and 其他条件 - ...
  • 子查询(嵌套,all,any)
# 外部查询与子查询之间有相同字段或为子集
select - from (子查询) as 别名 - where - 条件
# 多种写法
select - from (select - from - where) as 别名 - where
select - from - group by - having - (select - from - where)
select - from - where - in (select - from - where)
#
# all 用法
# 都不等于
select - from - where - <>all(子查询)
# 大于最大(大于所有)
select - from - where - >all(子查询)
# 小于最小(小于所有)
select - from - where - <all(子查询)

# any 用法
# 任意一个相等
select - from - where - =any(子查询)
# 大于最小(大于任意)
select - from - where - >any(子查询)
# 小于最大(小于任意)
select - from - where - <any(子查询)
10.3 插入数据
# 插入数据
insert into 表名 (字段) values ();
# 数据与字段个数一致,省去字段
insert into 表名 values ();
insert into student (sid,sname,gender) values ('001','张三','男');
insert into student values ('001','张三','男');

# 插入其他表数据
insert into1 select 字段 from2;
insert into student select sid,sname,gender from stu;
10.4 更新数据
# 更新数据
update 表名 set 修改字段 where 条件;
update student set gender='女' where sid='001';
10.5 删除数据
# 删除数据
delete from 表名 where 条件;
delete from student where sname='张三';

# 清空表数据
# 可恢复
delete from 表名;
# 不可恢复,删除速度快
truncate 表名;


11. 用户管理及授权 User


11.1 用户类型
管理员 : root 具有最高权限
非管理员 : 由 root 创建和分配权限
11.2 主机IP类型
主机类型 : % , localhost , IP地址
% : 任何机器可访问
localhost : 只能在本地访问
IP地址 : 在指定 IP 的机器上可访问
11.3 权限类型(9种)
权限类型 (9) : 
create . drop , alter , insert , select , update , delete , all privileges , usage

create : 创建库、表、视图、存储过程
drop : 删除库、表、字段、约束、视图、存储过程
alter : 修改库、表、字段、约束
insert : 插入数据
select : 查询数据
update : 修改数据
delete : 删除数据
all privileges : 所有权限
usage : 没有权限,只能连接数据库
11.4 创建用户及授权
创建用户及授权
1、创建用户
2、用户授权
3、刷新授权表

# 1、创建用户 
# password() 加密函数
insert into mysql.user (host,user,password) values ('主机IP','用户名',password('密码'));

# 2、用户授权 
# grant - on - to - indentified by 
# *.* : 所有库,每个库的所有表
# 主机IP : % , localhost , IP地址
grant 权限 on 库名.表名 to '用户名'@'主机IP' identified by '密码';

# 3、刷新授权表
flush privileges;
11.5 查看用户权限
# 查看所有用户
select user,host from mysql.user;

# 查看用户权限
# 主机IP : % , localhost , IP地址
show grants for '用户名'@'主机IP';

# 查看当前用户权限
show grants;
11.6 回收用户权限
回收用户权限
1、查看用户权限
2、回收用户权限
3、刷新权限表

# 1、查看用户权限
show grants for '用户名'@'主机IP';

# 2、回收用户权限
# revoke - on - from '
revoke 权限 on 库名.表名 from '用户名'@'主机IP';

# 3、刷新权限表
flush privileges;
11.7 删除用户
# 删除用户
drop user '用户名'@'主机IP';

# 删除任意主机(%)的远程用户
drop user '用户名';
11.8 修改密码
# 修改密码
update mysql.user set password=password('新密码') where user='用户名' and host='主机IP';
# 刷新授权表
flush privileges;

12. 事务 Transaction


12.1 前提
数据库引用了 Innodb (mysql 默认)、NDB、SEQUENCE 引擎
12.2 定义
一个事务对应一个完整的业务
事务是一个不可分割的最小工作单元
事务由单独单元的一个或多个 SQL 语句组成
12.3 作用
事务作用
1、维护数据库的完整性 , 保障多条 SQL 语句 , 同时处理成功 , 或同时处理失败
2、如果某条 SQL 语句执行失败 , 整个事务将会回滚 , 取消操作 , 如银行转账
3、事务管理 DML 数据操纵语句 : insertupdatedelete
12.4 特性
事务特性:
原子性、一致性、隔离性、持久性

1、原子性 : 
事务是一个不可分割的最小工作单元 (全部成功、全部失败)

2、一致性 : 
事务前后数据的完整性必须保持一致 (受 DML 语句影响、或不受影响)

3、隔离性 : 
防止多个事务并发执行时 , 交叉执行导致数据不一致
级别由低到高,并发性能由高到低 : 
> 未提交 : 一个事务可以读到另一个事务未提交的结果
  - 脏读 : 
  - 1、事务a修改数据 , 但未提交
  - 2、事务b读到事务a未提交的更新结果
  - 3、事务a提交失败 , 事务b读到的是脏数据

> 读提交 : 一个事务提交后 ,其更新结果才能被其他事务看到,解决脏读问题
  - 不可重复读 : 在同一个事务中 , 对于同一份数据读取到的结果不一致
				 事务b在事务a提交前读到的数据 , 与事务a提交后读到的数据可能不同

> 可重复读 :
在一个事务中 , 对同一份数据的读取结果是相同的,无论其他事务是否对该数据进行操作 ,
以及这个事务是否提交 , 解决脏读、不可重复读问题 , 不能解决幻读问题
  - 幻读 : 在同一事务中 , 同一个查询多次返回的结果不一致 , 如新增记录

> 串行化 : 
事务串行化执行 , 解决并发所有问题
隔离级别最高 , 牺牲系统并发性

4、持久性 : 
一旦事务提交 , 则其所做的修改就会永久保存到数据库中 (即使系统崩溃)
12.5 术语
事务术语 :
开始、回滚、设置保存点、回滚到保存点、提交事务

# 开始事务 
begin;start transaction;
# 回滚事务
rollback;
# 设置保存点
savepoint 保存点名;
# 回滚到保存点
rollback to 保存点名;
# 提交事务\
commit;
12.6 步骤
事务步骤
1、查看事务提交模式
# 默认为 1 自动提交 , 0 手动提交
select @@autocommit;

2、设置事务提交模式
# 关闭自动提交
set autocommit=0;

3、开始事务
begin;start transaction;

4、设置保存点 a
savepoint a;

5、DML 语句 : insert , update , delete

6、回滚 : rollback;
或回滚到保存点 a : rollback to a;

7、提交事务
commit;
# 提交事务后 , 保存点消失 , 回滚失效

13. 远程连接 Remote Connect

  • 连接本地数据库
mysql -u 用户名 -p
# 输入密码
  • 导入导出本地数据
# cmd 切换到在 mysql 安装目录下 : cd /mysql/bin
1、导入本地数据
mysqldump -u 用户名 -p 库 < 文件路径
# 输入密码
mysqldump -u root -p test < D:\test\sql

2、导出本地数据
mysqldump -u 用户名 -p 库 > 文件路径
# 输入密码
mysqldump -u root -p test > D:\test\sql
  • 连接远程数据库
-- 服务器 mysql

1、在服务器创建指定 IP 地址的新用户
insert into mysql.user(host,user,password) values ('ip地址','用户名',password('密码'));

2、新用户授权
grant 权限 on 库.表 to '用户名'@'IP地址' identified by '密码';

权限类型 (9) : create . drop , alter , insert , select , update , delete , all privileges , usage

3、刷新授权表
flush privileges;
-- 客户端(IP地址)
连接远程数据库

mysql -h ip -u 用户名 -p
# 输入密码
mysql -h 172.30.67.98 -u abc -p
  • 导出远程数据
mysqldump -h ip -u 用户名 -p 库名 > 文件路径
mysqldump -h 172.30.67.98 -u abc -p test > D:\test.sql
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值