MySQL笔记----自用

文章目录

  • 前言
  • 一、MySQl是什么?
  • 二、MySQL注释
    • 1.单行注释
    • 2.读入数据
  • 三、MySQL语句分类
    • 1.DDL:操作数据库
    • 2.DDL:操作数据库表
    • 3.DML: 对表中的数据进行增删改
    • 4.DQL:对表中的数据进行查询
    • 5.DCL: 对数据库进行权限控制
  • 四、约束
  • 五、数据库设计
  • 六、多表查询
  • 七、事务
  • 总结


前言


以下是本篇文章正文内容

一、MySQl是什么?

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

二、MySQL注释

1.单行注释

示例:

--------注释内容
or
#注释内容

2.读入数据

示例:

 /*  注释内容  */

三、MySQL语句分类

1.DDL:操作数据库

 ①查询      
 SHOW DATABASES;

 ②创建      
   创建数据库       
  CREATE DATABASE  数据库名称;
  
  判断是否存在数据库,不存在则创建                
  CREATE DATABASE IF NOT EXISTS 数据库名称;

③删除       
 删除数据库     
 DROP DATABASE 数据库名称;
 
 判断是否存在,存在就删除    
DROP DATABASE IF  EXISTS 数据库名称; 

④使用数据库     
查看当前使用的数据库     
SELECT DATABASE();
使用数据库               
USE 数据库名称 

2.DDL:操作数据库表

①查询
查询当前数据下所有表名称           
SHOW TABLES;

查询表的结构                         
DESC   表名称;

②创建
创建表      (最后一行末尾,不能加逗号)          
CREATE TABLE 表名{
      字段名1   数据类型1,
      字段名2   数据类型2
              };

③删除
删除表                       
DROP TABLE 表名;

删除表时判断表在不在         
DROP TABLE IF EXISTS 表名;

 ④修改表
修改表名         
ALTER TABLE 表名  RENAME TO 新的表名;

添加一列         
ALTER TABLE 表名  ADD 列名  数据类型;

修改数据类型      
ALTER TABLE  表名  MODIFY  列名   新数据类型;
            
修改列名和数据类型   
ALTER  TABLE 表名 CHANGE  列名  新列名  新数据类型;
           
删除列               
ALTER  TABLE  表名  DROP 列名;

3.DML: 对表中的数据进行增删改

①添加
1)给指定列添加数据          
INSERT INTO 表名(列名1,列2,..)VALUES (值1,值2,....);

2)给全部列添加数据            
INSERT INTO 表名 VALUES (值1,值2,.....);

3)  批量添加数据                  
INSET  INTO 表名 (列名1,列名2,....)VALUES (值1,值2,....), (值1,值2,....);
                                                   
INSET INTO 表名 VALUES (值1,值2,....), (值1,值2,....),.....;

②修改       
1)	修改表数据     
  UPDATE  表名  SET  列名1=值1,列名2=值2,...[WHERE  条件];
              (如果不加条件,则将所有数据都修改)


③删除
1) 删除数据           
DELETE FROM 表名  [WHERE 条件];       WHERE NAME='往';


4.DQL:对表中的数据进行查询

1.基础查询 SELECT

 1.查询多个字段    
SELECT 字段列表   FROM 表名;      
select name,age from stu;

SELECT * FROM 表名;    --查询所有数据       
select * from stu;
         
2.去除重复记录
SELECT DISTINCT  字段列表  FROM  表名;    
select distince address from stu;

3.起别名
AS:                
select name,math as 数学成绩,english as 英语成绩 from stu ;

2.条件查询 WHERE

1.条件查询语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;

2.条件           
<  小于  > 大于  =等于  >= 大于或等于 <= 小于或等于  !=   不等于    
         
BETWEEN....AND....  在某个范围内 ,都包含
SELECT * FROM stu WHERE  age BETWEEN 20 AND 30;
SELECT * FROM stu WHERE date BETWEEN '1990' AND '2000';

IN(....)   多选.....

LIKE   占位符        (模糊查询    _单个任意字符     %多个任意字符)
SELECT * FROM stu WHERE name like '马%';  查询第一个字是马的名字
SELECT *FROM stu WHERE name like '_花%';  查询第二个字是花的名字
SELECT * FROM stu WHERE name like '%马%'; 查询名字包含马的名字

IS NULL        为空
SELECT * FROM stu WHERE english = null;

IS  NOT NULL    不为空
 
AND  或  &&   并且
OR  或   ||          或
NOT  或  !       非

3.排序查询 ORDER BY:

SELECT 字段列表  FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2[排序方式2],.....
排序方式:   升序排序      ASC(默认值)
                     降序排序      DESC 
SELECT * from stu ORDER BY age ASC;             ---年龄升序排序
SELECT * from stu ORDER BY math DESC;       ----数学成绩降序排列
SELECT * from stu ORDER BY math DESC,English ASC; 
按照数学成绩排序,如果数学成绩一样,再按照英语成绩升序排序         
  1. 分组查询 GROUP BY:
将一列数据作为一个整体,进行纵向计算。  数据不能为空。
SELECT  聚合函数名(列名) FROM 表
SELECT avg(math)  FROM stu;           

聚合函数:  count(列名)  统计数量
                    max(列名)   最大值
                    min(列名)  最小值
                    sum(列名)  求和
                   avg(列名)   平均值
                  
            SELECT 字段列表
               FROM 表名 [WHERE 分组前条件限定]  
                 GROUP BY 分组字段名 [HAVING 分组后条件过滤]   
                      
              查询男同学和女同学各自的数学平均分。
              SELECT    sex,avg(math)  
                       FROM stu
                       GROUP BY sex;

              查询男同学和女同学各自的数学平均分,各自的人数。
              SELECT    sex,avg(math) ,count(*)
                       FROM stu
                             GROUP BY sex;

              查询男同学和女同学各自的数学平均分,各自的人数。要求:分数低于70分不参与分组
               SELECT    sex,avg(math) ,count(*)
                       FROM stu   WHERE math>70
                             GROUP BY sex;

              查询男同学和女同学各自的数学平均分,各自的人数。要求:分数低于70分不参与分组,分组之后人数大于2个的
              SELECT    sex,avg(math) ,count(*)
                        FROM stu   WHERE math>70
                             GROUP BY sex having count(*)>2;

where 和 having 的区别
where  分组之前进行限定    having  分组之后进行过滤
where  不能对聚合函数进行判断      having可以

5.分页查询(LIMIT)

 SELECT 字段列表 FROM 表名  LIMIT 起始索引,查询条目录;
                   起始索引:从0开始
                   计算公式:起始索引={当前页码-1}  * 每页显示的条数

                    从0开始查询,查询3条数据
                   SELECT *FROM stu limit 0,3;
                     每页显示3条数据,查询第一页的数据
                    SELECT * FROM stu limit 0,3;
                   每页显示3条数据,查询第2页的数据
                    SELECT * FROM stu limit 1 ,3;
                    每页显示3条数据,查询第3页的数据
                    SELECT * FROM stu limit 2 ,3;

5.DCL: 对数据库进行权限控制

四、约束

概念:

 约束是作用域表中列上的规则,用于限制加入表的数据
 约束的存在保证了数据库中数据的准确性,有效性和完整性

非空约束:保证列中所有数据不能用null值

 NOT NULL
           --建立员工表
            CREATE TABLE emp(
               id  INT PRIMARY KEY ,-----员工ID,主键且自增长
               Ename VARCHAR(50)  NOT NULL UNIQUE ,---员工姓名,非空且唯一
               Joindate DATE  NOT NULL, --入职日期,非空
               Salary DOUBLE(7,2) NOT NULL ,---工资,非空
               Bouns DOUBLE(7,2)  DEFAULT 0,--奖金,如果没有奖金默认为0 
);

唯一约束:保证列中所有数据各不相同

UNIQUE    默认为0   UNIQUE 0

主键约束:主键是一行数据的唯一标识,要求非空白且唯一

PRIMARY KEY

默认约束:保存数据时,未指定值则采用默认值

DEFAULT

检查约束:保证列中的值满足某一条件

CHECK
            MySQL不支持,不讲

外键约束:外键用来让两个数据之间建立连接,保证数据的一致性和完整性

FOREIGN KEY

(1)	添加约束    先创建主表,再创建从表。   先添加主表数据,再添加从表数据。
                            先删除从表数据,再删除主表数据。
//创建表时添加外键约束
CREATE TABLE 表名(
        列名 数据类型
        …..
        [CONSTRAINT] [外键名称] FOREIGN KEY(外键名列) REFERENCES 主表(主表列名)

         Id nit primary key auto_increment,
         Name varchar(20),
         Age int;
         Dep_id int;
         CONSTRAINT fk_emp_dept  FOREIGN KEY(dep_id) REFERENCES dep(id);
(2)	删除约束   外键在哪个表,修改哪个表
      ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
      Alter table emp dorp foreign key fk_emp_dept;


(3)	建完表后添加外键
Alter table emp 
      add CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(id);

五、数据库设计

概念

建立数据库中的表结构记忆表与表之间的关联关系的过程。
有什么表表有什么字段,表和表之间的关系。

步骤

①需求分析   数据?数据属性?数据与属性的特点?
②逻辑分析   通过ER图对数据库进行逻辑建模
③物理分析   更具数据库滋生特点把逻辑设计转换为物理设计
④维护设计   对新的需求进行建表   表优化

表关系

  一对一:   人与身份证
             用户和用户详情
             用于表的拆分,一张表经常用,一张不经常用,用于提升查询性能。
             实现方式:在任意s放加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE) 
一对多(多对一):  部门与员工
                     一个部门对应多个员工,一个员工对应一个部门

                     实现方式:在多的一方建立外键,指向一的一方的主键
                     员工表建立外键,指向部门表的主键。
  多对多: 商品和订单
           一个商品对应多个订单,一个订单包含多个商品
           实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键。

MySQL笔记----自用_第1张图片

六、多表查询

概念:

  从多张表查询数据
① 连接查询
1.	内连接: 相当于查询A表 和B表交集数据
                 查询语法:
                 //隐式内连接
            SELECT 字段列表 FROM 表1,表2…..WHERE 条件;
           SELECT * from emp ,dept where emp.dep_id = dept.id;
SELECT emp.name,gender,dept.dname from emp,dept where emp.dep_id=dept.did;

MySQL笔记----自用_第2张图片

 //显示内连接 INNER 可写可不写
           SELECT 	字段列表 FROM 表1 (INNER) JOIN 表2 ON 条件;

MySQL笔记----自用_第3张图片

  2.外连接:
            左外连接:相当于查询A表所有数据和交集的数据
            SELECT 字段列表 FROM 表1  LEFT  (OUTER)  JOIN 表2 ON 条件;

MySQL笔记----自用_第4张图片

右外连接:相当于查询B表所有数据和交集的数据
            SELECT 字段列表 FROM 表1 RIGHT (OUTER)JOIN 表2 ON 条件;

MySQL笔记----自用_第5张图片

②子查询
查询中嵌套查询

MySQL笔记----自用_第6张图片

1)	单行单列  作为条件中,使用= < > !=等条件进行判断
SELECT 字段列表 FROM 表 WHERE 字段名 = (子查询);


2)	多行单列   作为条件值,使用in等关键字进行条件判断
SELECT 字段列表 FROM WHERE 字段名 in (子查询);

MySQL笔记----自用_第7张图片

3)	多行多列 作为虚拟表
SELECT 字段列表 FROM (子查询) where 条件;

MySQL笔记----自用_第8张图片
案例
MySQL笔记----自用_第9张图片MySQL笔记----自用_第10张图片

MySQL笔记----自用_第11张图片MySQL笔记----自用_第12张图片
在这里插入图片描述

MySQL笔记----自用_第13张图片
SELECT emp.ename, emp.salary, t2.grade
在这里插入图片描述在这里插入图片描述MySQL笔记----自用_第14张图片
MySQL笔记----自用_第15张图片

七、事务

MySQL笔记----自用_第16张图片MySQL笔记----自用_第17张图片MySQL笔记----自用_第18张图片

MySQL笔记----自用_第19张图片

总结

以上就是今天要讲的内容,本文仅仅简单介绍MySQL的使用,只作为个人方便使用查询。

你可能感兴趣的:(MySQL,mysql,数据库,database)