目录
安装软件推荐
mysql官方链接
启动MySql服务
启动MySql服务:win+r调出,然后输入cmd 回车
开启服务:net start mysql
关闭服务:net stop mysql
然后就可以开始了
登录sql :mysql -u账号 -p密码
了解一下mysql的目录
配置文件目录:my.ini(剩下的以后慢慢了解)
MySql数据目录
- 数据库 == 文件夹
- 表 == 文件
- 数据 == 文件里面存储的数据
什么是sql?
全程:Structred query language(数据化查询语言)
sql也是通用语法(就和普通话和家乡话一样sql就是普通话)
- sql可以单行或多行书写,以分号结尾(重要)
- 使用空格和缩进增强可读性(让自己的代码看起来更美观)
- mysql数据库sql语句不分大小写,关键字建议大写
每种语言都有注释Sql当然也有
单行注释
- --空格 注释
- # 注释
多行注释
- /* 注释 */
Sql的分类
分四类
- DDL 操作数据库和表
- DQL 查询表中的数据
- DML 增删改查数据
- DCL 授权(客户操作数据库的授权)
DDL(CRUD)也是操作数据库和表
所谓操作数据库可想而知是对数据库进行操作有哪些操作呢?
操作数据库
- C:创建
- 单词 create(创建),databases(数据库)
- 语法:create databases;==创建数据库;
- 单词 create(创建),databases(数据库)
- R:查询
- 单词show(显示)
- 语法:show databases;==显示所有数据库;
- 单词show(显示)
- U:修改
- 单词altar(改变)character set(字符集)
- 上面提到字符集修改肯定就是修改数据库的字符集
- 语法:altar databases 数据库名 character set 字符集;==修改数据库的字符集
- 单词altar(改变)character set(字符集)
- D:删除
- 单词drop(删除)
- drop databases 数据库名 ;(每条语句都要分号结尾)
- 单词drop(删除)
操作表
其实和上面的操作数据库是差不多的只是把数据库的(databases)换成表(tables)
- C:创建
- create tables(
列名1,类型1,
列名2,类型2,
列名n,类型n,
);==创建表
类型分为:
- int整性
- double(最多位数,保留的小数位)
- date 日期类中的 年月日
- datetime 日期类中的 年月日时分秒
- timestamp 系统时间(一般设置值为null)
- varchar 字符串
- R:查询
- shwo tables;==查询表
- desc 表名;==查询表的结构
- U:修改
- alter table 表名 add 列名 数据类型; == 添加一列
- alter table 表名 add 列名 modify 列名 新类型;==修这个列的数据类型
- alter table 表名 add 列名 change 新列名 新类型;==修改这一列的列名及其类型
- D:删除
- alter table 表明 drop 列名; == 删除这一列
DML
增删改查表中的数据
-
增加表数据
- 单词 insert into(插入)
- 语法:insert into 表名(列名1,列名2) values(值1,值2)
- 红色可以不写
-
- 语法:insert into 表名(列名1,列名2) values(值1,值2)
- 注意:1.列名和表明一 一对应
- 单词 insert into(插入)
2.除了数字类型,其他类型都需要用引号
-
删除表数据
- 单词 delete from(从什么删除)
- 语法: delete from 表名 ;== 删除表中所有数据
- 语法:delete from 表名 where 条件(条件: 这个地方可以是每个字段名== 什么) ;== 删除表中的符合条件的一列
- 注意:
- 如果不加条件,则删除表中的所有数据
- 如果真的要删除表中的所有数据: 建议使用: 语句== tryncate tabkle 表明;tryncate(截断
- 注意:
- 单词 delete from(从什么删除)
-
修改数据
- 单词 update(更新) set(获得)
- update 表名 set 字段1= 值1,字段2 = 值2 ,字段n = 值n;==修改表中所有 字段1 字段2 设的值表中都会修改
- 单词 update(更新) set(获得)
DQL
DQL几种查询
- selest
- 字段列表
- from
- 表明列表
- where
- 条件列表
- group by
- 排序列表
- limit
- 分页限定
-
字段
- 查字段
- 语法:select 字段名1,字段名2 from 表名;==查询字段1和字段2的两列数据
- 如果查询所有列, 用*号代替字段名
- 去重复字段
- 语法:select distinct 字段名1,字段名2 from 表名;
- 两个字段就要两个字段完全一样,才能去重复。
- 计算列
- 语法:SELECT 字段1, 字段2,字段3 , (IFNULL(字段2,0)+字段3) FROM 表名; == 计算字段2和字段3的值,并且如果字段2是null替换成0;
- 起别名
- 语法:SELECT 字段1 as 名称, 字段2 as 名称,字段3 as 名称 , (IFNULL(字段2,0)+字段3) as 名称 FROM 表名; == 加 as 可以起一个自己认识的名字 ,as可以不写
- 查字段
-
条件查询
-
OR 关键字
- 语句:select * from 表名 where 字段1= 值 OR 字段2= 值; == 查询的是满足字段1 或 字段2 的数据
- BETWEEN AND 关键字
- 语句:select * form 表明 where 字段 BETWEEN 值1 AND 值2;== 查询的是 字段 的 值1 到 值2 之的所有数据
- IS NOT NULL 和 IS NULL关键字
- select * form 表明 where 字段 IS NOT NULL;== 查询的是 null的数据
- select * form 表明 where 字段 IS NULL;== 查询的是 不是null的数据
- IN 关键字
- select * form 表明 where 字段 in(值1,值2,值3);== 查询的是 跟值1,值2,值3 对应的值。
- and == &&,or == || ,not == !;
-
-
排序查询
- order by 排序的字段1 排序方式 ,排序字段2 排序方式 ;
- 排序方式有两种
- ASC 升序; 不写默认也是升序
- DESC 降序;
- 排序方式有两种
- order by 排序的字段1 排序方式 ,排序字段2 排序方式 ;
-
聚合函数:将一列数据作为一个整体,进行纵向计算
- select 聚合函数(字段名)from 表明;
- 聚合函数有5种
- count:计算个数
- max:计算最大值
- min:计算最小值
- sum:计算和
- avg:计算平均值
- 聚合函数有5种
- 注意:如果一个数是null 聚合函数的不会加入计算,解决方法ifnull(字段名,0)把这个null的值替换成0;
- select 聚合函数(字段名)from 表明;
-
分组查询
- 语法:select 字段名1 聚合函数(字段名2).... from 表名 group by 字段名1;
-
where 和 having 的区别
- where 一般在分组字段之前就限定了,如果不满足条件,不参与分组
- having在分组之后进行限定,如果不满足不会被查询出来
- 分页查询
- 把一张表分成多页进行查询
- 语法limit:select * from 表名 limit 开始的页 , 共多少页;
- 公式: 开始的页数 = (当前页数-1)*共有多少页
- 把一张表分成多页进行查询
-
约束
- 分类
-
主键约束:primary key
- 语法,创建表之前添加主键约束
- 语法:
- 语法:
- 在创建表之后添加主键
- 语法: alter table 表名 modify 字段名 字段类型 primary key;
- 删除主键
- 语法:alter table 表名 DROP primary key;
- 语法,创建表之前添加主键约束
-
非空约束:ont null
- 语法,创建表之前添加非空约束
- 语法:
- 语法:
- 在创建表之后添加非空
- 语法: alter table 表名 modify 字段名 字段类型 not null;
- 删除非空约束
- 语法:alter table 表名 modify 字段名 字段类型;
- 语法,创建表之前添加非空约束
-
外键约束:foreign key
-
foreign key 让表与表之间建立关系, 从而保证数据的完整性。
- 创建表时添加外键
- 语法
- 语法
- 在创建表之后添加外键
- alter table add 【CONSTRAINT 起的名字】 FOREIGN KEY(本表的字段名) REFERENCES 外表名(外表字段名)
- 删除外键
- alter table DROP foreign key 起的外键字段名
- 创建表时添加外键
-
-
唯一约束:unique
- 语法,创建表之前添加唯一约束
- 语法,创建表之前添加唯一约束
- 语法:
- 语法:
- 在创建表之后添加非空
- 语法:alter table 表名 modify 字段名 字段类型 unique;
- 删除唯一约束
- alter table 表名 DROP INDEX 字段名 unique;
- 语法,创建表之前添加唯一约束
- 语法,创建表之前添加唯一约束
-
- 分类
-
级联操作
- 添加级联
- 语句:ARTER TABLE ADD CONSTRAINT 起名的外键名 foreign key(需要级联的字段名)referances 另一个表名称(另一个表的字段名) ON UPDATE CASCADE ;
- 删除级联
- 语句:ARTER TABLE ADD CONSTRAINT 起名的外键名 foreign key(需要级联的字段名)referances 另一个表名称(另一个表的字段名) ON DELETE CASCADE ;
- 添加级联
-
数据库设计
- 多表之间的关系
-
一对一的关系
- 实现方法:可以在任意发一方添加唯一的外键添加任意一方的主键
-
一对多的关系
- 实现方法:在多的一方建立外键,指向一方的主键
-
多对多的关系
- 实现方法:借助第三张中间表,中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键
- 语句:创建表的时候建立第三章中间表,分别链接两个表的主键
- CREATE TABLE 表名(
rid INT ,
sid INT,
PRIMARY KEY(这个表的字段1,这个表的字段2),
FOREIGN KEY(这个表的字段1) REFERENCES 另一个表的表明(另一个表的,主字段),
FOREIGN KEY(这个表的字段2) REFERENCES 另一个表的表明(另一个表的,主字段)
)
-
- 多表之间的关系
-
数据库的范式
- 概念:设计数据库的时,需要遵循的一些规范
- 关系数据库的范式有六种
-
第一范式(1NF)
- 正常创建的数据库都是第一范式
- 第一范式的问题:
- 沉于(有重复数据)
- 非法添加字段
- 非法删除字段
- 第一范式的问题:
- 正常创建的数据库都是第一范式
-
第二范式(2NF)
-
在第一范式的基础上,非码属性必须完全依赖于侯选码
- 函数依赖 A ———>B 如果通过A属性(属性组)的值,可以确定唯一的B属性的值,称之为B依赖于A
- A属性:通过 字段1 的值可以确定唯一的 字段2 的值
- A属性组:通过 字段1和字段2 可以确定唯一的 字段3 的值
- 完全函数依赖
- 如果A是属性组,则B属性的值必须得确定依赖A属性组中的所有值
- A属性组:通过 字段1和字段2 可以确定唯一的 字段3 的值
- 如果A是属性组,则B属性的值必须得确定依赖A属性组中的所有值
- 部分依赖
- 如果A是属性组,则B属性的值只需要依赖A属性组中的某一个值
- A属性组:通过 字段1 或 字段2 可以确定唯一的 字段3 的值
- 如果A是属性组,则B属性的值只需要依赖A属性组中的某一个值
- 传递依赖
- A --> B, B --> C 如果通过A属性(属性组) 的值,可以确定唯一的B属性值,在通过B属性(属性组) 的值,可以确定唯一的C属性值
- A属性组的 字段1 或 字段2 可以确定唯一的 B属性字段3 的值 ,在通过B属性(属性组)字段3 可以确定唯一的 C属性字段4 的值,称为传递依赖
- 码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖则称之为这属性(属性组)为该表的码
- 主属性:码属性中的所有属性
- 非主属性:除过码属性组的所有属性
- A --> B, B --> C 如果通过A属性(属性组) 的值,可以确定唯一的B属性值,在通过B属性(属性组) 的值,可以确定唯一的C属性值
- 函数依赖 A ———>B 如果通过A属性(属性组)的值,可以确定唯一的B属性的值,称之为B依赖于A
-
-
第三范式(3NF)
- 在2NF的基础上,任何非主属性不依赖于其他非主属性(在2NF的基础上消除了传递依赖)
-
巴斯范式(BCNF)
-
第四范式(4NF)
-
第五范式(5NF)
-
总结前三种范式(想要遵守后面的范式就要先遵守前面的范式)
- 1NF大量数据在一张表中(大量的沉余)
- 2NF解决了沉余问题但是添加信息并不合法和删除不合法
- 3NF解决了前面的所有问题
-
- 关系数据库的范式有六种
- 概念:设计数据库的时,需要遵循的一些规范
-
数据库的备份与还原
- 这个事情一般是DBA(数据库管理员)这个岗位做的事情
-
命令备份
-
mysqldum -u用户名 -p密码 备份数据库名 > 保存的路径
-
-
还原数据库:
- 登录数据库
- 创建数据库:creat databases 数据库名,还原数据库必须先创建一个数据库
- 使用数据库:use 数据库名
- 执行文件还原:source 路径名称
-
- 这个事情一般是DBA(数据库管理员)这个岗位做的事情
-
多表查询
- 主要作用消除无用数据
- 笛卡尔积:有两个集合A,B取这两个集合的所有情况
- 语法:select * from 表1,表2
- 多表查询分类
-
内连接的查询
- 隐式内连接
- 语法:select * from 表1 表2 where 表1. 字段 = 表2.字段
- 显式内连接:
- 语法:SELEC * FROM 表1 JOIN 表2 ON 判断语句
- 隐式内连接
-
- 笛卡尔积:有两个集合A,B取这两个集合的所有情况
- 主要作用消除无用数据
每个条语句或多或少都有中文书写想直接复制是不可能都给我练习使劲敲 更新到这里下次在更新!!