Mysql基础整理

156 阅读8分钟

整理了一下在字节青训期间的mysql的一些基础相关知识

SQl数据类型

数值类型

  • tinyint 1byte 小整数值
  • smallint 2bytes 大整数值
  • mediumint 3bytes 大整数值
  • int/integer 4bytes 大整数值
  • bigint 8bytes 极大整数值
  • float 4bytes 单精度浮点数值
  • double 8bytes 双精度浮点数值
  • decimal 小数值;

日期和时间类型

  • date 3 日期值
  • time 3 时间或持续时间
  • year 1 年份值
  • datetime 8 混合日期和时间值
  • timestamp 4 混合日期和时间值,时间戳

字符串类型

  • char 0-255byes 定长字符串
  • varchar 0-65535bytes 变长字符串
  • tinyblob 0-255byes 不超过255个字符串的二进制字符串
  • tinytext 0-255byes 短文本字符串
  • blob 0-65535bytes 二进制形式的长文本数据
  • text 0-65535bytes 长文本数据
  • mediumblob 0-16777215bytes 二进制形式的中等长度文本数据
  • mediumtext 0-16777215bytes 中等长度文本数据
  • longblob 0-4294967295bytes 二进制形式的极大本文数据
  • longtext 0-4294967295bytes 极大文本数据

SQL分类:

1.DDL数据定义语言,用来定义数据库对象:数据库,表,列等。

2.DML数据操作语言,用来对数据库中的表的数据进行增删改操作

3.DQL数据查询语言,用来查询数据库中的表的记录(数据)

4.DCL数据控制语言,用来定义数据库的访问权限和安全级别,以及创建用户。

DDL-操作数据库

查询

show databases;  #查询

创建

create database 数据库名称;  #创建数据库

create database if not exists 数据库名称; #如果不存在就创建数据库

删除

drop database 数据库名称; #删除数据库

drop database if exists 数据库名称; #如果数据库存在,则删除

使用

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

select database(); #查看当前使用的数据库

DDL-操作表

查询表

show tables;#查询当前数据库下所有表的名称

desc 表名称;#查询表结构

创建表

create table 表明(    字段名1 数据类型1,    字段名2 数据类型2,    ...    字段名n,数据类型n );

删除表

drop table 表名;

drop table if exists 表名; #如果存在就删除

修改表

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

alter table 表名 add 列名 数据类型;    添加一列数据;

alter table 表名 modify 列名 新数据类型;    修改某一列的数据类型

alter table 表名 change 列名 新列名 新数据类型;     修改列名和数据类型

alter table 表名 drop 列名; 删除列;

DML

添加数据

insert into 表名(列名1,列明2...) values(值1,值2...) #给指定列添加数据  

insert into 表名 values(值1,值2...)  #给全部列添加数据  

insert into 表名(列名1,列明2...) values(值1,值2...),(值1,值2...),(值1,值2...)...; 

insert into 表名 values(值1,值2...),(值1,值2...),(值1,值2...)...; #批量增加数据

修改数据

update 表名 set 列名1=值1, 列名2=值2, ...[where 条件]; #修改表数据

删除数据

delete from 表名 [where 条件];#删除数据

DQL

查询语法

select    字段1  from    表名列表  where    条件列表 group by    分组字段 having    分组后条件 order by    排序字段 limit    分页限定

基础查询

1.查询多个字段 select 字段列表 from 表名; select * from 表名;#查询所有数据 星号意味着选择所有列  

2.去除重复记录 select distinct 字段列表 from 表名;  

3.起别名 as:

模糊查寻

select* from 表名 where 列名 like '%String%';

条件查询

select 字段列表 from 表名 where 条件;

条件

image.png

排序查询

select 字段列表 from 表名 order by 排序字段名1[排序方式1],排序字段名2[排序方式2]...; #排序查询语法 
/* 排序方式 ASC:升序排序 DESC:降序排序 */

分组查询

聚合函数

分类
  • count(列名) 统计数量
  • max(列名) 最大值
  • min(列名) 最小值
  • sum(列名) 求和
  • avg(列名) 求平均值
语法
select 聚合函数名(列名) from 表;

分组查询语法

SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

分页查询

select 字段列表 from 表名 limit 起始索引,查询条目数;

并集 union

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
  • expression1, expression2, ... expression_n: 要检索的列。
  • tables: 要检索的数据表。
  • WHERE conditions: 可选, 检索条件。
  • DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
  • ALL: 可选,返回所有结果集,包含重复数据。

约束

概念

约束是作用于表中列上的规则,用于限制加入表的数据。

约束的存在保证了数据库中数据的正确性,有效性和完整性。

分类

image.png

语法

#添加约束 
create table 表名(   
    列名 数据类型 约束关键字,#通过给字段添加 AUTO_INCREMENT 属性来实现主键自增长    
    ... 
) 

alter table 表名 modify 字段名 数据类型 约束关键字;  


删除约束 
alter table 表名 modify 字段名 数据类型;

外键约束

前面的各种约束都差不多,这里着重讲解外键约束

外键用来让两个表之间的数据建立链接,保证数据的一致性和完整性。

语法

外键的使用:

外键字段不能为该表的主键;

外键字段参考字段必须为参考表的主键(primary key)。

#添加外键约束 
create table 表名(    
    列名 数据类型,
    ...    
    [constraint] [外键名称] foreign key(外键列名) references 主表(主表列名) 
) 

alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称) 

#删除外键约束 
alter table 表名 drop foreign key 外键名称;

数据库设计

概念

数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS,为这个业务构建出最佳的数据存储结构

建立数据库中的表结构以及表与表之间的关联关系的过程。

设计步骤

image.png

表关系

  • 一对一

  • 一对多

  • 多对多

多表关系实现

一对一

一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的放另一张表,用于提升查询性能

一对多

在多的一方建立外键,指向一的一方的主键。

多对多

建立第三张中间表,中间表中至少包含两个外键,分别关联双方的主键。

多表查询

基础概念:

笛卡尔积:有两个集合AB,取AB的所有组合情况。

多表查询:从多张表中查询数据。

连接查询:

内连接:

  • 相当于查询A B的交集数据;

外连接:

  • 左外连接:相当于查询A表所有数据和交集部分数据;

  • 右外连接:相当于查询B表所有数据和交集部分数据;

子查询。

select * from 表1,表2;  
//可以达到目的,但是会产生笛卡尔积,产生很多无用数据 

select * from 表1,表2 where 条件;  
//where筛选

内连接

相当于查询两集合A B的交集数据

//隐式内连接 
select 字段名称 from 表1,表2... where 条件; 

//显式内连接 
select 字段名称 from 表1 [inner] join 表2 on 条件;

外连接

  • 左外连接:相当于查询A表所有数据和交集部分数据;

  • 右外连接:相当于查询B表所有数据和交集部分数据;

//左外连接 
select 字段名称 from 表1 left [outer] join 表2 on 条件; 

//右外连接 
select 字段名称 from 表1 right [outer] join 表2 on 条件;

子查询

概念:

查询中嵌套查询,则称嵌套查询为子查询。

子查询根据查询结果不同,作用不同:

  • 单行单列
  • 多行单列
  • 多行多列
单行单列 
select 字段列表 from 表 where 字段名=(子查询); 

多行单列 
select 字段列表 from 表 where 字段名 in (子查询); 

多行多列 
select 字段列表 from (子查询) where 条件;

事务

简介

  • 数据库的事务是一种机制,一个操作序列,包含了一组数据库操作命令。
  • 十五把所有的命令作为一个整体一起向系统提交或者撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败。
  • 事务是一个不可分割的工作逻辑单元。

基础语法:

--开启事务 start transaction; 或者 begin; 
--提交事务 commit; 
--回滚事务 rollback;

事务的四大特征:

  • 原子性:事务是不可分割的最小操作单位,要么同时成功,要么同时失败。
  • 一致性:事务完成时,必须使所有的数据都保持一致状态
  • 隔离性:多个事物之间,操作的可见性
  • 持久性:事务一旦提交或者回滚,它对数据库中的数据的改变就是永久的。

MySQL事务默认提交

--查看事务的默认提交方式 
select @@autocommit;
--1自动提交 0手动提交 

--修改事务提交方式 
set @@autocommit =0;