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

news2025/1/18 20:18:58

目录

  • 友情提醒
  • 第一章、数据库简述
    • 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,# 唯一约束,默认值 8
    score 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.coloradmin.cn/o/2278627.html

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

相关文章

游戏引擎学习第80天

Blackboard:增强碰撞循环,循环遍历两种类型的 t 值 计划对现有的碰撞检测循环进行修改,以便实现一些新的功能。具体来说,是希望处理在游戏中定义可行走区域和地面的一些实体。尽管这是一个2D游戏,目标是构建一些更丰富…

2025.1.15——四、布尔注入

题目来源:ctfhub技能树 目录 一、基本操作:整理已知信息,得到本题为布尔注入 方法一:手工盲注(不推荐) step 1:判断具体形式 step 2:查询字段数 step 3:通过回显判…

PE文件:节表-添加节

在所有节的空白区域都不够存放我们想要添加的数据时,这个时候可以通过添加节来扩展我们可操作的空间去存储新的数据(如导入表、代码或资源)。 过程步骤 1.判断是否有足够的空间添加节表 PE文件的节表紧跟在PE头之后,每个节表的…

【前端动效】HTML + CSS 实现打字机效果

目录 1. 效果展示 2. 思路分析 2.1 难点 2.2 实现思路 3. 代码实现 3.1 html部分 3.2 css部分 3.3 完整代码 4. 总结 1. 效果展示 如图所示,这次带来的是一个有趣的“擦除”效果,也可以叫做打字机效果,其中一段文本从左到右逐渐从…

Python基于Django的图像去雾算法研究和系统实现(附源码,文档说明)

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

了解 BM25:一种高效的文本检索算法

什么是 BM25? BM25(Best Matching 25)是一种在信息检索领域非常著名的算法,它属于 TF-IDF 的改进版本,是许多现代搜索引擎和文本检索系统的核心算法之一。BM25 基于概率检索模型(Probabilistic Informatio…

PenGymy论文阅读

这里发现idea被人家先发了,没办法,资料收集的不够全面,现在来学习一下这个项目 这篇论文的贡献如下: 总的来说,他的主要工作是构建逼真的仿真环境,然后根据这个仿真环境生成真实的靶场,使得这个…

猫贫血吃什么能快速补血?

各位铲屎官们,看到自家猫咪无精打采、小脸苍白,是不是特别心疼?贫血可是猫咪健康的大敌,今天就来给大家支支招,哪些食物和方法能让猫咪快速补血,恢复活力! 一、红肉及内脏类 红肉是补血的“主力…

Redis 性能优化:多维度技术解析与实战策略

文章目录 1 基准性能2 使用 slowlog 优化耗时命令3 big key 优化4 使用 lazy free 特性5 缩短键值对的存储长度6 设置键值的过期时间7 禁用耗时长的查询命令8 使用 Pipeline 批量操作数据9 避免大量数据同时失效10 客户端使用优化11 限制 Redis 内存大小12 使用物理机而非虚拟机…

wireshark抓路由器上的包 抓包路由器数据

文字目录 抓包流程概述设置抓包配置选项 设置信道设置无线数据包加密信息设置MAC地址过滤器 抓取联网过程 抓包流程概述 使用Omnipeek软件分析网络数据包的流程大概可以分为以下几个步骤: 扫描路由器信息,确定抓包信道;设置连接路由器的…

在 Fluent 网格划分中使用薄网格特征

薄体模型的网格划分策略 薄体网格划分对于有效模拟薄壁结构或厚度明显小于其他尺寸的几何形状非常有利。当使用此类几何结构时,传统的体积网格划分技术可能会导致单元数量增加,因为它们试图捕获具有许多不必要单元的薄尺寸。薄体网格划分通过专门沿薄方…

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

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

Linux-----线程同步(资源竞争和同步锁)

目录 资源竞争(背景) 锁(解决方式,实现同步) 互斥锁 读写锁 自旋锁 资源竞争(背景) 竞态条件 当多个线程并发访问和修改同一个共享资源(如全局变量)时,…

vue2 web 多标签输入框 elinput是否当前焦点

又来分享一点点工作积累及解决方案 产品中需要用户输入一些文字后按下回车键生成标签来显示在页面上&#xff0c;经过尝试与改造完成如下&#xff1a; <template><div class"tags-view" click"beginInput"><el-tag :key"index" …

Python学习(十)IO编程(文件读写、StringIO和BytesIO、操作文件和目录、序列化)

目录 一、什么是IO编程&#xff1f;二、文件读写1&#xff09;读文件2&#xff09;file-like Object3&#xff09;二进制文件4&#xff09;字符编码5&#xff09;写文件 三、StringIO 和 BytesIO1&#xff09;StringIO2&#xff09;BytesIO 四、操作文件和目录1&#xff09;操作…

5、docker-compose和docker-harbor

安装部署docker-compose 自动编排工具&#xff0c;可以根据dockerfile自动化的部署docker容器。是yaml文件格式&#xff0c;注意缩进。 1、安装docker-compose 2、配置compose配置文件docker-compose.yml 3、运行docker-compose.yml -f&#xff1a;指定文件&#xff0c;up&…

JS宏进阶: 工厂函数与构造函数

一、构造函数 在JavaScript中&#xff0c;构造函数是一种用于创建和初始化对象的特殊函数。构造函数的名字通常以大写字母开头&#xff0c;以区分于普通函数。通过new关键字调用构造函数&#xff0c;可以创建一个新的实例对象&#xff0c;并自动执行构造函数内部的代码来初始化…

uniapp 微信小程序 editor 富文本编辑器

<view class"inp boxsizing"><view class"contentBox"><!-- 富文本编辑器 --><view classwrapper><view classtoolbar tap"format"><view :class"formats.bold ? ql-active : " class"iconfon…

Python根据图片生成学生excel成绩表

学习笔记&#xff1a; 上完整代码 import os import re from openpyxl import Workbook, load_workbook from openpyxl.drawing.image import Image as ExcelImage from PIL import Image as PilImage# 定义图片路径和Excel文件路径 image_dir ./resources/stupics # 图片所…

在VMwareFusion中使用Ubuntu

在VMwareFusion使用Ubuntu 在VMwareFusion使用Ubuntu背景在VMwareFusion虚拟机里使用Ubuntu1、集成桌面工具2、主机和虚拟机之间共享剪贴板内容3、设置root用户密码4、设置静态ip4.1、静态ip和动态ip的区别4.2、查看当前ip4.2、linux网络配置文件所在位置4.3、基于ubuntu22.04.…