• 笔记-JavaWeb学习之旅2


    数据库的基本概念

    1.数据库:DataBase 简称 DB,用于存储和管理数据的仓库

    特点:

    1.持久化存储数据的,其实数据库就是一个文件系统,

    2.方便存储和管理数据

    3.使用了统一操作数据库 --SQL

    SQL通用语法

    1. SQL语句可以单行或多行书写,以分号结尾

    2. 可使用空格和缩进来增强可读性

    3. MySQL数据库的SQL语句不区分大小写,关键字建议大写

    4. 3种注释

      1. 单行注释: -- 注释内容 或 # 注释内容

      2. 多行注释 :/* 注释*/

    img

    img

    SQL分类:
    1. DDL(Data Definition Language)数据定义语言,用来定义数据库对象:数据库表,列等。关键字: create,drop,alter等
    2. DML(Data Maipulation Language)数据操作语言,用来对数据库中表的数据进行增删改,关键字:insert,delete,update等
    3. DQL(Data Query Language)数据查询语言,用来查询数据库中表的记录,关键字:select ,where等
    4. DCL(Data Control Language)数据控制语言,用来定义数据库的访问权限和安全级别,级及创建用户,关键字:GRANT,REVOKE等

    DDL:操作数据库、表

    操作数据库
    1. C(Create):创建

      1. 创建数据库 create database 数据库名称;

      2. 创建数据库,判断不存在在创建

        ​ create database if not exists 数据库名称;

      3. 创建数据库,并制定字符集

        ​ create database 数据库名称 character set 字符集名:

    2. R(Retrieve):查询

      1. 查询所有数据库的名称

        ​ show databases;

      2. 查询某个数据库的字符集:

        ​ show create database 数据库名称;img

    3. U(Update):修改

      1. 修改数据库的字符集

        ​ alter database 数据库名称 character set 字符集名称;

    4. D(Delete):删除

      1. 删除数据库

        ​ drop database 数据库名称;

      2. 判断数据库存在,存在再删除

        ​ drop database if exists 数据库名称;

    5. 使用数据库

      1. 查询当前正在使用的数据库名称

        ​ select database();

      2. 使用数据库

        ​ use 数据库名称;

        img

    操作表

    1. C(Create):创建

      1. 语法:

        1. create table 表名(

          ​ 列名1 数据类型1,

          ​ 列名2 数据类型2,

          ​ .....

          ​ 列名n 数据类型n

          );

          注意:最后一列,不需要加逗号

          数据库常用类型:

          1. int: 整数类型
          2. double:小数类型
          3. date 日期类型,只包含年月日 ,
          4. datatime:日期类型,包含年月日时分秒
          5. timestamp:时间错类型 包含年月日时分秒(如果不给这个字段赋值,或赋值为null,则默认使用当前系统的时间)
          6. varchar:字符串

          复制表:create table 新的表名 like 被复制的表名;

    2. R(Retrieve):查询

      1. 查询某个数据库中所有的表名 show tables;

      2. 查询表结构

        ​ desc 表名;

    3. U(Update):修改

      1. 修改表名

        ​ alter table 表名 rename to 新的表名;

      2. 修改表的字符集

        ​ alter table 表名 character set 字符集名称;

      3. 添加一列

        ​ alter table 表名 add 列名 数据类型;

      4. 修改列名称 和数据类型

        ​ alter table 表名 change 旧的列名 新列名 新数据类型;

        ​ alter table 表名 modify 列名 新数据类型(这种方式只改数据类型);

      5. 删除列

        ​ alter table 表名 drop 列名;

    4. D(Delete):删除

      1. drop table 表名;
      2. drop table if exists 表名;
    CREATE TABLE student(
    	id int,-- 列名id  数据类型 int
        name varchar(32),-- 列名  数据类型字符串varchar,字符串数据类型要指定长度
        age int,
        score double(4,1),
        birthday date,
        insert_time timestamp -- 不要加逗号
        
    );
    

    img

    img

    DML:增删改表中数据

    1. 添加数据:

      ​ 语法:insert into 表名(列名1,列名2,,...列名n)values(值1,值2,...值n);

      注意

      1. 列名和值都要一一对应
      2. 如果表名后,不定义列名,则默认给所有列添加值
      3. 除了数字类型,其他类型都需要使用引号(单双都可以)引起来
    2. 删除数据

      ​ 语法:

      ​ delete from 表名[where 条件]

      ​ 如果不加条件,则删除表中所有记录

    3. 修改数据

      ​ 语法:

      ​ update 表名 set 列名1 = 值1 ,列名2 = 值2,....[where 条件];

      ​ 如果不加任何条件,则会将表中所有记录全部修改

    DQL:查询语句

    1. 排序查询

      ​ 语法:

      ​ SELECT *FROM 表名 ORDER BY 排序字段1 排序方式1,排序字段 排序方式2...

      ​ 排序方式:

      ​ ASC:升序,磨人的

      ​ DESC:降序

      ​ 注意:

      ​ 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件

    2. 聚合函数

      1. count:计算个数 SELECT COUNT(列名) FROM 表名;
      2. max:计算最大值 SELECT MAX(列名) FROM 表名;
      3. min:计算最小值 SELECT MIN(列名) FROM 表名;
      4. sum:计算和 SELECT SUM(列名) FROM 表名;
      5. avg:计算平均值 SELECT AVG(列名) FROM 表名;
    3. 分组查询

      ​ 1.语法:group by分组字段;

      ​ 2.注意:

      1. 分组之后查询的字段:分组字段、聚合函数

      2. where和having的区别

        ​ 1.where在分组之前就已经限定了(筛选出条件不满足的)having在分完组之后在进行限定,又一次筛选出不满足的

        ​ 2.where后不可以跟聚合函数,having可以跟聚合函数

        img

      DESC student;
      SELECT*FROM student;
      INSERT INTO student VALUES(9,'小乔',17,'女','建业',83,95);
      
      -- 把男女分为两组,然后按照性别来求他们的数学平均分
      SELECT sex,AVG(math) FROM student GROUP BY sex;
      -- sex是数组字段,AVG(math)是聚合函数,COUNT(id)也是聚合函数
      -- MAX(english)也是聚合函数,现在可以求出他们分组后的,分组后的,分组后的所需的各种值
      -- 把男女分为两组,然后按照性别来求他们的数学平均分
      -- 把他们分为两组之后他们的一组都有多少人
      SELECT sex,AVG(math),COUNT(id),MAX(english) FROM student GROUP BY sex;
      -- 要求分数大于90分的才参与分组
      SELECT sex,AVG(math),COUNT(id),MAX(english) FROM student WHERE math >90 GROUP BY sex;
      UPDATE student SET math=95 WHERE id=9;
      -- 要求分组后的人数大于2个人,才参入求数学平均分,分组后的人数,英语最大值
      
      SELECT sex,AVG(math) ,COUNT(id) ,MAX(english) FROM student WHERE math >90 GROUP BY sex HAVING COUNT(id)>2;
      -- 可以对分组后的聚合函数后面可以加别名
      SELECT sex,AVG(math) 平均分,COUNT(id) 人数,MAX(english)最大值 FROM student WHERE math >90 GROUP BY sex HAVING COUNT(id)>2;
      -- 
      
    4. 分页查询

      1. 语法:limit 开始的索引,每页查询的条数;
      2. 公式:开始的索引= (当前的页码-1)*每页显示的条数

    DQL:查询表中的记录

    1. 语法

      select

      ​ 字段列表(name ,age,sex)

      from

      ​ 表名列表

      where

      ​ 条件列表

      group by

      ​ 分组查询

      having

      ​ 分组后的条件

      order by

      ​ 排序

      limit

      ​ 分页限定

    2. 基础查询

      1. 多个字段的查询

        ​ select 字段名1,....from 表名;

      2. 去除重复

        ​ distinct

      3. 计算列

        ​ 一般可以使用四则运算计算列与列之间的值

        ​ ifnull(表达式1,表达式2):表达式1表示的是哪个字段,如果该字段为null,则使用表达式2来替代null

      4. 其别名

        as

    -- 去除重复的结果集
    SELECT DISTINCT address FROM student;
    -- 计算math和english的和
    SELECT NAME,math+english FROM student;
    SELECT NAME,math 数学,english 英语,math+english 总分 FROM student;
    

    img

    条件查询

    1. where子句后跟条件

    2. 运算符>,<,<=,>=,=,<>,,BETWEEN...AND ,IN(集合),LIKE, IS NULL ADN或&&,or或||,not或!

    表的约束

    1. 主键约束:primary key
    2. 非空约束:not null
    3. 唯一约束:unique
    4. 外键约束:foreign key
    非空约束:
    -- 非空的作用:被修饰的列不能为null
    -- 非空约束的创建
    在创建表示添加非空约束
    CREATE TABLE stu(
    	id INT NOT NULL, -- id为非空
        NAME VARCHAR(20)
    );
    -- 在表创建完之后添加非空
    ALTER TABLE stuMODIFY NAME VARCHAR(20) NOT NULL; -- NAME为非空
    

    唯一约束

    -- 唯一约束的作用:被修饰的列的值不能重复
    -- 创建表时,添加唯一元素
    CREATE TABLE stu(
    	id INT,
        phome_number VARCHAR(20) UNIQUE -- 添加了唯一元素
    );
    -- 在表创建后添加唯一约束
    ALTER TABLE stu MODIFY phone number VARCHAR(20) UNIQUE;
    -- 删除唯一约束
    ALTER TABLE stu DROP INDEX phone_number;
    
    主键约束
    CREATE TABLE stu(
        id INT PRIMARY KEY AUTO_INCREMENT, -- 给id添加主键约束,AUTO_INCREMENT自动增长
        NAME VARCHAR(20)
    );
    -- 删除主键
    ALTER TABLE stu DROP PRIMARY KEY;
    -- 创建表后,添加主键
    ALTER TABLE stu MODIEY id INT PRIMARY KEY;
    -- 删除自动增长
    ALTER TABLE stu MODIEY id INT;
    -- 添加自动增长
    ALTER TABLE stu MODIEY id INT AUTO_INCREMENT;
    
    外键约束
    -- 外键约束作用:让表与表之间产生关系,从而保证数据的正确性
    CREATE TABLE 表名(
    	....
        外键列
        constraint 外键名称 foreign key (外键列名称) references 主表名称(注表列名称)
    );
    -- 删除外键
    ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
    -- 创建之后,添加外键
    ALTER TABLE 表名 ADD constraint 外键名称 foreign key (外键列名称) references 主表名称(注表列名称)
    -- 级联操作
    -- 作用,列被修改后被关联的另外一条列也会被更改
    -- 添加方法
    ALTER TABLE 表名 ADD ALTER TABLE 表名 ADD constraint 外键名称 foreign key (外键列名称) references 主表名称(注表列名称) ON UPDATE CASCADE ON DELETE CASCADE;
     ON UPDATE CASCADE;级联更新,更新一条列,被关联的列也会被更新
     ON UPDATE CASCADE;级联删除,删除一条列,被关联的列也会被删除
    
  • 相关阅读:
    HTML
    HTML协议
    索引原理与慢查询优化
    事务,存储过程
    视图,触发器
    Mysql之单表查询
    剑指offer 面试题4:二维数组中的查找
    剑指offer 面试题3:数组中重复的数字
    剑指offer 面试题2:实现Singleton模式
    剑指offer 面试题1:赋值运算符函数
  • 原文地址:https://www.cnblogs.com/train99999/p/10958159.html
Copyright © 2020-2023  润新知