读《SQL经典实例》学数据库(系列一)

目录

  • 友情提醒
  • 第一章、数据库简述
    • 1.1)数据库简述
    • 1.2)常见的数据库软件
    • 1.3)MySQL数据库安装
  • 第二章、SQL语句分类
    • 2.1)操作数据仓库/数据表:DDL
      • 2.1.1)创建数据仓库/数据表
      • 2.1.2)删除数据仓库/数据表
      • 2.1.3)修改数据仓库/数据表
      • 2.1.4)查看数据仓库/数据表
    • 2.2)操作数据表中数据:DML
      • 2.2.1)增加数据(Insert)
      • 2.2.2)删除数据(Delete)
      • 2.2.3)修改数据(Update)
    • 2.3)查询数据表中数据DQL
      • 2.3.1)查询数据(Select)
    • 2.4)控制访问权限:DCL
      • 2.4.1)Grant授予权限
      • 2.4.2)REVOKE 撤销权限
    • 2.5)TCL(Transaction Control )
      • 2.5.1) BEGIN开始新的事务
      • 2.5.2)COMMIT提交当前事务
      • 2.5.3)ROLLBACK回滚事务
      • 2.5.4)SAVEPOINT创建保存点
      • 2.5.5) SET autocommit设置自动提交模式

友情提醒

先看文章目录,大致了解知识点结构,直接点击文章目录可以跳转到文章指定位置。

第一章、数据库简述

1.1)数据库简述

①数据库是什么:水库存水,数据库用来存各种各样的数据。使用数据库主要是为了方便使用SQL语句存储操作数据。
②数据库语言:用于访问和处理数据库的计算机语言。 它大部分是通用的,可适用几乎所有的数据库软件。每一个SQL语句都会有一个执行的结果。SQL语句不区分大小写,以;号结尾。

1.2)常见的数据库软件

①Oracle:收费很贵,适合中大型项目。
②MySql:免费!!!适合中小型项目,所以我们一般学习都用这个,毕竟SQL语言一通百通。
③DB2:收费,适合中大型项目。
④SqlServer:收费,适合中小项目。

1.3)MySQL数据库安装

安装篇幅比较长,看这篇就好点击这里跳转:MySQL数据库安装

第二章、SQL语句分类

2.1)操作数据仓库/数据表:DDL

DDL(Data Definition)数据定义语言,定义数据库结构,包括定义表、视图和索引。操作数据仓库和数据表本身。
语句关键词:

就是操作数据仓库和表
Create
Drop
Alter
Truncate

2.1.1)创建数据仓库/数据表

①创建数据仓库

-- 创建数据仓库,默认编码表为utf-8
-- 格式: create database 数据仓库名称。
create database db_name1;-- 创建数据仓库,创建的同时设置编码表
-- 格式: create database 数据仓库名称 character set 编码表名。
create database db_name2 character set gbk ;

②创建数据表

-- 创建数据表,同时设置字段,数据类型和约束
-- 格式
/* create table 数据表名称(字段1 类型(长度) [约束],字段2 类型(长度) [约束],....字段n 类型(长度) [约束] 
); */
use db_name1;
create table tableName1(sid int primary key auto_increment,# 主键约束 自增长sname varchar(10) comment '解释说明', # 会被编译的注释sex char(1) unique not null,# 唯一约束 非空约束age int unique default 8,# 唯一约束,默认值 8score double not null, # --,#是单行注释,/**/是多行注释birthday date
);

2.1.2)删除数据仓库/数据表

①删除数据仓库

-- 删除单个数据仓库
-- 格式 drop database 数据仓库名称;
drop database db_name1;

②删除数据表

-- 格式:drop table 数据表名称;
drop table tableName;

2.1.3)修改数据仓库/数据表

①修改数据仓库

-- 修改数据仓库编码表,注意写UTF-8的时候不要加-
-- 格式 alter database 数据仓库名称 character set 编码表名;
ALTER database db_name2 CHARACTER set UTF8;-- 切换数据仓库
-- 格式 use 数据仓库名称;
use db_name1;

②修改数据表

-- 增加列
-- 格式:alter table 表名 add 字段 类型(长度) 约束; 
ALTER table tablename1 add newid int not NULL;-- 修改现有列类型、长度和约束语法
-- 格式alter table 表名 modify 字段 类型(长度) 约束;
ALTER TABLE tablename1 MODIFY newid char(4) unique;-- 修改现有列名称语法
-- alter table 表名 change 旧字段名 新字段名 类型(长度) 约束;
ALTER TABLE tablename1 CHANGE newid newname char(4) not null;-- 删除现有列语法
-- alter table 表名 drop 字段;
ALTER TABLE tablename1 DROP newname;-- 修改表的字符集语法 
-- alter table 表名 character set utf8;
ALTER TABLE tablename1 CHARACTER set gbk;-- 修改表名语法
-- rename table 旧表名 to 新表名; 
RENAME TABLE tablename1 to tablename;

2.1.4)查看数据仓库/数据表

①查看数据仓库

-- 查看所有数据仓库
-- 格式:show databases;
show databases;-- 查看数据仓库编码格式
-- 格式: show create database 数据仓库名称。
show create database databaseName;-- 查看目前正在使用的数据仓库
-- 格式: SELECT DATABASE();
SELECT DATABASE();

②查看数据表

-- 查看数据表编码格式
--格式: show create table 数据表名称。
show create TABLE tableName1;-- 查看数据表
show TABLES;-- 查看数据表结构
desc tableName;

2.2)操作数据表中数据:DML

DML(Data Manipulation)数据处理语言,包括插入、删除和修改操作。
语句关键词:

就是增删改数据
Delete
Insert
Update

2.2.1)增加数据(Insert)

-- 添加数据第一种格式 当某列值可以为null,自增长或有默认值时可以省略
-- 格式:insert into 数据表名称 (字段1,字段2,...字段N) values (值1,值2,...值N);
insert into tablename(sid,sname,sex,age,score,birthday)values(3,'张一','男',23,89,'1204');
insert into tablename(sid,sname,sex,age,score,birthday)values(4,'张二','女',26,99,'1205');-- 添加数据第二种格式
-- 格式:insert into 数据表名称 set 字段1=值1,字段2=值2,...字段N=值N;
insert into tablename set sid=5,sname='张三',sex='难',age=20,score=91,birthday='1209';
insert into tablename set sid=6,sname='张四',sex='♀',age=10,score=19,birthday='1200';

举例:

insert into b_pro_evaluate(pid,star,eval)values(1,3,'很好回收率很高');
insert into b_pro_evaluate(pid,star,eval)values(1,2,'非常不错的产品');
insert into b_pro_evaluate(pid,star,eval)values(2,5,'五星好评');

2.2.2)删除数据(Delete)

-- 按照行逐行删除整个表的数据但是表本身还存在
-- 格式: delete from 数据表名称;
delete from tableName;-- 先删表,再建新表 效率高
truncate table student1;-- 按条件删除表中数据
-- 格式:delete from 数据表名称 where 条件语句;
delete FROM tableName where sid=1;

删除表中的数据时没有加where 条件,会删除表中的所有数据,它与truncate 有什么区别?
delete删除表中的数据是按照行逐行删除。 效率低
truncate它是先把表删掉,然后再把表创建出来。 效率高

2.2.3)修改数据(Update)

-- 更新修改数据
-- 格式:update 数据表名称 set 字段1=新值,字段2=新值 where 条件语句; update tableName set age = 15;
update tableName set age = age + 10 where sid % 2 = 0;
update tableName set sname = "小冯",age = 22 where sid = 4;

2.3)查询数据表中数据DQL

(Data Query )数据查询语言,用于查询数据表中的数据,通过select关键字。
语句关键词:

就是查询数据
Select

2.3.1)查询数据(Select)

-- 查询整张表
-- 格式:select * from 数据表名称;
select * from tableName;-- 按条件查询
-- 格式:select * from 数据表名称 where 查询条件;
select * from tableName where sid =4;-- 按条件查询
-- 格式:select 字段1,字段2 ... from 数据表名称 where 查询条件;
select sname,age from tableName where sid =4;

2.4)控制访问权限:DCL

DCL(Data Control)数据控制语言,包括对数据的安全性控制、完整性规则的描述以及对事务的定义、并发控制和恢复。
语句关键词:

Grant
Revoke

2.4.1)Grant授予权限

①授予用户权限
username:要授予权限的用户名。
host:用户连接数据库的主机名(例如,localhost 或 % 表示任何主机)。
password:用户的密码。

--授予用户对所有数据库的所有权限
GRANT ALL PRIVILEGES ON *.* TO 'username'@'host' IDENTIFIED BY 'password';
--授予用户对特定数据库的所有权限
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';
--授予用户对特定表的特定权限
GRANT SELECT, INSERT, UPDATE ON database_name.table_name TO 'username'@'host';
--授予用户创建数据库的权限
GRANT CREATE ON *.* TO 'username'@'host';
--授予用户执行存储过程和函数的权限
GRANT EXECUTE ON PROCEDURE database_name.procedure_name TO 'username'@'host';
GRANT EXECUTE ON FUNCTION database_name.function_name TO 'username'@'host';

2.4.2)REVOKE 撤销权限

撤销权限

--撤销用户对所有数据库的所有权限
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'username'@'host';
--撤销用户对特定数据库的所有权限
REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'host';
--撤销用户对特定表的特定权限
REVOKE SELECT, INSERT, UPDATE ON database_name.table_name FROM 'username'@'host';
--撤销用户创建数据库的权限
REVOKE CREATE ON *.* FROM 'username'@'host';
--撤销用户执行存储过程和函数的权限
REVOKE EXECUTE ON PROCEDURE database_name.procedure_name FROM 'username'@'host';
REVOKE EXECUTE ON FUNCTION database_name.function_name FROM 'username'@'host';

属性权限

--在授予或撤销权限后,最好刷新权限,以确保更改立即生效:
FLUSH PRIVILEGES;

2.5)TCL(Transaction Control )

事务控制语言,用于控制事务。
语句关键词:

BEGIN
Set transaction
Rollback
Savepoint
Commit

2.5.1) BEGIN开始新的事务

BEGIN或 START TRANSACTION开始新的事务

START TRANSACTION;BEGIN;

2.5.2)COMMIT提交当前事务

COMMIT 用于提交当前事务,使事务中的所有更改永久生效。

START TRANSACTION;UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;COMMIT;

2.5.3)ROLLBACK回滚事务

ROLLBACK用于回滚当前事务,撤销事务中的所有更改。如果事务中的任何操作失败,或者决定不保存更改,可以使用 ROLLBACK 撤销所有更改。这里使用了 ROLLBACK 而不是 COMMIT,意味着事务中的所有更改都不会被保存到数据库中。

START TRANSACTION;UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;ROLLBACK;

2.5.4)SAVEPOINT创建保存点

SAVEPOINT用于在事务中创建一个保存点,允许回滚到该保存点而不是整个事务。

START TRANSACTION;UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
SAVEPOINT savepoint1;UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;-- 如果第二个更新失败,可以回滚到保存点
ROLLBACK TO savepoint1;COMMIT;

2.5.5) SET autocommit设置自动提交模式

SET autocommit用于设置自动提交模式。默认情况下,MySQL 是自动提交的,即每个语句都会自动提交。

关闭自动提交:SET autocommit = 0; 关闭自动提交后,需要手动使用 COMMIT 或 ROLLBACK 来结束事务。
重新开启自动提交:SET autocommit = 1;

SET autocommit = 0;UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;COMMIT;

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

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

相关文章

【服务治理中间件】consul介绍和基本原理

目录 一、CAP定理 二、服务注册中心产品比较 三、Consul概述 3.1 什么是Consul 3.2 Consul架构 3.3 Consul的使用场景 3.4 Consul健康检查 四、部署consul集群 4.1 服务器部署规划 4.2 下载解压 4.3 启动consul 五、服务注册到consul 一、CAP定理 CAP定理&#xff…

Linux命令行工具-使用方法

参考资料 Linux网络命令:网络工具socat详解-CSDN博客 arm-linux-gnueabihf、aarch64-linux-gnu等ARM交叉编译GCC的区别_aarch64-elf-gcc aarch64-linux-gnu-CSDN博客 解决Linux内核问题实用技巧之-dev/mem的新玩法-腾讯云开发者社区-腾讯云 热爱学习地派大星-CS…

5-1 创建和打包AXI Interface IP

创建和打包AXI Interface IP的前流程和后流程 step 1 : 选择类型 1: 将当前的工程打包成IP 2: 将当前的BD工程打包成IP 3: 将指定的源码打包成IP 4: 创建一个新的AXI 接口IP 其中3和4是比较常用的,本次…

贪心算法(题1)区间选点

输出 2 #include <iostream> #include<algorithm>using namespace std;const int N 100010 ;int n; struct Range {int l,r;bool operator <(const Range &W)const{return r<W.r;} }range[N];int main() {scanf("%d",&n);for(int i0;i&l…

攻防世界 unseping

开启场景 整体来说是创建了一个case类&#xff0c;然后可接受post传来的ctf的值&#xff0c;并对其进行base64解码以及反序列化。所以我们能控制ctf变量。 先看__wakeup方法&#xff0c;该方法使用waf方法对$arg中的内容进行了防护&#xff0c;过滤掉了| & ; 空格 / cat f…

光伏储能电解水制氢仿真模型Matlab/Simulink

今天更新的内容为光伏储能制氢技术&#xff0c;这个方向我之前在21年就系统研究并发表过相关文章&#xff0c;经过这几年的发展&#xff0c;绿色制氢技术也受到更多高校的注意&#xff0c;本篇博客也是在原先文章的基础上进行更新。 首先让大家熟悉一下绿氢制取技术这个概念&a…

java spring,uName,kValue,前端传值后端接不到

大神链接https://blog.csdn.net/qq_39327650/article/details/134419523本文是参考上述大神链接&#xff0c;自己写这个博客主要是给自己加深印象&#xff0c;大神链接里描述的很清晰&#xff0c;包括源码解析&#xff0c;详细描述参考大神。 由于springboot用的是jackson进行…

XML序列化和反序列化的学习

1、基本介绍 在工作中&#xff0c;经常为了调通上游接口&#xff0c;从而对请求第三方的参数进行XML序列化&#xff0c;这里常使用的方式就是使用JAVA扩展包中的相关注解和类来实现xml的序列化和反序列化。 2、自定义工具类 import javax.xml.bind.JAXBContext; import javax.x…

【时时三省】(C语言基础)柔性数组的使用

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 示例&#xff1a; 柔性数组是一次性开辟的一块空间&#xff0c;实际上后面arr的空间是通过预设的方式&#xff0c;给它增加了一块空间 用柔性数组得好处 第一个好处是&#xff1a;方便内存…

RAG 切块Chunk技术总结与自定义分块实现思路

TrustRAG项目地址&#x1f31f;&#xff1a;https://github.com/gomate-community/TrustRAG 可配置的模块化RAG框架 切块简介 在RAG&#xff08;Retrieval-Augmented Generation&#xff09;任务中&#xff0c;Chunk切分是一个关键步骤&#xff0c;尤其是在处理结构复杂的PDF文…

【MySQL】数据库约束和多表查询

目录 1.前言 2.数据库约束 2.1约束类型 2.2?NULL约束 2.3 NUIQUE&#xff1a;唯一约束 2.4?DEFAULT&#xff1a;默认值约束 2.5?PRIMARY KEY&#xff1a;主键约束 2.6 FOREIGN KEY&#xff1a;外键约束 1.7?CHECK约束 3.表的设计? 3.1一对一 3.2一对多 3.3多…

解锁C#语法的无限可能:从基础到进阶的编程之旅

目录 一、C# 基础语法 1.1 数据类型 1.2 变量与常量 1.3 运算符 1.4 控制流语句 二、C# 面向对象编程语法 2.1 类与对象 2.2 封装 2.3 继承 2.4 多态 虚方法 抽象类 接口 三、C# 高级语法 3.1 特性&#xff08;Attribute&#xff09; 预定义特性 自定义特性 3…

【2024年华为OD机试】 (C卷,100分)- 小明找位置(Java JS PythonC/C++)

一、问题描述 题目描述 小朋友出操&#xff0c;按学号从小到大排成一列&#xff1b; 小明来迟了&#xff0c;请你给小明出个主意&#xff0c;让他尽快找到他应该排的位置。 算法复杂度要求不高于nLog(n)&#xff1b;学号为整数类型&#xff0c;队列规模 ≤ 10000&#xff1…

vue2配置跨域后请求的是本机

这个我来说明一下&#xff0c;因为我们公司的后端设置解决了跨域问题&#xff0c;所以我有很久没有看相关的内容了&#xff0c;然后昨天请求了需要跨域的接口&#xff0c;请求半天一直不对&#xff0c;浏览器显示的是本机地址&#xff0c;我以为是自己配置错了&#xff0c;后面…

【Uniapp-Vue3】@import导入css样式及scss变量用法与static目录

一、import导入css样式 在项目文件中创建一个common文件夹&#xff0c;下面创建一个css文件夹&#xff0c;里面放上style.css文件&#xff0c;编写的是公共样式&#xff0c;我们现在要在App.vue中引入该样式。 在App.vue中引入该样式&#xff0c;这样就会使样式全局生效&#…

大模型WebUI:Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(6)

大模型WebUI&#xff1a;Gradio全解11——Chatbot&#xff1a;融合大模型的多模态聊天机器人&#xff08;6&#xff09; 前言本篇摘要11. Chatbot&#xff1a;融合大模型的多模态聊天机器人11.6 为LLM Agent构建UI11.5.1 使用代理构建1. 使用transformers.agents的实际示例2. 使…

【React】插槽渲染机制

目录 通过 children 属性结合条件渲染通过 children 和 slot 属性实现具名插槽通过 props 实现具名插槽 在 React 中&#xff0c;并没有直接类似于 Vue 中的“插槽”机制&#xff08;slot&#xff09;。但是&#xff0c;React 可以通过 props和 children 来实现类似插槽的功能…

LoadBalancer负载均衡服务调用

LoadBalancer LoadBalancer&#xff08;负载均衡器&#xff09;是Spring Cloud中的一个关键组件&#xff0c;用于在微服务架构中实现服务请求的负载均衡。它的主要作用是将客户端的请求分发到多个服务实例上&#xff0c;以提高系统的可用性、性能和容错能力。通过LoadBalancer&…

Linux操作命令之云计算基础命令

一、图形化界面/文本模式 ctrlaltF2-6 图形切换到文本 ctrlalt 鼠标跳出虚拟机 ctrlaltF1 文本切换到图形 shift ctrl "" 扩大 ctrl "-" 缩小 shift ctrl "n" 新终端 shift ctrl "t" 新标签 alt 1,…

简历_使用优化的Redis自增ID策略生成分布式环境下全局唯一ID,用于用户上传数据的命名以及多种ID的生成

系列博客目录 文章目录 系列博客目录WhyRedis自增ID策略 Why 我们需要设置全局唯一ID。原因&#xff1a;当用户抢购时&#xff0c;就会生成订单并保存到tb_voucher_order这张表中&#xff0c;而订单表如果使用数据库自增ID就存在一些问题。 问题&#xff1a;id的规律性太明显、…