数据库相关知识

  • 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表所有数据和交集部分数据
  • 子查询:查询中嵌套查询,称嵌套查询为子查询。
相关推荐
王卫东14 分钟前
深入HBase:原理剖析与优化实战
大数据·数据库·hbase
呆呆小金人30 分钟前
SQL键类型详解:超键到外键全解析
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师
Doro再努力42 分钟前
Neo4j图数据库:简述增删改查
数据库·neo4j
dlhto1 小时前
Oracle Linux 9 的 MySQL 8.0 完整安装与远程连接配置
linux·mysql·oracle
送秋三十五3 小时前
5分钟读懂MySQL+Redis双写一致性实现流程
数据库·redis·mysql
bbmmqq3 小时前
根据角色ID获取完整角色信息(异步)
数据库·spring·oracle
阿波罗尼亚3 小时前
查询修正字段sql记录
数据库·sql·mysql
一个儒雅随和的男子3 小时前
Redis性能调优指南
数据库·redis·spring
老华带你飞3 小时前
动漫资讯|基于Springboot的动漫交流网站设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·国产动漫网站
JIngJaneIL3 小时前
机器人信息|基于Springboot的机器人门户展示系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·机器人·论文·毕设·机器人门户展示系统