提示:以下所有内容都是对黑马视频的讲解的集合,仅用于学习交流
目录
1.ddl( data definition language)数据定义语言,用来定义数据库对象(数据库,表,字段)
2、dml(data manipulation language) 数据操作语言用来对数据库表中的数据进行增删改
3、dql(data query language) 数据查询语言,用来查询数据库中表的记录
4、dcl(data control language)数据控制语言,用来创建数据库用户,控制数据库
前言
一,mysql的安装:
这里的安装教程是mysql社区版(免费版),有钱的小伙伴也可以下载专业版
参考安装教程:http://t.csdnimg.cn/pl4e1
二,关于编译的软件:
在这里推荐三款软件:
sqlyog navicat 和 datagrip
个人推荐navicat,因为它所需求的代码量十分少,对一些不熟练sql代码的人也能灵活运用,但是如果你想熟练掌握代码的话,可以使用datagrip或者 sqlyog
naviact 免费下载和安装教程: 星浩工具站(微信公共号)
提示:以上的各种软件的安装及使用教程与本人无关,只用于学术交流,其他用途后果自负!
一、基础篇
一 ,sql的通用语法:
1 sql语句可以单行或多行书写,以分号结尾
2,sql语句可以使用空格/缩进来增强语句的可读性
3,mysql数据库的sql语句可以不区分大小写,关键字建议大写
4,注释:
单行注释:--注释内容或#注释内容(mysql特有)
多行注释:/*注释内容*/
二、mysql的分类
1.ddl( data definition language)数据定义语言,用来定义数据库对象(数据库,表,字段)
数据库操作代码及注释
查询所有数据库: SHOW DATABASES
查询当前数据库: SELECT DATABASE()
创建: CREATE DATABASE [IF NOT EXISTS] 数据库名 [ DEFAULT CHARSET 字符集 ] [COLLATE 排序规则]
if not exists 的意思是如果我创建的数据库的名字存在就不执行。不存在就创建。
collate同理
default charset 指定字符集,没有就是默认的,字符集最好使用utf8mb4(拥有四个字节的utf8)
删除 某数据库
DROP DATABASE [IF EXISTS] 数据库名
if exists 同上
使用 某数据库
USE 数据库名
表操作代码及注释
查询:
查询当前数据库的所有表: show tables;
查询表结构:desc 表名
查询指定表的建表语句: show create table 表名;
创建:
create table 表名(
字段1 字段1类型[ comment 字段1注释 ] ,
字段n 字段n类型[ comment 字段n注释 ]
) [comment 表注释 ];
注意最后一个字段是没有‘,’
表操作
字符段的增加
Alter table 表名 add 字段名 类型(长度)[comment 注释] [约束]
字符段的修改
修改数据类型
Alter table 表名 modify 字段名 新数据类型(长度)
修改字段名和字段类型
Alter table 表名 change 旧字段名 新字段名 类型(长度)[comment 注释] [约束]
删除字段
Alter table 表名 drop 字段名;
表名的修改
Alter table 表名 rename 新表名
表的删除
Drop table [ if exists] 表名;
删除指定表,并重新创建该表
Truncate table 表名;
2、dml(data manipulation language) 数据操作语言用来对数据库表中的数据进行增删改
Dml
1,给指定字段增加数据
Insert into 表名(字段名1,字段名2,…)values(值1,值2);
提示:这里是将值1添加进入字段名1,值2添加进入字段名2,
2,给全部字段添加数据
Insert into 表名 values(值1,值2);
提示:这里是将所有的值插入字段中,并且每个字段的值相同
3,批量添加数据
Insert into 表名(字段名1,字段名2)values(值1,值2),(值1,值2);
Insert into 表名values (值1,值2),(值1,值2);
注意:
在插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
字符串和日期型数据应该包含在引号中
插入的数据大小,应该在字段的规定范围内
3、dql(data query language) 数据查询语言,用来查询数据库中表的记录
3.1 基本查询
1,查询多个字段
select 字段1,字段2,字段3 from 表名;
select * from 表名; # 查询表中所有数据
2,设置别名
select 字段1 [as 别名1], 字段2 [as 别名2] from 表名;
被修改别名的字段,后续操作只能使用别名
3,去除重复记录
select distinct 字段列表 from 表名;
3.2 条件查询
条件查询语法
select 字段列表 from 表名 where 条件列表;
3.3 聚合函数
将一列数据当成一个整体,进行纵向计算
select 聚合函数(字段列表) from 表名;
3.4 分组查询
语法
select 字段列表 from 表名[where 条件] group by 分组组名 [having 分组条件];
where与having的区别:
1,where的优先级大于having,先where条件判断以后再判断having
2,只有having才能使用分组条件,where不行
3.5 排序查询
语法:
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
排序方式
1,asc 升序
2,desc 降序
3.6分页查询
语法:
select 字段列表 from 表名 limit 起始索引,查询记录数;
注意:
1,起始索引从0开始
2,查询索引的关键词每个语言都不同,mysql是limit
3,若查询的页数为第一页,起始索引可以省略,直接写为 limit 10
4、dcl(data control language)数据控制语言,用来创建数据库用户,控制数据库
的访问权限
4.1操作函数
1,查询权限
show grants for '用户名' @ '主机名';
2,授予权限
grant 权限列表 on 数据库名.表名 to '用户名' @ '主机名';
3,授予权限
revoke 权限列表 on 数据库名.表名 to '用户名' @'表名';
4.2 字符串函数
4.3 数值函数
4.4 日期函数
4.5 流程函数
三 约束与多表查询
一. 外键
1.1 定义
设F是基本关系R的一个或一组属性,但不是关系的键,Ks是基本关系S的主键。如果F与Ks相对应,则称F是R的外键,并称基本关系R为参照关系,基本关系S为被参照关系或目标关系。
总结:外键就是用来联系两个表或者组的桥梁
1.2 外键约束
1.2.1 定义
约束:
作用表中字段的规则,用于限制存储在表中的数据。
目的:用户保证数据库中数据的正确性,有效性和完整型;
外键约束:就是用来让两张表的数据之间建立联系,从而保证数据的一致性和完整性。
有外键的表叫做子表,与外键相关联的表叫做父表
1.2.2 语法
1.添加外键
create table 表名(
字段名 数据类型;
[constraint] [外键名称] foreign key (外键字段名) references 主表(主表列名)
);
alter table 表名 add constraint 外键名称 foreign key (外键字段名) REFERENCES 主表(主表列名);
2.删除外键
alter table 表名 drop foreign key 外键名称;
1.2.3 删除外键出现的 删除/更新关系
1.3 外键与多表查询
1.3.1 定义
多表关系: 一对多 多对多 一对一
一对多:在多的一方建立外键,指向一的乙方的主键
多对多:建立第三张中间表,中间表至少包含两个外检,分别关联两方主键。
一对一:一对一关系多用于单表拆分,将一张表的基础字段放在一张表中,其他详细信息放在另一张表中,用来提升操作效率。实现:在任意一方加入外键,关联另一方的主键,并且设置外键为唯一的(unique)
在进行多表查询时,为了避免重复去掉多余的笛卡尔积,我们一般会采用条件查询。来去除多余的笛卡尔积。
1.3.2 内连接
用于查询两表交集的部分
语法
1,隐式内连接
select 字段列表 from 表1,表2 where 条件;
2,显示内连接
select 字段列表 from 表1 [inner] join 表2 on 连接条件;
1.3.3 外连接
语法
1.左外连接
select 字段列表 form 表1 left [outer] join 表2 on 条件;
相当于查询左表的所有数据包含左表和右表交集的数据
2.右外连接
select 字段列表 from 表1 right [outer] 表2 on 条件;
相当于查询右表的所有数据包含右表和左表交集的数据
1.3.4 自连接
语法
select 字段列表 from 表1 别名 a join 表2 别名 b on 条件;
自连接查询可以是内连接查询也可以是外连接查询
1.3.4 联合查询
联合查询分为 union 和union all
union查询就是把多次查询的结果结合起来,形成一个新的查询集
union all 则是将这个新的查询集进行去重
语法
select 字段列表 from 表a
union [all]
select 字段列表 from 表b;
对于联合查询的每张表的列数需要相同,字段类型也要保持一致
1.3.5 子查询
所有子查询的语法基本一致,差距一般在条件中,每类子查询的条件的操作符都有所不同
1.3.5.1 标量子查询
定义:子查询返回的结果是单个值
常用的操作值 = ,<>,>,>=,<,<=
语法 标量子查询没有较标准的语法模版
select 字段列表 form 表名 where 条件;
只要是条件满足返回的是单个值就是标量子查询
1.3.5.2 列子查询
1.3.5.3 行子查询
1.3.5.4 表子查询
四, 事务
一,事务简介
事务是一种操作的集合,是一个不可分工的工作单位,事务会将所有操作作为一个整体向系统提交或撤销操作。
二,事务的四大特性
1,原子性:事务是最小的操作单元要么全部成功要么全部失败
2,一致性:事务完成时,必须使所有数据保持一致状态
3,隔离性:数据库系统提供的隔离机制,保证事务在不收外部并发操作影响下的独立环境运行
4,持久性:事务一旦提交或回滚后,对数据库的改变是永久的