MySQL(CRUD)

news2024/11/15 7:11:54

MySQL

mysql -u root -ply

MySQL的三层结构

1.安装MySQL数据库本质就是在主机安装一个数据库管理系统(DBMS),这个管理程序可以管理多个数据库.

2.一个数据库中可以创建多个表,以保存数据

SQL语句分类

1.DDL:数据定义语句[create 表,库]

2.DML:数据操作语句[增加insert,修改update,删除delete]

3.DQL:数据查询语句[select]

4.DCL:数据控制语句[管理数据库:比如用户权限 grant 撤回 revoke]

创建数据库

查看,删除数据库

显示数据库语句:SHOW DATABASE

显示数据库创建语句:SHOW CREATE DATABASE db_name

数据库删除语句:DROP DATABASE [IF EXISTS] db_name

创建数据库,表的时候,为了规避关键字,可以使用反引号解决

备份恢复数据库

备份数据库(注意: 在DOS执行)命令行

mysqldump -u 用户名(本机是root) -p -B数据库1 数据库2 数据库n>路径 文件名.sql (如 >d:\\bak.sql)

恢复数据库

在MySQL命令行在执行 source 文件名.sql

备份表

mysqldump -u 用户名-p 数据库 表1 表2 表n>路径 文件名.sql

恢复表

source 文件名.sql 也可以直接把备份文件复制到SQLyog执行

创建表

MySQL常用的数据类型

1.整型:如果没有指定unsinged,就是有符号,否则无.

2.字符串的基本使用:char最大255字符,可变长度字符串varchar最大65532字节,utf8最大21844字符,gbk最大32766个字符,1-3个字节用于记录大小

3.decimal[M,D][大小不确定,m-d的范围可指定,否则默认是10-30]

4.char(4)和varchar(4)区别在于,char不是字节数,不管是中文还是字母都放四个,即是定长(大小固定,占用分配四个字符的空间),varchar这个4表示字符数,不管是字母还是中文都以定义好的表的编码来存放数据(即变长.按实际占用空间分配)

修改表(添加修改删除)

-- 在emp表添加一个image列,varchar类型,要求在resume后面  
ALTER TABLE emp   
    ADD COLUMN image VARCHAR(32) NOT NULL DEFAULT '' AFTER RESUME
  
-- 显示表结构(这通常是一个单独的命令,不是ALTER TABLE的一部分)  
-- DESC emp; -- 可以在这里运行,但不在ALTER TABLE操作中  
  
-- 修改job列,使其长度为60  
ALTER TABLE emp
    MODIFY COLUMN job VARCHAR(60) NOT NULL DEFAULT ''
  
-- 删除sex列  
ALTER TABLE emp  
    DROP COLUMN sex
  
-- 表名修改为employee 
RENAME TABLE emp TO employee
  
-- 修改表的字符集为utf8(建议使用utf8mb4以支持更广泛的Unicode字符)  
ALTER TABLE employee CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
  
-- 列名name修改为user_name  
ALTER TABLE employee   
    CHANGE COLUMN `name` `user_name` VARCHAR(64) NOT NULL DEFAULT ''
  
-- 显示修改后的表结构  
DESC employee

注意没加分号;一条一条的执行编辑语句

数据库的CRUD语句

insert(添加)

如:

-- 创建一张商品表的goods
CREATE TABLE `goods` (
	id INT,
	goods_name VARCHAR(10),
	price DOUBLE);
-- 添加数据
INSERT INTO `goods`(id,goods_name,price)
	VALUES(10,'华为手机',2000);

insert细节

1.插入的数据应与字段的数据类型相同,且字段长度应在规定范围内

2.在values中列出的数据位置必须与被加入的列排列顺序相对应

3.字符和日期需要包含在单引号内

4.列可以插入控制[前提是该字段允许为空,看定义],insert into table value(null)

5.insert into 列名 values(),(),() 形式添加多条记录

6.如果是给表中的所有字段添加数据,可以不写前面的字段名称

7.默认值的使用,当不给某个字段值的时候,如果有默认值机会添加,否则报错.

可以指定,在创建表的时候指定,如 price DOUBLE NOT NULL DEFAULT 100

update(修改)

update细节

1.update语法可以用来更新原有表行中的列

2.set子句指示要修改哪些值和要给予哪些值

3.where子句指定应该更新哪些行.如果没有WHERE子句.则更新所有的行

4.如果要修改多个字段,可以通过 set 字段1=值1,字段2 = 值2.

delete语句

select语句**

在where子句中经常用到的运算符

使用order by子句排序查询的结果

使用group by 和having子句

合计/统计函数

-- 1.演示mysql的统计函数count的使用
SELECT COUNT(*) FROM student
-- 统计总分大于300的人数
SELECT COUNT(*)FROM student
	WHERE (math+english+chinese)>300
-- 解释:count(*)返回满足条件记录的行数
-- count(列): 统计满足条件的某列有多少个,会排除null
CREATE TABLE t2 (
	`name` VARCHAR(20));
INSERT INTO t2 VALUES('tom');
INSERT INTO t2 VALUES('luo');
INSERT INTO t2 VALUES('tang');
INSERT INTO t2 VALUES(NULL);
SELECT * FROM t2;
SELECT COUNT(*)FROM t2 -- 4
SELECT COUNT(`name`)FROM t2 -- 3

-- 2.演示sum函数,仅对数值起作用
-- 统计一个班级数学总成绩
SELECT SUM(math)FROM student
-- 统计一个班级语文平均分
SELECT SUM(chinese)/COUNT(*)FROM student;
-- 3.演示avg的使用
SELECT AVG(math)FROM student
-- 4.演示max 和min 
SELECT MAX(math+english+chinese),MIN(math+english+chinese)FROM student
SELECT MAX(math)AS math_high,MIN(math)FROM student

字符串相关函数

-- charset返回字串字符集
SELECT CHARSET(ename) FROM emp
-- concat,连接字符串
SELECT CONCAT(ename,'工作是',job)FROM emp
-- instr(str,substr)返回str中substr出现的位置,没有返回-1
-- dual 亚元表,可作为测试表使用,系统自带
SELECT INSTR('hangshunping','ping')FROM DUAL
-- ucase lcase 转大小写
-- left(str,length),right(str,length)从左从右返回该字符串的指定长度

-- replace(str,search_str,replace_str)
-- 从str中replace_str替换search_str
SELECT ename,REPLACE(job,'manager','经理') FROM emp
-- strcmp(string1,string2)逐字比较两字串大小

-- substring(str,position[,length])
-- 从str 指定位置开始取长度,length不指定就是全取
SELECT SUBSTRING(ename,1,2)FROM emp
-- ltrim(str) rhrim(str) trim去除左端/右端/全部空格

练习,把ename的名字首字母小写后面全大写

数学相关函数

日期相关函数

加密和系统函数

流程控制函数

查询增强

-- 查询增强
-- mysql中日期类型可直接比较,需要注意格式
-- 查询2012.1.1后入职的员工
SELECT * FROM emo
	WHERE datehire>'2012.01.01'
-- 使用like操作符(模糊)
-- 	%: 表示0到多个任意字符 _:表示任意单个字符
-- 如何显示是首字符为s的员工姓名和工资?
SELECT ename,sal FROM emp
	WHERE ename LIKE 's%'
-- 如何显示第三个字符为大o的所有员工姓名和工资
SELECT ename,sal FROM emp
	WHERE ename LIKE '__O%'-- --两个下划线
-- 判断某一列是否为null 用is

-- 使用order by子句 来一个升序排列
SELECT * FROM emp
	ORDER BY sal ASC
-- 工资升序 部门降序排列
SELECT * FROM emp
	ORDER BY sal ASC,dep DESC

分页查询

select ... limit start,rows表示从start+1行开始取,取出rows行,start从0开始计算

分组复习

多子句查询

顺序不能错

案例:

-- 顺序group by->having->order by->limit

SELECT dep ,AVG(sal)AS avg_sal

FROM emp

GROUP BY dep -- 分组

HAVING avg_sal>1000 -- 过滤

ORDER BY avg_sal DESC -- 排序

LIMIT 0,2 -- 分页

多表查询*

重复的如果想要指定显示某个表的列,需要 表.列表

找到两个表或多个表多余的列的共同点进行过滤

多表查询的过滤条件不能少于 表的个数-1

自连接

自连接是指在同一张表的连接查询[将同一张表看作两张表.这种查询方式在处理具有层级关系或递归关系的数据时非常有用,比如部门结构中的上下级关系、员工之间的管理关系等。

自连接的示例

假设我们有一个employees表,其中包含员工的ID、姓名以及他们上级的ID(作为外键指向同一张表中的某个员工ID)。表结构可能如下所示:

employees  
+----+-----------+----------+  
| id | name      | manager_id|  
+----+-----------+----------+  
|  1 | John Doe  | NULL      |  
|  2 | Jane Doe  |  1 |  
|  3 | Bob Smith |  1 |  
|  4 | Alice     |  2 |  
+----+-----------+----------+

在这个例子中,John Doe是CEO,没有上级(manager_id为NULL)。Jane Doe和Bob Smith都向John Doe报告,而Alice则向Jane Doe报告。

如果我们想查询每个员工及其直接上级的名字,我们可以使用自连接来实现这一点:

SELECT   e1.name AS em_name,  e2.name AS ma_name  
      FROM   emp e1 ,emp e2 
      WHERE  e1.id=e2.id

多行子查询

-- 如何查询与smith同一部门的所有员工
-- 1.先查询到Smith的部门号
-- 2.把上面的select语句当作一个子查询来使用
SELECT *
	FROM emp
	WHERE deptno =(
		SELECT deptno
		FROM emp
		WHERE ename = 'smith'
		)
-- 课堂练习: 如何查询和部门10的工作相同的雇员的
-- 名字,岗位,工资,部门号,但不含10号部门自己的雇员
-- 查询十号部门有哪些工作
SELECT DISTINCT job -- distinct去重
	FROM emp
	WHERE deptno =10;
-- 把上面查询的结果当作子查询使用,完整语句
SELECT ename,job,sal,deptno
	FROM emp
	WHERE job IN(
			SELECT DISTINCT job
			FROM emp
			WHERE deptno =10
			)AND deptno!=10

子查询临时表

把子查询当做一张临时表来使用,可以解决很多问题

all和any

多列子查询

多列子查询是指查询返回多个列数据的子查询语句

表的复制和去重

-- 表的复制
-- 
CREATE TABLE ly_tab01
	(id INT,
	`name` VARCHAR(32),
	sal DOUBLE,
	job VARCHAR(32),
	deptno INT;
DESC ly_tab01
SELECT * FROM ly_tab01
INSERT INTO ly_tab01
	VALUES(1,'Yu',19999,'java开发工程师',99)
SELECT * FROM emp
-- 演示如何自我复制
RENAME TABLE employee TO emp
-- 1.把emp表的记录复制到 ly_tab01
INSERT INTO ly_tab01
	(id,`name`,sal,job,deptno)
	SELECT id,user_name,sal,job,deptno FROM emp;
-- 2.自我复制
INSERT INTO ly_tab01
	SELECT * FROM ly_tab01
SELECT * FROM ly_tab01

-- 如何删除一张表的重复记录
-- 1.创建一张ly_tab02
-- 2. 让该表有重复的记录
CREATE TABLE ly_tab02 LIKE emp -- 这个语句把emp表的结构(列),复制到ly_tab02
DESC ly_tab02
INSERT INTO ly_tab02
	SELECT * FROM emp
SELECT * FROM ly_tab02
/*
	思路
	(1)先创建一张临时表 my_tmp,该表结构和my_tab02一样
	(2)把my_tmp的记录 通过distinct 关键字 处理后,把记录赋值到my_tmp
	(3)清除掉my_tab02记录
	(4)把my_tmp 表记录复制到ly_tab02
	(5)drop掉 临时表my_tmp
*/
CREATE TABLE my_tmp LIKE ly_tab02
INSERT INTO my_tmp
	SELECT DISTINCT * FROM ly_tab02;
DELETE FROM ly_tab02
INSERT INTO ly_tab02
	SELECT * FROM my_tmp
DROP TABLE my_tmp;

合并查询

mysql外连接

左外连接:(如果左侧的表完全显示我们就说是左外连接)

右外连接:(如果右侧的表完全显示我们就说是右外连接)

mysql约束

约束用于确保数据库满足特定的商业规则

包括not null ,unique,primary key,foreign key 和check五种

主键

primary key(主键)-基本使用

字段名 字段类型 primary key

-- 主键使用
-- id name,email
CREATE TABLE t13
	(id INT PRIMARY KEY,-- 表示id 是主键
	`name` VARCHAR(32),
	email VARCHAR(32));
-- 1.主键列的值是不可以重复
INSERT INTO t13
	VALUES(1,'jack','jack@sohu.com');
INSERT INTO t13
	VALUES(3,'lans','lans@sohu.com');
-- 2.primary key不可以重复且不能为null
INSERT INTO t13
	VALUES(NULL,'luo','luo@sohu.com');
-- 3.一张表最多只能有一个主键,但可以复合主键,把id name做成复合主键
CREATE TABLE t14
	(id INT ,
	`name` VARCHAR(32),
	email VARCHAR(32),
	PRIMARY KEY(id,`name`));-- 复合主键 需复合的都完全相同就无法添加
INSERT INTO t14
VALUES(3,'lans','lans@sohu.com');
INSERT INTO t14
VALUES(3,'lanss','lans@sohu.com');
SELECT * FROM t14
-- 使用desc表名,可以看到primary的情况
DESC t14 -- 查看 t14表的结果,显示约束的情况

unique/not null

外键

-- 外键演示
-- 主表
CREATE TABLE my_class(
	id INT PRIMARY KEY,
	`name` VARCHAR(32)NOT NULL DEFAULT '');
-- 从表
CREATE TABLE my_stu(
	id INT PRIMARY KEY,
	`name` VARCHAR(32) NOT NULL DEFAULT '',
	class_id INT,
	-- 指定外键关系
	FOREIGN KEY(class_id) REFERENCES my_class(id));
-- 测试数据
INSERT INTO my_class
	VALUES(100,'java'),(200,'web');
INSERT INTO my_stu
	VALUES(1,'tom',100);
INSERT INTO my_stu
	VALUES(2,'jack',200);
INSERT INTO my_stu
	VALUES(3,'lans',300); -- 失败,300班级不存在
SELECT * FROM my_stu

check

自增长

+AUTO_INCREMENT

索引**

大幅提高查询速度

创建索引,删除,改,查

索引的类型

1.主键索引,主键自动的为主索引(类型 Primary key)

2.唯一索引 (UNIQUE)

3.普通索引(INDEX)

4.全文索引(FULLTEXT)[适用MySAM]

开发中考虑使用全文搜索 Solr 和 ElasticSearch(ES)

-- 添加索引
-- 添加唯一索引
CREATE UNIQUE INDEX id_index ON t25(id);
-- 添加普通索引
CREATE INDEX id_index ON t25(id)
-- 想要优化速度但又不确定数据会不会重复就可以使用普通索引
-- 添加普通索引2
ALTER TABLE t25 ADD INDEX id_index(id)
-- 添加主键索引 可以在创建时添加
ALTER TABLE t25 ADD PRIMARY KEY(id)
-- 也可
-- 删除索引
SHOW INDEX FROM t25
DROP INDEX id_index ON t25
-- 删除主键索引
ALTER TABLE t25 DROP PRIMARY KEY
-- 修改索引 先删除 后重新添加
-- 查询索引
-- 1.方式
SHOW INDEX FROM t25
-- 2.方式
SHOW INDEXES FROM t25
-- 3.
SHOW KEYS FROM t25
-- 4 不建议
DESC t25

小结:

事务

隔离

...

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

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

相关文章

【杂记】裂脑人实验和语言模型幻觉

【杂记】裂脑人实验和语言模型幻觉 模型的自主意识在哪里,人的自我认知在哪里?自然而然的,“裂脑人” 这个词突然出现在我脑海里。然后随意翻了翻相关的文章,觉得这个问题和目前大模型面临的幻觉问题也高度相关,遂随笔…

一图打尽C++内存分区(分段)

一图打尽C内存分区(分段) 直接上图: 栈区(Stack Segment): 位于内存的高地址部分。用于存储函数调用时的局部变量、函数参数和返回地址。内存地址从高向低增长。 堆区(Heap Segment): 位于栈区…

人工智能的12个不为人知的秘密

随着人工智能技术在各行业的应用越来越广泛,IT领导者需要了解如何采用人工智能技术收集商业见解的秘密。 人类一直梦想着有一个无所不知、无所不能的精灵为自己提供帮助。如今需要感谢计算机科学家的不断探索和努力,将在人工智能领域找到这个答案&#x…

HTMX:用HTML属性实现AJAX、CSS过渡和WebSockets

前言 在现代 Web 开发中,用户界面的交互性和响应性是至关重要的。 用户期望网站和应用程序能够即时响应他们的操作,提供流畅和直观的体验。 传统的 JavaScript 库虽然功能强大,但往往伴随着复杂的配置和庞大的文件大小,这可能会…

怎么做PPT?10个做PPT必备的实用技巧,附3款AI制作PPT软件推荐!

在视觉化表达成为主流的当下,对于商业演示、学术报告还是课堂教学等场景,一份精心准备的PPT,能让你的观点更具说服力,更容易被观众所接受。 但不可否认的是,对许多人来说,制作一份既专业又吸引人的PPT幻灯…

浅谈城市地铁智能照明系统的能耗分析及节能措施

0引言 中国近40年经济快速增长,面临快速城市化挑战。城市轨道交通成为发达国家主要交通方式。2016年,43个城市获建设许可,比2012年多8个。"十三五"期间,新建城市轨道交通5357公里,年均1071公里,…

第23周:使用Word2vec实现文本分类

目录 前言 一、数据预处理 1.1 加载数据 1.2 构建词典 1.3 生成数据批次和迭代器 二、模型构建 2.1 搭建模型 2.2 初始化模型 2.3 定义训练和评估函数 三、训练模型 3.1 拆分数据集并运行模型 3.2 测试指定数据 总结 前言 🍨 本文为[🔗365天…

贪吃蛇游戏:增加暂停按钮,每次增加10分蛇会变化

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>贪吃蛇游戏</title> </head> <st…

奇安信椒图--服务器安全管理系统(云锁)

奇安信椒图–服务器安全管理系统&#xff08;云锁&#xff09; 椒图 奇安信服务器安全管理系统是一款符合Gartner定义的CWPP&#xff08;云工作负载保护平台&#xff09;标准、EDR&#xff08;终端检测与响应&#xff09;、EPP终端保护平台&#xff08;终端保护平台&#xff…

山东济南最厉害的改名大师颜廷利:中国当代最伟大的哲学家之一

山东济南最厉害的改名大师颜廷利&#xff1a;中国当代最伟大的哲学家之一 颜廷利教授的哲学思想主要集中在《升命学说》中&#xff0c;强调奉献与无私奉献的重要性&#xff0c;认为金钱利益交易是现代社会的一个问题&#xff0c;并提出了一个理想的文明社会模型&#xff0c;其…

C++---由优先级队列认识仿函数

文章目录 一、优先级队列是什么&#xff1f; 二、如何使用优先级队列 1、优先级队列容器用法 2、为什么容器本身无序&#xff1f; 三、什么是仿函数&#xff1f; 1. 什么是仿函数&#xff1f; 2. 仿函数的优势 四、仿函数如何使用&#xff1f; 1、重载operator()函数 2、运用第…

分支管理

目录 创建分支 切换分支 合并分支 删除分支 合并冲突 创建分支 git branch [分支]指令 创建新的分⽀后&#xff0c;Git 新建了⼀个指针叫dev&#xff0c; * 表⽰当前 HEAD 指向的分⽀是 master 分⽀。另外&#xff0c;可以通过⽬录结构发现&#xff0c;新的 dev 分⽀…

s3c2440---ADC模数转换器

目录 一、模数转换器简述 1.1.简述 1.2.转换过程 ​编辑 1.3. ADC类别 二、普通ADC转换的实现 2.1.设置ADC控制寄存器 2.2. 读取ADC转换数据寄存器 三、总结 一、模数转换器简述 1.1.简述 S3c2440有一个10-bit的CMOS ADC 模数转换器&#xff0c;支持8个模拟通道输…

像素间的关系(邻接、连通、区域、边界、距离定义)

文章目录 像素的相邻像素4邻域D邻域8邻域 邻接、连通、区域和边界邻接类型连通区域边界 距离测度欧氏距离城市街区距离&#xff08;city-block distance&#xff09;棋盘距离&#xff08;chessboard distance&#xff09; 参考 像素的相邻像素 4邻域 坐标 ( x , y ) (x,y) (x…

kali 2024 安装SageMath

kali2024安装sagemath避坑指南 安装遇到的问题Install from conda-forge使用mamba安装sage 安装遇到的问题 刚开始使用sudo apt -y install sagemath和源码安装遇到各种包冲突&#xff0c;有的还涉及到系统底层包&#xff0c;没有避开。然后尝试使用mamba安装成功&#xff0c;…

93. UE5 GAS RPG 应用负面效果表现

在上一篇文章里&#xff0c;我们实现了添加负面效果GE&#xff0c;并且在添加GE时&#xff0c;也会给角色应用一个负面效果标签作为标识。在这一篇里&#xff0c;我们将通过负面效果标签标识&#xff0c;应用角色身上展现对应的负面效果的表现。 我们将在这篇文章里添加一个自定…

第一个React程序

虽然跟着网上的视频&#xff0c;但是都是几年前的教学视频了&#xff0c;于是就在视频的引导下&#xff0c;自己使用vite脚手架建立一个React项目。 首先来到vite官网&#xff1a; 和当时建立vue项目一样&#xff0c;使用该命令创建&#xff0c;只是后面选择框架时选择react&a…

《机器学习》 基于SVD的矩阵分解 推导、案例实现

目录 一、SVD奇异值分解 1、什么是SVD 2、SVD的应用 1&#xff09;数据降维 2&#xff09;推荐算法 3&#xff09;自然语言处理 3、核心 1&#xff09;什么是酉矩阵 2&#xff09;什么是对角矩阵 4、分解过程 二、推导 1、如何求解这三个矩阵 1&#xff09;已知&#xf…

10款好用的电脑监控软件推荐丨2024年干货整理,赶紧码住!

选择合适的电脑监控软件可以帮助企业和个人更好地管理和保护其计算机资源。以下是10款较为好用的电脑监控软件推荐。 1. 安企神 7天试用体验https://work.weixin.qq.com/ca/cawcde06a33907e60a 简介&#xff1a;安企神是一款专为企业设计的信息安全管理软件&#xff0c;提供…

算法_队列+宽度优先搜索

文章目录 前言N叉树的层序遍历题目要求题目解析代码如下 二叉树最大宽度题目要求题目解析代码如下 在每个树中找最大值题目要求题目解析代码如下 二叉树的锯齿形层序遍历题目要求题目解析代码如下 前言 本文将会向你介绍有关队列宽度优先搜索的题目&#xff1a;N叉树的层序遍历…