SQL持续更新中

问: 什么是SQL?
答: Structured Query Language 结构化查询语言;其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为 方言

通用语法

  • SQL 语句可以单行或多行书写,以分号结尾。
  • 可使用空格和缩进来增强语句的可读性。
  • MYSQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。
  • 3 种注释
    • 单行注释: -- 注释内容# 注释内容(mysql 特有)
    • 多行注释: /* 注释 */

SQL分类

  • DDL(Data Definition Language) 数据定义语言
    用来定义数据库对象(数据库、表、列)等。关键字: CREATE、DROP、ALTER 等
  • DML(Data Manipulation Language) 数据操作语言
    用来对数据库中表的数据进行增删改。关键字: INSERT、DELETE、UPDATE 等
  • DQL(Data Query Language) 数据查询语言
    用来查询数据库中表的记录(数据)。关键字: SELECT、WHERE 等
  • DCL(Data Control Language) 数据控制语言
    用来定义数据库的访问权限和安全级别及创建用户。关键字: GRANT、REVOKE 等

一、DDL(操作数据库、表)

1.1 操作数据库CRUD

C(Create)-创建

-- 创建数据库
CREATE DATABASE 数据库名称;
-- 创建数据库, 判断不存在, 再创建
CREATE DATABASE IF NOT EXISTS 数据库名称;
-- 创建数据库, 并指定字符集
CREATE DATABASE 数据库名称 CHARACTER SET 字符集名;-- 练习: 创建zhinian_db数据库, 判断是否存在, 并制定字符集为utf8mb4
CREATE DATABASE IF NOT EXISTS zhinian_db CHARACTER SET utf8mb4;

R(Retrieve)-查询

-- 查询所有数据库的名称
SHOW DATABASES;
-- 查询某个数据库的字符集: 查询某个数据库的创建语句
SHOW CREATE DATABASE 数据库名称;

U(Update)-修改

-- 修改数据库的字符集
ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称;

D(Delete)-删除

-- 删除数据库
DROP DATABASE 数据库名称;
-- 判断数据库存在, 存在再删除
DROP DATABASE IF EXISTS 数据库名称;

注: 使用数据库

-- 查询当前正在使用的数据库名称
SELECT DATABASE();
-- 使用数据库
USE 数据库名称;

1.2 操作表

C(Create)-创建

  • 数据库字段类型

    • INT-整数类型
    • DOUBLE-小数类型
    • DATE-日期(只包含年月日 yyyy-MM-dd)
    • DATETIME-日期(包含年月日时分秒 yyyy-MM-dd HH:mm:ss)
    • TIMESTAMP-时间戳(包含年月日时分秒 yyyy-MM-dd HH:mm:ss)
      • 如果将来不给这个字段赋值或赋值为null,则默认使用当前的系统时间,来自动赋值
    • VARCHAR-字符串
  • 建表语法

    -- 语法
    CREATE TABLE 表名(列名1 数据类型1,列名2 数据类型2,....列名n 数据类型n
    );
    -- MYSQL CREATE TABLE示例
    CREATE TABLE minio_file_upload_info(`id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT NOT NULL COMMENT '自增主键',`file_name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '文件名称',`file_md5` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '文件MD5',`upload_id` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '文件上传Id',`file_url` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '文件路径',`total_chunk` INT(10) NOT NULL DEFAULT 0 COMMENT '文件总分块数',`file_status` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '文件状态',`update_time` DATETIME DEFAULT NULL COMMENT '修改时间'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='文件上传信息';
    
  • 复制表

    CREATE TABLE 表名 LIKE 被复制的表名;	
    

R(Retrieve)-查询

  • 查询某个数据库中所有的表名称

    SHOW TABLES;
    
  • 查询表结构

    DESC 表名;
    

U(Update)-修改

  • 修改表名
    ALTER TABLE 表名 RENAME TO 新的表名;
    
  • 修改表的字符集
    ALTER TABLE 表名 CHARACTER SET 字符集名称;
    
  • 添加一列
    ALTER TABLE 表名 ADD 列名 数据类型;
    
  • 修改列名称 类型
    ALTER TABLE 表名 CHANGE 列名 新列别 新数据类型;
    ALTER TABLE 表名 MODIFY 列名 新数据类型;
    
  • 删除列
    ALTER TABLE 表名 DROP 列名;
    

D(Delete)-删除

  • 删除
    DROP TABLE 表名;
    DROP TABLE IF EXISTS 表名;
    

二、DML(增删改表中数据)

2.1 添加数据

语法

INSERT INTO 表名(列名1,列名2,...列名n) VALUES(1,2,...值n);

注: ① 列名和值要一一对应。② 如果表名后,不定义列名,则默认给所有列添加值 insert into 表名 values(值1,值2,...值n); ③ 除了数字类型,其他类型需要使用引号(单双都可以)引起来。

2.2 删除数据

语法

DELETE FROM 表名 [WHERE 条件]

注: ① 如果不加条件,则删除表中所有记录。
② 如果要删除所有记录。DELETE FROM 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作;TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。

2.3 修改数据

语法

UPDATE 表名 SET 列名1 =1, 列名2 =2,... [WHERE 条件];

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

三、DQL(查询表中的记录)

SELECT * FROM 表名;

语法

SELECT字段列表
FROM表名列表
WHERE条件列表
GROUP BY分组字段
HAVING分组之后的条件
ORDER BY排序
LIMIT分页限定

3.1 基础查询

  1. 多个字段的查询: SELECT 字段名1,字段名2... FROM 表名;
    注: 如果查询所有字段,则可以使用 * 来替代字段列表。
  2. 去重 DISTINCT
  3. 计算列: 四则运算、IFNULL(表达式1,表达式2)
  4. 别名: AS 或 空格。

3.2 条件查询

WHERE 子句后跟条件
运算符

  • <
  • >
  • <=
  • >=
  • =
  • <>
  • BETWEEN...AND
  • IN(集合)
  • LIKE (占位符: _☞单个任意字符 %☞多个任意字符)
  • IS NULL
  • AND 或 &&
  • OR 或 ||
  • NOT 或 !

-- 查询姓马的有哪些? like
SELECT * FROM student WHERE NAME LIKE '马%';
-- 查询姓名第二个字是化的人
SELECT * FROM student WHERE NAME LIKE "_化%";
-- 查询姓名是3个字的人
SELECT * FROM student WHERE NAME LIKE '___';

3.3 排序查询

语法: order by 子句

order by 排序字段1 排序方式1, 排序字段2 排序方式2...
  • 排序方式:
    • ASC:升序(默认)
    • DESC:降序

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

3.4 聚合查询

将一列数据作为一个整体,进行纵向的计算。
COUNT MAX MIN SUM AVG

3.5 分组查询

语法:GROUP BY 分组字段;

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

WHERE 和 HAVING 的区别?

  1. WHERE 在分组之前进行限定,如果不满足条件,则不参与分组。HAVING在分组之后进行限定,如果不满足结果,则不会被查询出来
  2. WHERE 后不可以跟聚合函数,HAVING可以进行聚合函数的判断。

3.6 分页查询

语法:LIMIT 开始的索引,每页查询的条数;
公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
注: LIMIT 是一个MySQL 方言

3.7 多表查询

笛卡尔积:有两个集合A&B取这两个集合的所有组成情况。
注: 要完成多表查询,需要消除无用的数据

  • 内连接
    • 隐式内连接
    • 显示内连接
  • 外连接
    • 左外连接
    • 右外连接
  • 子查询

四、DCL(管理用户&授权)

4.1 用户管理

添加用户

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

删除用户

DROP USER '用户名'@'主机名';

修改用户密码

UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名';
UPDATE USER SET PASSWORD = PASSWORD('123') WHERE USER = 'zhinian';SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');

mysql中忘记了root用户的密码?
① 停止MYSQL服务
② 使用无验证方式启动MYSQL服务: mysqld --skip-grant-tables
③ 直接输入mysql命令,敲回车。就可以登录成功
use mysql;
update user set password = password('你的新密码') where user = 'root';
⑥ 重启MYSQL

查询用户

USE myql;
SELECT * FROM USER;

注: 通配符% 表示可以在任意主机使用用户登录数据库

4.2 权限管理

查询权限

-- 查询权限
SHOW GRANTS FOR '用户名'@'主机名';
SHOW GRANTS FOR 'zhinian'@'%';

授予权限

-- 授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
-- 给只年用户授予所有权限,在任意数据库任意表上
GRANT ALL ON *.* TO 'zhinian'@'localhost';

撤销权限

-- 撤销权限:
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
REVOKE UPDATE ON zhinian_db.`account` FROM 'zhinian'@'%';

五、约束

对表中的数据进行限定,保证数据的正确性、有效性和完整性。

非空约束: NOT NULL

某一列的值不能为NULL

-- 建表时
CREATE TABLE employee (`id` INT,`name` VARCHAR(20) NOT NULL -- name为非空
);
-- 建表后
ALTER TABLE employee MODIFY `name` VARCHAR(20) NOT NULL;
-- 删除name的非空约束
ALTER TABLE employee MODIFY `name` VARCHAR(20);

唯一约束: UNIQUE

某一列的值不能重复
注: 唯一约束可以有NULL值,但是只能有一条记录NULL

-- 建表时
CREATE TABLE employee (`id` INT,`phone_number` VARCHAR(20) UNIQUE -- 手机号
);
-- 建表后
ALTER TABLE employee MODIFY `phone_number` VARCHAR(20) UNIQUE;
-- 删除唯一约束
ALTER TABLE employee DROP INDEX `phone_number`;

主键约束: PRIMARY KEY

① 非空且唯一;②一张表只能有一个主键;③主键就是表中记录的唯一标识

-- 建表时
CREATE TABLE employee (`id` INT PRIMARY KEY,-- 给id添加主键约束`name` VARCHAR(20)
);
-- 建表后
ALTER TABLE employee MODIFY `id` INT PRIMARY KEY;
-- 删除主键约束
ALTER TABLE employee DROP PRIMARY KEY;

外键约束: FOREIGN KEY

FOREIGN KEY,让表于表产生关系,从而保证数据的正确性。

-- 建表时
create table 表名(....外键列constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
);
-- 建表后
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
-- 删除自动增长
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
-- 级联操作(级联更新:ON UPDATE CASCADE 、级联删除:ON DELETE CASCADE )
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE;

字段自动增长: AUTO_INCREMENT

如果某一列是数值类型的,使用 AUTO_INCREMENT 可以来完成值得自动增长

-- 建表时
CREATE TABLE employee (`id` INT PRIMARY KEY AUTO_INCREMENT,-- 给id添加主键约束`name` VARCHAR(20)
);
-- 建表后
ALTER TABLE employee MODIFY `id` INT AUTO_INCREMENT;
-- 删除自动增长
ALTER TABLE employee MODIFY `id` INT;

六、数据库事务

如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。
开启事务: START TRANSACTION;
回滚:ROLLBACK;
提交:COMMIT;

七、数据库设计

一对一、一对多/多对一、多对多(借助中间表)

设计范式
设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须先遵循前边的所有范式要求
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

  • 第一范式(1NF):每一列都是不可分割的原子数据项
  • 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于码(在1NF基础上消除非主属性对主码的部分函数依赖)
    • 函数依赖:A–>B,如果通过A属性(属性组)的值,可以确定唯一B属性的值。则称B依赖于A
      • 例如:学号 ☞ 姓名。 (学号,课程名称)☞ 分数
    • 完全函数依赖:A–>B, 如果A是一个属性组,则B属性值得确定需要依赖于A属性组中所有的属性值。
      • 例如:(学号,课程名称)☞ 分数
    • 部分函数依赖:A–>B, 如果A是一个属性组,则B属性值得确定只需要依赖于A属性组中某一些值即可。
      • 例如:(学号,课程名称)☞ 姓名
    • 传递函数依赖:A–>B, B – >C . 如果通过A属性(属性组)的值,可以确定唯一B属性的值,在通过B属性(属性组)的值可以确定唯一C属性的值,则称 C 传递函数依赖于A
      • 例如:学号 ☞ 系名,系名 ☞ 系主任
    • 码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码,例如:该表中码为:(学号,课程名称)
      • 主属性:码属性组中的所有属性
      • 非主属性:除过码属性组的属性
  • 第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

八、还原和备份

备份: mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
还原: ① 登录数据库; ② 创建数据库;③ 使用数据库;④ 执行文件。source 文件路径

九、存储过程

待续...

客户端图形化工具

  • SQLYog
  • Navicat
  • DBeaverEE
  • Sequel-Ace

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/677122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2.7 Binance_interface APP 现货交易-限价单开仓

Binance_interface APP 现货交易-限价单开仓 Github地址PyTed量化交易研究院 目录 Binance_interface APP 现货交易-限价单开仓1. APP 现货交易-限价单开仓函数总览2. 模型实例化3. 同步 非堵塞 限价开仓&#xff08;购买&#xff09;4. 同步 堵塞 限价开仓&#xff08;购买&a…

linux进程(进程状态)

目录 前言&#xff1a; 正文&#xff1a; 1.R运行状态&#xff08;running&#xff09; 2.睡眠状态&#xff08;sleeping&#xff09; 3.D磁盘休眠状态&#xff08;Disk sleep&#xff09; 4停止状态&#xff08;stop&#xff09; 5僵尸状态&#xff08;Z&#xff09; …

从零开始学HCIA之NAT基本工作原理

1、NAT设计之初的目的是解决IP地址不足的问题&#xff0c;慢慢地其作用发展到隐藏内部地址、实现服务器负载均衡、完成端口地址转换等功能。 2、NAT完成将IP报文报头中的IP地址转换为另一个IP地址的过程&#xff0c;主要用于实现内部网络访问外部网络的功能。 3、NAT功能一般…

C#系列-C#访问FTP服务器实现上传下载(8)

FTP Server是什么&#xff1f; FTP Server&#xff08;File Transfer Protocol Server&#xff09;&#xff0c;即文件传输协议服务器&#xff0c;是在互联网上提供文件存储和访问服务的计算机。它依照FTP协议提供服务&#xff0c;专门用来传输文件。 FTP Server允许不同的客…

攻防世界 CTF Web方向 引导模式-难度1 —— 11-20题 wp精讲

PHP2 题目描述: 暂无 根据dirsearch的结果&#xff0c;只有index.php存在&#xff0c;里面也什么都没有 index.phps存在源码泄露&#xff0c;访问index.phps 由获取的代码可知&#xff0c;需要url解码(urldecode )后验证id为admin则通过 网页工具不能直接对字母进行url编码 …

SolidWorks学习笔记——入门知识2

目录 建出第一个模型 1、建立草图 2、选取中心线 3、草图绘制 4、拉伸 特征的显示与隐藏 改变特征名称 5、外观 6、渲染 建出第一个模型 1、建立草图 图1 建立草图 按需要选择基准面。 2、选取中心线 图2 选取中心线 3、草图绘制 以对称图形举例&#xff0c;先画出…

函数高级(C++)

师从黑马程序员 函数默认参数 在C中&#xff0c;函数的形参列表中的形参是可以有默认值的 语法&#xff1a;返回值类型 函数名 &#xff08;参数默认值 {}&#xff09; #include <iostream> using namespace std;//函数默认参数//如果我们自己传入数据&#xff0c;…

点云从入门到精通技术详解100篇-非结构化道路下无人平台路径规划与运动控制

目录 前言 路径规划方法研究现状 传统规划算法 智能规划算法 规划方法比较

vue 用的watch 的说明及例子

在 Vue.js 中&#xff0c;watch 是一个用于观察和响应 Vue 实例上数据变化的对象。当需要在数据变化时执行异步或开销较大的操作时&#xff0c;watch 是非常有用的。 说明 watch 对象包含一系列键值对&#xff0c;其中键是需要观察的响应式数据属性&#xff0c;值是一个处理函…

股票均线的使用方法和实战技术,看涨看空的均线形态与案例教学

一、教程描述 本套教程讲解了14种均线的特殊形态&#xff0c;通过直观图形以及大量案例的教学&#xff0c;将深奥、繁琐的均线变得生动与具体&#xff0c;广大投资者在认真学习以后&#xff0c;可以学会均线的使用方法&#xff0c;掌握最强的均线应用实战技术。本套教程不仅适…

[韩顺平]python笔记

AI工程师、运维工程师 python排名逐年上升&#xff0c;为什么&#xff1f; python对大数据分析、人工智能中关键的机器学习、深度学习都提供有力的支持Python支持最庞大的 代码库 &#xff0c;功能超强 数据分析&#xff1a;numpy/pandas/os 机器学习&#xff1a;tensorflow/…

idea mavn 中途新建gitignore文件如何生效

两种情况下项目代码中新建gitignore文件如何生效。 第一种情况项目代码下没有模块的情况 直接在该项目代码的根目录下进入git命令行执行&#xff1a; git rm -r --cached . git add . 注意上面两个命令后面都有一个点 第二种情况是有模块的情况 需要进入模块目录执行上…

【Linux】指令提权-sudo

Hello everybody&#xff0c;新年快乐&#xff01;哈哈&#xff01;今天打算给大家讲讲指令提权的相关知识&#xff0c;虽然内容不多&#xff0c;但有时却很有用。在我们学习过权限&#xff0c;vim后就可以学习指令提权啦&#xff0c;没看过的宝子们建议先去看一看我之前的文章…

初识Solidworks:我的第一份作业的感想

从来没用CAD软件画过机械设计图。但我脑子里有一种概念&#xff0c;无非就是把尺规作图软件化&#xff0c;更方便画图、更方便修改、更方便打印一些。但第一份 Solidworks 作业就颠覆了我的认知&#xff0c;考虑到这个软件的上市时间&#xff0c;让我意识到自己对 CAD 软件的认…

BUUCTF LKWA

1.访问页面。 2.选择 Variables variable 关卡 3.获得flag http://357dab81-78b8-4d74-976a-4a69dd894542.node5.buuoj.cn:81/variables/variable.php?funcpassthru&inputcat%2Fflagflag{0020ced6-8166-4fa5-87a7-7d93ee687c3e}

SPSS基础操作:对数据按照变量进行排序

在整理数据资料或者查看分析结果时&#xff0c;如果变量设置得非常多&#xff0c;我们有时会希望变量值能够按照变量的某一属性大小进行升序或者降序排列&#xff0c;比如我们想观察有哪些变量是名义变量或者有序变量&#xff0c;有哪些变量进行了变量标签操作或者值标签操作等…

H12-821_73

73.某台路由器Router LSA如图所示&#xff0c;下列说法中错误的是&#xff1f; A.本路由器的Router ID为10.0.12.1 B.本路由器为DR C.本路由器已建立邻接关系 D.本路由器支持外部路由引入 答案&#xff1a;B 注释&#xff1a; LSA中的链路信息Link ID&#xff0c;Data&#xf…

python web 框架Django学习笔记

2018年5月 python web 框架Django学习笔记 Django 架站的16堂课 MVC架构设计师大部分框架或大型程序项目中一种软件工程的架构模式&#xff0c;把程序或者项目分为三个主要组成部分&#xff0c;Model数据模型、View视图、Controller控制器。 命令及设置相关 创建数据库及中间…

女程序员失业半年,某央企以为她已婚已孕,准备发offer,结果发现她未婚未孕,立马反悔,取消offer。...

职场中&#xff0c;性别平等一直是热议的话题。特别是女性职员&#xff0c;在招聘和晋升的过程中&#xff0c;往往面临着不小的挑战。 最近&#xff0c;一个帖子在网上引发了广泛关注。一位女性因为失业半年终于拿到了央企的offer&#xff0c;却因为企业误以为她已婚已孕而准备…

数据结构之外部排序

外部排序就是对大型文件的排序&#xff0c;待排序的记录存放在外存。在排序的过程中&#xff0c;内存只存储文件的一部分记录&#xff0c;整个排序过程需要进行多次内外存间的数据交换。   常用的外部排序方法是归并排序&#xff0c;一般分为两个阶段&#xff1a;在第一阶段&…