码迷,mamicode.com
首页 > 数据库 > 详细

MYSQL基础知识

时间:2020-04-16 22:22:01      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:eve   基础   传递依赖   编号   不一致   行记录   非空约束   employee   cti   

关系型数据库管理系统:

掌握知识点:

DDL 数据定义语言

DML 数据操纵语言

DQL 数据查询语言

DCL 数据控制语言

数据库基本操作:

DDL : 建表、建库

库 -> 多张表 -> 数据

查看当前MYSQL有哪些数据库:
show databases;
创建数据库:
create database 数据库名称;
删除数据库:
drop database 数据库名称;
查看创建数据库语句:
show create database 数据库名称;
查看正在使用的数据库:
select database();
查看数据库版本:
select version() ;
删除数据库:
drop database 数据库名称;

使用数据库:
use 数据库名称;

创建表语句:

create table 表名称(
列名称 列类型 约束,
...
列名称 列类型 约束
)

查看数据库中拥有哪一些表:
show tables;
查看创建表的语句:
show create table 表名称;
查看表结构:
desc 表名称;
快速创建表:
create table 新表名称 like 表名称;

修改表结构:
添加列:
alter table 表名称 add 列名称 列类型;
修改列(列类型):
alter table 表名称 modify 列名称 列类型;
修改列(列名称):
alter table 表名称 change 列名称 新名称 列类型;
删除列:
alter table 表名称 drop 列名称;
修改表名称:
rename table 表名称 to 新表名称;
修改表的字符集编码:
alter table 表名称 character set 字符集

DML语句: 数据操作语句

添加数据:
第一种(指定列):
insert into 表名称(列名称,列名称,...) values(值,值,...);
第二种(插入所有列):
insert into 表名称 values(值,值,...);
注: 一定是插入表的所有列,其次插入值的顺序需要跟表结构中列的顺序一致。所有类型的列,都可以插入null值

修改语句:
第一种(根据限定条件修改某一行或者某几行中的指定列的值):
update 表名称 set 列名称= 值, ... ,列名称 = 值 where 限定条件;

第二种(修改表的所有的行中指定类的值)
update 表名称 set 列名称= 值, ... ,列名称 = 值;

删除语句:
第一种(删除某一行或者某几行数据)
delete from 表名称 where 限定条件

第二种(清空表数据)
delete from 表名称;

DQL: 1、数据查询语句(获取数据库表中的数据)

select 列名称,...,列名称 from 表名称 ; 查看表中该列的所有数据

select 列名称,...,列名称 from 表名称 where 限制条件 ; 获取满足限制条件的指定行中指定列的值

select * from 表名称 ; 查看表的所有记录

给列取别名称:

select 列名称 as ‘别名称‘,...,列名称 from 表名称 where 限制条件

2、查询关键字

distinct : 去重

注: 当distinct限制多列是,多列的值都一样,则看为一条记录。

3、列运算:

例如:select empName, empSalary*12 as ‘年薪‘ from emp;

4、条件查询:
> < >= <= <>(不等于)
in(范围)
between...and...
like : 模糊查询 (%:任意多个字符 _任意一个字符)
is null: 为null的列
not:

聚合函数(将结果集中的多行记录合并成一条记录进行显示,聚合函数忽略null值)
max(列名称)
获取最高的英语成绩是多少?
select max(escore) from student;

min(列名称)
获取最小的英语成绩是多少?
select min(escore) from student;

sum(列名称)
获取所有英语成绩的总和?
select sum(escore) from student;

avg(列名称)
获取所有英语成绩的平均值?
select avg(escore) from student;

count(列名称)
统计有英语成绩的学员有多少个?
select count(escore) from student;
统计表中有多少行记录?
select count(*) from student;

结果分组
group by 列名称

将查询中相同的记录分为一组 ,显示一条记录

having字句:
对分组后的结果再次进行筛选。

获取总的人数大于等于2的结果?

select count(sex) as ‘countSex‘,sex
from student
where age between 16 and 20
group by sex
having countSex>=2;

or

select count(sex),sex
from student
where age between 16 and 20
group by sex
having count(sex)>=2;

 

总结SQL大致结构:

select 列名称,...列名称
from 表名称
where 限定条件
group by 列名称
having 筛选
order by 排序

 

 

 

limit(从结果集中获取指定的一些数据)

获取表的前两条记录?
select * from student limit 2;
or
select * from student limit 0,2;

select * from student limit 2,3;

 

约束:
作用:对表中的数据进行限制,保证数据的正确性、有效性和完整性

主键约束:(非空且唯一)
经常用户标识表中该行数据的唯一性标识。
primary key
auto_increment : 一般用于主键为整型,且自动递增

create table Employee(
empId int primary key auto_increment,

)

外键约束:
一个表中的某一列的值依赖于其它表的某一列的值.

工具演示的方式:
级联操作: 主表发生改变时,从表也必须进行维护。

唯一性约束: unique
非空约束:not null
检查约束(mysql的5.xxx版本演示不了): check(age>0 and age<=120)

 

数据库范式:
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,
各种范式呈递次规范,越高的范式数据库冗余越小。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、
第四范式(4NF)和第五范式(5NF,又称完美范式)。

第一范式(1NF) : 指数据库表的每一项,是一个不可分割单元。(每一列不能再拆分)

第二范式(2NF) : 在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)

函数依赖:
通过A属性的值,可确定唯一的B属性的值。说B属性值依赖A属性值

例如:
通过学生学号可以确定唯一的学生名字。姓名依赖于学号
学生编号 ---> 学生姓名

完全函数依赖:
通过A属性(属性组)值,可以确定唯一的B属性的值,说B属性值完全依赖A属性(属性组)

通过学号+ 课程名称 可以确定唯一的分数,说分数完全依赖 属性组(学号+ 课程名称)

部分函数依赖:
通过A属性组的部分值,可以确定唯一的B属性的值,说B属性值非完全依赖A属性组
属性组(学号+ 课程名称),确定唯一的姓名 ,但是姓名只依赖一属性组(学号),姓名部分依赖一属性组

传递函数依赖:
通过A属性值确定唯一的B属性的值,通过B属性的值来确定唯一的C属性值。称C传递依赖于A。

A->B->C
学号->系号->系主任
码属性: 属性或者属性组 - 码属性
非码属性 : 除了码属性以外都是非码属性。

第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

 

多表连接查询: 将多个表中记录连接在一起,返回一个完整数据结构。

笛卡尔积:
select * from employee,dept;

返回两张表乘积 - 笛卡尔积

内连接:
inner join ... on

外连接:

左外连接:
left outer join ... on ...

右外连接:
right outer join... on...

 

 

事务:
一个或者多个逻辑处理单元(数据操作DML)。要么一起成功,要么一起失败。

开启事务: start transaction;

提交事务: commit

回滚事务: rollback

MYSQL中 自动提交事务:
需要查看是否提交数据:
select @@autocommit 1: 自动提交 0: 手动提交

set autocommit = 0;

事务特性:
原子性:一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。
一致性:事务必须是使数据库从一个一致性状态变到另一个一致性状态。 (数据操作前后,数据总量不能发生改变)
隔离性:事务与事务之间不应该相互的干扰。
持久性: 指数据一旦提交,对数据库的操作应该是永久性的。

所有的事务之间保持隔离,互不影响。因为并发操作,多个用户同时访问同一个数据。可能引发并发访问的问题:

脏读取:一个事务读取到了另一个事务中尚未提交的数据

不可重复读(虚读):一个事务中两次读取的数据内容不一致(同一个事务中多次读取应该一致)

幻读:一个事务中两次读取的数据的数量不一致,要求在一个事务多次读取的数据的数量是一致

 

数据库隔离级别:

read uncommitted : 未提交读
产生: 脏读取、不可重复读、幻读
read committed: 提交读
不产生 :脏读取 产生:不可重复读、幻读
repeatable read
不产生 :脏读取 、不可重复读 产生:幻读
serializable: 串行化
都不会产生

数据库的隔离级别越高、性能越低。
查询数据库隔离级别:
select @@tx_isolation;
MYSQL数据库隔离级别:repeatable read
Oracle 数据库隔离级别:read committed

演示由数据库隔离级别产生问题:

修改数据库隔离级别:
set global transaction isolation level 级别字符串;

set global transaction isolation level read uncommitted;
set global transaction isolation level read committed;
set global transaction isolation level repeatable read;
set global transaction isolation level serializable;

 

MYSQL基础知识

标签:eve   基础   传递依赖   编号   不一致   行记录   非空约束   employee   cti   

原文地址:https://www.cnblogs.com/ywfblog/p/12715959.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!