数据库相关知识

  • SQL(Structured Query Language): 关系型数据库通用编程语言。

  • 登录MySQL: mysql -uroot -p

  • MySQL登录参数: mysql -u(用户名) -p(密码) -h(要连接的mysql服务器的ip地址-默认为127.0.0.1) -P(端口号-默认3306)

  • 退出MySQL: exit 或者 quit 或者 \q

  • 查询MySQL的版本号select version();

  • 查看MySQL数据库的安装目录: select @@basedir as basePath from dual;

  • 查询当前数据库文件: show databases;

  • 单行注释: -- 注释内容#注释内容(MySQL独有)

  • 多行注释: /* 注释内容 */

  • char 和 varchar

    char(定长字符串) 存储性能高 浪费空间 确定字符串时候用
    varchar(变长字符串) 存储性能低 节约空间 不确定字符串长度时用
  • 创建表: (最后一行不能有逗号)

    c 复制代码
    create table 表名 (字段名1 数据类型1,
    				   字段名2 数据类型2,
    				   ... 
    				   字段名n 数据类型n);

DDL(Data Definition Language)数据定义语言:

操作数据库、表等。

  • 查询数据库: show databases;
  • 新建数据库: create database 数据库名称;
  • 新建数据库前判断: create database if not exists 数据库名称;
  • 删除数据库: drop database 数据库名称;
  • 删除数据库前判断: drop database if exists 数据库名称
  • 使用数据库: use 数据库名称;
  • 查看当前使用的数据库: select database();
  • 删除表: drop table 表名;
  • 删除表前判断: drop table if exists 表名;
  • 修改表名: alter table 表名 rename to 新的表名;
  • 添加一列: alter table 表名 add 列名 数据类型;
  • 修改数据类型: alter table 表名 modify 列名 新数据类型;
  • 修改列名和数据类型: alter table 表名 change 列名 新列名 新数据类型;
  • 删除列: alter table 表名 drop 列名;

DML(Data Manipulation Language)数据操纵语言:

对表中的数据进行增删改。

  • 给指定的列添加数据: insert into 表名(列名1,列名2,...)values(值1,值2,...);
  • 给全部列添加数据: insert into 表名 values(值1,值2,...); (给所有列添加数据时,列名的列表可以省略)
  • 批量添加数据:
    insert into 表名(列名1,列名2,...)values(值1,值2,...),(值1,值2,...)...;
    insert into 表名 values(值1,值2,...),(值1,值2,...)...;
  • 修改数据: update 表名 set 列名1=值1,列名2=值2,...[where 条件]; (注意:如果update语句没有加where条件,则会将表中所有数据进行修改!)
  • 删除数据: delete form 表名 [where 条件]

DQL(Data Query Language)数据查询语言:

对表中数据进行查询。

  • 查询表格: show tables;
  • 查询表的结构信息: desc 表的名称;
  • 查询表的内容: select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组后条件 order by 排序字段 limit 分页限定

一、基础查询:

  • 查询多个字段:
    select 字段列表 from 表名;
    select * from 表名;--查询所有数据(不建议使用)
  • 查询去除重复值的记录: select distinct 字段列表 from 表名;
  • 起别名: as: as也可省略

二、条件查询:

  • select 字段列表 from 表名 where 条件列表; (举例:select * from stu where age >= 20 and age<=30;)
  • null 值的比较不能用 = null!=null ,需要使用 is nullis not null

三、模糊查询(like)

  • 通配符: _ 匹配单个字符,% 匹配多个字符。

排序查询(order by):

  • select 字段列表 from 表名 oder by 排序字段名1 [排序方式1], 排序字段名2 [排序方式2]...;
  • ASC:升序排列(默认),
  • DESC:降序排序。

四、聚合函数

  • 聚合函数分类: (null值不参与聚合函数的运算)
    count 统计数量:select count(id) from stu; (count 统计的列名不能为null)
    max 最大值:SELECT max(math) FROM stu;
    min 最小值
    sum 求和
    avg 平均值
  • 聚合函数语法: select 聚合函数名(列名) from 表名;

五、分组查询(group by)

  • 分组查询语法: 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是分组前的限定,不满足where条件的不参与分组。having是对分组后的结果进行筛选。
    • 可判断的条件不同: where 不能对聚合函数进行判断,having可以。
    • 执行顺序: where > 聚合函数 > having。

六、分页查询(limit)

  • 分页查询语法: select 字段列表 from 表名 limit 起始索引,查询条目数;
    每页显示三条数据,查询第一页数据(从0开始查询,查询3条数据):SELECT * from stu limit 0,3;

DCL(Data Control Language)数据控制语言:

对数据库进行权限控制。

TCL(Transaction Control Language)事务控制语言:

约束

约束类型:

约束名 描述 关键字
非空约束 保证列中所有数据不能null值。 NOT NULL
唯一约束 要求该列唯一,允许为空,但只能出现一个空值。 UNIQUE
主键约束 主键是一行数据的唯一标识,要求非空且唯一。 PRIMARY KEY
检查约束 某列取值范围限制、格式限制等。 CHECK
默认约束 某列的默认值。 DEFAULT
外键约束 用于在两表之间建立关系,需要指定引用主表的哪一列。 FOREIGN KEY
  • 案例:

    sql 复制代码
    DROP TABLE IF EXISTS emp;
    -- 员工表
    CREATE TABLE emp(
    	id INT PRIMARY KEY auto_increament, -- 员工ID,主键且自增长
    	ename VARCHAR(50) Not NULL UNIQUE, -- 员工姓名,非空并且唯一
    	joindate DATE NOT NULL, -- 入职日期,非空
    	salary DOUBLE(7,2) NOT NULL, -- 工资,非空
    	bonus DOUBLE(7,2) DEFAULT 0 -- 奖金,如果没有奖金默认为0
    );
  • 外键约束:

    sql 复制代码
    	-- 创建表时添加外键约束
    	CREATE TABLE 表名(
    		 列名 数据类型,
    		 ...
    		 [CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名) 
    	); 
    sql 复制代码
    	-- 建完表后添加外键约束
    	ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
    sql 复制代码
    	-- 删除约束
    	ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

多表查询

  • 连接查询
    • 内连接查询 :相当于查询AB交集数据

      sql 复制代码
      	-- 隐式内连接
      	SELECT 字段列表 FROM 表1,表2... WHERE 条件;
      	-- 显示内连接
      	SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;
    • 外连接查询

      • 左外连接查询 :相当于查询A表所有数据和交集部门数据
      • 右外连接查询 : 相当于查询B表所有数据和交集部分数据
  • 子查询:查询中嵌套查询,称嵌套查询为子查询。
相关推荐
郑州光合科技余经理17 分钟前
PHP构建:支撑欧美澳市场的同城生活服务平台开发
java·开发语言·数据库·uni-app·php·排序算法·生活
JIngJaneIL9 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
微学AI9 小时前
复杂时序场景的突围:金仓数据库是凭借什么超越InfluxDB?
数据库
廋到被风吹走9 小时前
【数据库】【Redis】定位、优势、场景与持久化机制解析
数据库·redis·缓存
有想法的py工程师11 小时前
PostgreSQL + Debezium CDC 踩坑总结
数据库·postgresql
Nandeska11 小时前
2、数据库的索引与底层数据结构
数据结构·数据库
小卒过河010411 小时前
使用apache nifi 从数据库文件表路径拉取远程文件至远程服务器目的地址
运维·服务器·数据库
过期动态11 小时前
JDBC高级篇:优化、封装与事务全流程指南
android·java·开发语言·数据库·python·mysql
Mr.朱鹏11 小时前
SQL深度分页问题案例实战
java·数据库·spring boot·sql·spring·spring cloud·kafka
一位代码11 小时前
mysql | 常见日期函数使用及格式转换方法
数据库·mysql