一文知数据库一文知数据库1.数据库的概念1.1概述什么是数据库 数据库就是存储数据的仓库其本质是一个文件系统数据按照特定的格式将数据存储起来用户可以对数据库中的数据进行增加修改删除及查询操作。什么是数据库管理系统 数据库管理系统DataBase Management SystemDBMS指一种操作和管理数据库的大型软件用于建立、使用和维护数据库对数据库进行统一管理和控制以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。数据库与数据库管理系统的关系1.2数据库表数据库中以表为组织单位存储数据。表类似我们的Java类每个字段都有对应的数据类型1.3常见数据库MYSQL 开源免费的数据库小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。Oracle 收费的大型数据库Oracle公司的产品。Oracle收购SUN公司收购MYSQL。DB2 IBM公司的数据库产品,收费的。常应用在银行系统中.SQLServerMicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。SyBase 已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。SQLite : 嵌入式的小型数据库应用在手机端。当然我们最常用的数据库是mysql、oracle2.SQL分类关系型数据库RDBMS关系型数据库绝对是 DBMS 的主流其中使用最多的 RDBMS 分别是 Oracle、MySQL 和 SQL Server 这些都是关系型数据库RDBMS。关系型数据库以行row和列column的形式存储数据以便于用户理解。这一系列的行和列被称为表table一组表组成了一个库database 。表和表之间的数据记录是有关系的relationship。现实世界中的各种实体和实体之间的各种联系均可以使用关系模型来表示。关系型数据库就是建立在关系模型基础上的数据库。SQL 就是关系型数据库的查询语言。非关系型数据库非 RDBMS可以看做是传统关系型数据库的功能的阉割版本基于键值对的存储数据不需要经过 SQL 层的解析性能非常高。同时通过减少不常用的功能进一步挺高性能。相比于 SQLNoSQL 泛指非关系型数据库包括了榜单上的键值性数据库、文档型数据库、搜索引擎和列存储等除此之外还包括图形数据库也只有 NoSQL 一词才可以将这些技术囊括进去。2.1SQL介绍数据库是不认识JAVA语言的但是我们同样要与数据库交互这时需要使用到数据库认识的语言SQL语句它是数据库的代码。结构化查询语言(Structured Query Language)简称SQL是关系型数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句但都有特有内容2.2SQL语句分类SQL分类数据定义语言简称DDL(Data Definition Language)用来定义数据库对象数据库表列等。关键字createalterdrop等数据操作语言简称DML(Data Manipulation Language)用来对数据库中表的记录进行更新。关键字INSERTDELETEUPDATE等数据控制语言简称DCL(Data Control Language)用来定义数据库的访问权限和安全级别及创建用户。主要的语句关键字包括GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT 等。数据查询语言简称DQL(Data Query Language)用来查询数据库中表的记录。关键字selectfromWHERE等。事务控制语言简称 TCLTransaction Control LanguageCOMMIT提交事务、ROLLBACK 回滚事务。SQL通用语法SQL语句可以单行或多行书写以分号( ; )结尾 。可使用空格和缩进来增强语句的可读性。MySQL 在 Windows 环境下是大小写不敏感的。MySQL 在 Linux 环境下是大小写敏感的。数据库名、表名、表的别名、变量名是严格区分大小写的额。关键字、函数名、列名或字段名、列的别名或字段的别名是忽略大小写的。推荐采用统一的书写规范数据库名、表名、表的别名、字段别名等都小写。SQL 关键字、函数名、绑定变量等都大写。例如SELECT /* FROM user。SELECT … FROM dual ; # dual 称为伪表注释#单行注释– 注释文字 -- 后面必须包含一个空格单行注释//* 注释文字 /*/ 多行注释关键字不能被缩写也不能分行标点符号必须保证所有的 ()、单引号、双引号是成对结束的。必须使用英文状态下的半角输入方式。字符串类型或日期时间类型的数据可以使用单引号‘’表示。列的别名尽量使用双引号“”而且不建议省略 as 。命名规则数据库、表名不得超过 30 个字符变量名限制为 29 个。必须只能包含 [a-zA-Z0-9/_] 共 63 个字符。数据库名、表名、字段名等对象名重要不要包含空格。同一个 MySQL 软件中数据库不能同名同一个库中表不能重名同一个表中字段不能重名。必须保证字段没有和保留字、数据库系统或常用方法冲突如果坚持使用请在 SQL 语句中使用 着重号引起来。保持字段名和类型的一致性在命名字段并为其指定数据类型的时候一定要保证一致性。如数据类型在一个表里是整数但是到另一个表里就不要变为字符类型。表名错误因为表名有空格create table student info(…);起别名时as 都可以省略,如果字段别名中没有空格那么可以省略select id as 编号, name as 姓名 from t_stu; /# 错误如果字段别名中有空格那么不能省略 select id as 编 号, name as 姓 名 from t_stu;2.3关系型数据库设计规则2.3.1概述关系型数据库的典型数据结构就是数据表这些数据表的组成都是结构化的Structured 。将数据放到表中表再放到数据库中。一个数据库中可以有多个表每个表都有一个名字用来标识自己。表名具有唯一性。表具有一些特性这些特性定义了数据在表中是如何存储类似于 Java 中类的设计2.3.2 表、记录、字段E-Rentity-relationship实体-联系模型中有三个主要的概念实体集、属性和联系集。一个实体集class对应数据库中的一个表table一个实体instance则对应数据库表中的一行row也称为一条记录record一个属性attribute对应于数据库表中的一列column也称为一个字段field。3.SQL语句中的数据类型MySQL中的我们常使用的数据类型如下整数类型字节 范围(有符号) 范围(无符号) 用途日期和时间类型字符串类型4.DDL-数据库操作4.1创建数据库格式:create database 数据库名; create database 数据库名 character SET 字符集; # 可以 设置数据库的字符编码例如:创建数据库 数据库中数据的编码采用的是安装数据库时指定的默认编码 utf8CREATE DATABASE java1;创建数据库 数据库中数据的编码采用的是安装数据库时指定编码 gbkCREATE DATABASE myDatabase character SET gbk;4.2查看数据库查看数据库MySQL服务器中的所有的数据库:SHOW DATABASES;查看某个数据库的定义的信息:SHOW CREATE DATABASE 数据库名;例如SHOW CREATE DATABASE java1;4.3删除数据库格式DROP DATABASE 数据库名称;例如DROP DATABASE java14.4使用数据库查看正在使用的数据库:select database();切换数据库use 数据库名;练习题###数据库操作 # 创建数据库 (默认字符集: UTF-8 , 此编码为安装时设置) CREATE DATABASE java2; #显示所有数据库 SHOW DATABASES; #显示数据库的创建信息 SHOW DATABASE JAVA2; #删除数据库 DROP DATABASE JAVA2;5.DDL–表结构操作 (重点※)5.1创建表格式create table 表名( 字段名 类型(长度) [约束], 字段名 类型(长度) [约束], ... ); 类型 varchar(n) 字符串 int 整形 double 浮点 date 日期 timestamp 时间戳 datetime 日期时间 约束 Primary key 主键被主键修饰字段中的数据不能重复、不能为 null。 Not null 非空约束 Unique 唯一约束 Default 默认约束5.2查看表查看数据库中的所有表格式SHOW tables;查看创建表语句格式SHOW CREATE tables 表名;查看表结构格式DESC 表名;5.3删除表格式drop table 表名;5.4修改表结构5.4.1增加字段alter table 表名 add 字段名 类型(长度) [约束];作用新增表添加列例如#1为学生表添加一个新的字段为 班级名称 varchar(50)ALTER TABLE t_student ADD classname varchar(50) ;5.4.2修改字段信息alter table 表名 modify 列名 类型(长度) [约束];作用修改表修改列的类型长度及约束例如#2, 将学生表的班级名称修改成int类型ALTER TABLE t_student modify classname int;5.4.3修改字段名alter table 表名 change 旧列名 新列名 类型(长度) [约束];作用修改表修改列名例如#3,将学生表的班级名称字段更换为 classname2 intALTER TABLE t_student change classname classname2 int ;5.4.4删除字段alter table 表名 drop 列名;作用修改表删除列.例如#4, 删除学生表中classname2这列ALTER TABLE t_student drop classname2;5.4.5修改表字符集alter table 表名 character SET 字符集;作用修改表的字符集例如#6, 将学生表 t/_students 的编码表进行修改修改成 gbkALTER TABLE t_student character set gbk;5.5修改表名rename table 旧表名 to 新表名;作用修改表名例如把t/_student表名改成studentrename table t_student to student;练习题#######表 table # 创建表--t_user ## 有主键 字段id,username,password,phone,remark create table t_user( id int primary key, username char(30) , password char(30) , phone int , remark char(20) ); ## 创建表之后可以查询创建表语句 (数据在可视化视图中显示不 全) show create tables t_user; ##查看表结构 desc t_user; #删除表 drop table t_user; #修改表结构 -- 如果SQL语句中使用到关键字建议使用重音符括住 ##添加字段 -- address alter table t_user add address int; ##修改字段类型 alter table t_user modify address char(255); ##修改整个字段 alter table t_user change address address2 char(10); ##删除字段 alter table t_user drop address2; ##修改表名 -- 修改成user rename table t_user to tuser; ##修改字符集 -- 修改成gbk alter table tuser character set gbk;6. DML–数据操作语言(⭐⭐)6.1 插入表记录INSERT语法-- 向表中插入某些字段 INSERT INTO 表名 (字段1,字段2,字段3) VALUES (值1,值2,值 3); --向表中插入所有字段,字段的顺序为创建表时的顺序 INSERT INTO 表 VALUES (值1,值2,值3..); # 简写注意值与字段必须对应个数相同类型相同值的数据大小必须在字段的长度范围内除了数值类型外其它的字段类型的值必须使用引号引起。建议单引号如果要插入空值可以不写字段或者插入 null。注意每一列的约束问题create table student( sid int(20) primary key, sname varchar(60) not null, email varchar(60), isdel varchar(10) default 1 ); insert into student(sid,sname,email,isdel)values(1001,张 三,zhangsanqq.com,1); insert into student(sid,sname,email,isdel) values(1001,李四,lisiqq.com,0); insert into student values(1003,王 五,wangwuqq.com,0);6.2 更新表记录UPDATE用来修改指定条件的数据将满足条件的记录指定列修改为指定值--更新所有记录的指定字段 UPDATE 表名 SET 字段名1值1,字段名2值2,...; --更新符号条件记录的指定字段 UPDATE 表名 SET 字段名1值1,字段名2值2,... WHERE 条件;注意列名的类型与修改的值要一致.修改值的时候不能超过最大长度.除了数值类型外其它的字段类型的值必须使用引号引起不能修改表中没有的字段#把王五改成王小五 update student set sname王小五; #加筛选条件 update student set sname王小五 where sid 1003; update student set sname王五 五,isdel1,emailwangwuwuqq.com where sid 1003;6.3删除表记录DELETE语法DELETE from 表名 [WHERE 条件]; 或者 truncate table 表名注意删除数据时要小心#删除数据delete from student where sid1003; delete from student; truncate table student;truncate与delete有什么区别DELETE 一条一条删除不清空auto_increment记录数。 truncate 直接将表删除重新建表auto_increment将置为零 从新开始。 create table student( sid int(20) primary key auto_increment, sname varchar(60) not null, email varchar(60), isdel varchar(10) default 1 ); #auto_increment设置sid自动增长默认从1开始 ## 删除所有不清空自动增长列记录数。 DELETE FROM student; ## 删除所有将清空自动增长列记录数。 TRUNCATE TABLE student;7.DQL–简单查询(⭐⭐⭐)准备数据#创建商品表 create table d_product( pid int primary key, pname varchar(20), price double, category_id varchar(32) ); #插入数据 INSERT INTO d_product VALUES (1, 苹果, 5000, c001); INSERT INTO d_product VALUES (2, vivo, 3000, c001); INSERT INTO d_product VALUES (3, 华为, 5000, c001); INSERT INTO d_product VALUES (4, oppo, 1000, c001); INSERT INTO d_product VALUES (5, 真维斯, 200, c002); INSERT INTO d_product VALUES (6, only, 440, c002); INSERT INTO d_product VALUES (7, 圣迪奥, 800, c002); INSERT INTO d_product VALUES (8, vero moda, 800, c003); INSERT INTO d_product VALUES (9, 相宜本草, 200, c003); INSERT INTO d_product VALUES (10, 卫龙辣条, 5, NULL); INSERT INTO d_product VALUES (11, 好想你枣, 56, NULL); INSERT INTO d_product VALUES (12, 香飘飘奶茶, 3, NULL); INSERT INTO d_product VALUES (13, 小浣熊干脆面, 1, NULL); INSERT INTO d_product VALUES(14,aop,300,NULL); INSERT INTO d_product VALUES(15,p_aop,500,NULL); INSERT INTO d_product VALUES (16, sda, 53, NULL); #创建商品表 COMMENT表示注释 CREATE TABLE emp( EMPNO int(11) PRIMARY KEY COMMENT 员工编号, ENAME varchar(10) COMMENT 员工姓名, JOB varchar(9) COMMENT 工作, MGR int(11) COMMENT 经理编号, HIREDATE date COMMENT 入职日期, SAL double COMMENT 工资, COMM double COMMENT 奖金, DEPTNO int(11) COMMENT 部门号 ); #插入数据 INSERT INTO emp VALUES (7369, SMITH, CLERK, 7902, 1980-12-17, 1002, NULL, 20); INSERT INTO emp VALUES (7499, ALLEN, SALESMAN, 7698, 1981-02-20, 1600, 300, 30); INSERT INTO emp VALUES (7521, WARD, SALESMAN, 7698, 1981-02-22, 1250, 500, 30); INSERT INTO emp VALUES (7566, JONES, MANAGER, 7839, 1981-04-02, 2975, 0, 20); INSERT INTO emp VALUES (7654, MARTIN, SALESMAN, 7698, 1981-09-28, 1250, 1400, 30); INSERT INTO emp VALUES (7698, BLAKE, MANAGER, 7839, 1981-05-01, 2850, NULL, 30); INSERT INTO emp VALUES (7782, CLARK, MANAGER, 7839, 1981-06-09, 2450, NULL, 10); INSERT INTO emp VALUES (7788, scott3, ANALYST, 7566, 1987-07-03, 3000, NULL, 20); INSERT INTO emp VALUES (7839, KING, PRESIDENT, NULL, 1981-11-17, 5000, NULL, 10); INSERT INTO emp VALUES (7844, TURNER, SALESMAN, 7698, 1981-09-08, 1500, 0, 30); INSERT INTO emp VALUES (7876, ADAMS, CLERK, 7788, 1987-07-13, 1100, NULL, 20); INSERT INTO emp VALUES (7900, JAMES, CLERK, 7698, 1981-12-03, 950, NULL, 30); INSERT INTO emp VALUES (7902, FORD, ANALYST, 7566, 1981-12-03, 3000, NULL, 20); INSERT INTO emp VALUES (7934, MILLER, CLERK, 7782, 1981-01-23, 1300, NULL, 10);查询语法select 字段名1 , 字段名2 ,....... from 表名 [where 筛选条件] 或 select * from 表名 [where 筛选条件] 解释 * 通配符表示所有字段(所有列名) ● 一般情况下除非需要使用表中所有的字段数据最好不要使用通配 符 * 。使用通配符虽然可以节省输入查询语句的时间但是获取不需 要的列数据通常会降低查询和所使用的应用程序的效率。通配符的优势 是当不知道所需要的列的名称时可以通过它获取它们。 ● 在生产环境下不推荐直接使用 SELECT * 进行查询#1.查询所有 select * from d_product; #2.查询pname和price select pname,price from d_product; #3.别名查询.使用的关键字是asas可以省略的. #3.1表别名: select d.pname,d.price from d_product as d,t_product as t; #3.2列别名 select avg(price) as avgPrice from d_product; select category_id cid from d_product; #4.去掉重复值. select distinct price from d_product; #5.查询结果是表达式运算查询将所有商品的价格打九折进行显 示. select price*0.8 as newPrice from d_product; #6.空值参与运算(空值就是 null,所有运算符或列值遇到 null值 运算的结果都是 null) 注意 ● 在 MySQL 中null 不等于空字符串或 0 。一个空字符串的 长度是 0 而空值的长度是空。 ● 在 MySQL 中null 是占用空间的。 #7.查询员工 id、月薪、奖金率、年薪 SELECT empno, sal as 月薪, comm as 奖金率, sal * ( 1 IFNULL( comm, 0 )) * 12 as 年薪 FROM emp; #8.着重号(我们需要保证表中的字段、表名等没有和保留字、数据库系 统或常用方法冲突,如果真的相同请在 SQL 语句中使用一对 着 重号引起来。) SELECT * FROM order ; #9.查询常数 ● 一般来说我们只从一个表中查询数据通常是不需要增加一 个固定的常数列了但是如果我们想要整合不同的数据源用常数列 作为这个表的标记就需要查询常数了。 ● 示例给员工表增加列字段 company 这个固定列的值为 家里蹲大学 SELECT 家里蹲大学 company, ename, job FROM emp;练习题#1.查询emp表中员工 12 个月的工资总和并取名为ANNUAL_SALARY #2.查询emp表中去除重复的 job 以后的数据8.DQL—行筛选由于互联网产品中提供的信息通常比较多用户在使用互联网产品的过程中可能会遇到查找信息时路径长甚至无法找到合适的信息和内容的问题。通过筛选功能可以让用户通过设置筛选条件的方式从产品中大量的信息中迅速找到符合筛选条件的内容。从而大大降低用户的查找成本减少用户查找时间提升用户体验。从上面的描述中可以看到 筛选功能的目的是让用户在面对互联网产品中海量的信息和内容时通过让用户设置筛选条件进行快速的查找和搜索缩短用户查找路径。帮助用户快速找到符合条件的内容和信息节省用户查找信息时间提升用户体验例如#查询价格是为偶数的商品信息 select * from d_product where price%2 0; select * from d_product where MOD(price,2) 0; #查询价格为800商品 select * from d_product where price800; select * from d_product where not (price800 or price 800); #查询价格不是800的所有商品 select * from d_product where price!800; select * from d_product where price800 or price 800; select * from d_product where not(price800); select * from d_product where price 800; #查询商品价格大于800元的所有商品信息 select * from d_product where price800; #查询商品价格在800到2000之间所有商品 select * from d_product where price800 and price 2000; select * from d_product where price between 800 and 2000; #查询商品价格是200或800的所有商品 select * from d_product where price800 or price200; select * from d_product where price in (200 ,800); #查询含有o字的所有商品 select * from d_product where pname like %o%; #查询pname中第一个字符含有o字的所有商品 select * from d_product where pname like o%; #查询pname中第二个字符含有o字的所有商品 select * from d_product where pname like _o%; #查询pname中第四个字符含有o字的所有商品 select * from d_product where pname like ___o%; #商品没有分类的商品 select * from d_product where category_id is null; #查询有分类的商品 select * from d_product where category_id is not null;练习题1.商品名称以o结尾 select * from d_product where pname like %o; 2.筛选价格大于等于800同时小于等于3000的商品 select * from d_product where price800 and price 3000; 3.筛选价格不等于800的商品 select * from d_product where price!800 4.筛选出价格在800以上同时包含o字符的商品id和名称、价格 select pid,pname,price from d_product where price800 and pname like %o%; 5.筛选出价格高于oppo价格的商品 select * from d_product where price(select price from d_product where pnameoppo);额外补充最小值运算符语法格式LEAST(值1值2…值n)其中“值n” 表示参数列表中有 n 个值。在有两个或多个参数的情况下返回最小值。当参数是整数或者浮点数时LEAST 将返回其中最小的值当参数为字符串时返回字母表中顺序最靠前的字符当比较值列表中有 NULL 时不能判断大小返回值为 NULL 。SELECT LEAST ( 1, 0, 2 ), # 整数 返回0 LEAST( b, a, c ), # 字符串 返回a LEAST( 1, NULL, 2 ) # 有null 返回null FROM DUAL;最大值运算符语法格式为GREATEST(值1值2…值n)。其中n 表示参数列表中有 n 个值。当有两个或多个参数时返回值为最大值。假如任意一个自变量为 NULL 则 GREATEST() 的返回值为NULL 。当参数中是整数或者浮点数时GREATEST 将返回其中最大的值当参数为字符串时返回字母表中顺序最靠后的字符当比较值列表中有 NULL 时不能判断大小返回值为 NULL 。SELECT GREATEST( 1, 0, 2 ), # 整数 返回2 GREATEST( b, a, c ), # 字符串 返回c GREATEST( 1, NULL, 2 ) # 有null 返回null FROM DUAL;ESCAPE回避特殊符号需要使用转义字符。如将 [%] 转为 [ ] 然后再加上 [ESCAPE ‘ $ ’ ] 即可。如果使用 / 表示转义要省略 ESCAPE 。如果不是 / 则要加上 ESCAPE 。#查询 pname 中第二个字符是 _ 且第三个字符是 a 的商品信 息 SELECT * FROM d_product WHERE pname LIKE _/_a% ; 或 SELECT * FROM d_product WHERE pname LIKE _$_a% ESCAPE $;REGEXP运算符REGEXP 运算符用来匹配字符串语法格式为 expr REGEXP匹配条件 。如果 expr 满足匹配条件返回 1 如果不满足则返回 0 。若expr 或匹配条件任意一个为 NULL 则结果为 NULL 。REGEXP 运算符在进行匹配时常用的有下面几种通配符‘^’ 匹配以该字符后面的字符开头的字符串。 ‘$’匹配以该字符前面的字符结尾的字符串。 ‘.‘匹配任何一个单字符。 “[...]” 匹配在方括号内的任何字符。例如“[abc]” 匹配 “a” 或 “b” 或 “c” 。为了命名字符的范围使用一个 ‘-’ 。“[a-z]” 匹配任何字母而 “[0-9]” 匹配任何数字。 ‘*’ 匹配零个或多个在它前面的字符。例如“x*” 匹配任何数量的 ‘x’ 字符“[0-9]*” 匹配任何数量的数字 而 “*” 匹配任何数量 的任何字符示例SELECT hcj REGEXP ^h, hcj REGEXP j$, huangchuanjian REGEXP jian FROM DUAL;xpr REGEXP匹配条件 。 - 如果 expr 满足匹配条件返回 1 如果不满足则返回 0 。若expr 或匹配条件任意一个为 NULL 则结果为 NULL 。 - REGEXP 运算符在进行匹配时常用的有下面几种通配符‘^’ 匹配以该字符后面的字符开头的字符串。‘$’匹配以该字符前面的字符结尾的字符串。‘.‘匹配任何一个单字符。“[…]” 匹配在方括号内的任何字符。例如“[abc]” 匹配 “a”或 “b” 或 “c” 。为了命名字符的范围使用一个 ‘-’ 。“[a-z]”匹配任何字母而 “[0-9]” 匹配任何数字。‘’ 匹配零个或多个在它前面的字符。例如“x” 匹配任何数量的‘x’ 字符“[0-9]” 匹配任何数量的数字 而 “” 匹配任何数量的任何字符###### 示例 sql SELECT hcj REGEXP ^h, hcj REGEXP j$, huangchuanjian REGEXP jian FROM DUAL;练习题#一、将 DDL--表结构操作(重点) 全部重写一遍 #二、根据上述数据完成下面的查询作业 #1.查询商品名称为“卫龙辣条”的商品所有信息 #2.查询价格为800商品 #3.查询价格不是800的所有商品 #4.查询商品价格大于60元的所有商品信息 #5.查询商品价格在200到1000之间所有商品 #6.查询商品价格是200或800的所有商品 #7.查询含有霸字的所有商品 #8.查询以香开头的所有商品 #9.查询第二个字为想的所有商品 #10.商品没有分类的商品 #11.查询有分类的商品 #12.把商品名为苹果改为苹果14 #13.插入华为手机价格5999,分类为c001 #14.找到名字长度为6个字符的商品信息 #15.找出oppo同分类的商品信息 #16.删除华为手机信息《网络安全从零到精通全套学习大礼包》96节从入门到精通的全套视频教程免费领取如果你也想通过学网络安全技术去帮助就业和转行我可以把我自己亲自录制的96节 从零基础到精通的视频教程以及配套学习资料无偿分享给你。网络安全学习路线图想要学习 网络安全作为新手一定要先按照路线图学习方向不对努力白费。对于从来没有接触过网络安全的同学我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线大家跟着这个路线图学习准没错。配套实战项目/源码所有视频教程所涉及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取网络安全学习路线图想要学习 网络安全作为新手一定要先按照路线图学习方向不对努力白费。对于从来没有接触过网络安全的同学我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线大家跟着这个路线图学习准没错。配套实战项目/源码所有视频教程所涉及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取
一文知数据库
发布时间:2026/5/25 23:09:11
一文知数据库一文知数据库1.数据库的概念1.1概述什么是数据库 数据库就是存储数据的仓库其本质是一个文件系统数据按照特定的格式将数据存储起来用户可以对数据库中的数据进行增加修改删除及查询操作。什么是数据库管理系统 数据库管理系统DataBase Management SystemDBMS指一种操作和管理数据库的大型软件用于建立、使用和维护数据库对数据库进行统一管理和控制以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。数据库与数据库管理系统的关系1.2数据库表数据库中以表为组织单位存储数据。表类似我们的Java类每个字段都有对应的数据类型1.3常见数据库MYSQL 开源免费的数据库小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。Oracle 收费的大型数据库Oracle公司的产品。Oracle收购SUN公司收购MYSQL。DB2 IBM公司的数据库产品,收费的。常应用在银行系统中.SQLServerMicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。SyBase 已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。SQLite : 嵌入式的小型数据库应用在手机端。当然我们最常用的数据库是mysql、oracle2.SQL分类关系型数据库RDBMS关系型数据库绝对是 DBMS 的主流其中使用最多的 RDBMS 分别是 Oracle、MySQL 和 SQL Server 这些都是关系型数据库RDBMS。关系型数据库以行row和列column的形式存储数据以便于用户理解。这一系列的行和列被称为表table一组表组成了一个库database 。表和表之间的数据记录是有关系的relationship。现实世界中的各种实体和实体之间的各种联系均可以使用关系模型来表示。关系型数据库就是建立在关系模型基础上的数据库。SQL 就是关系型数据库的查询语言。非关系型数据库非 RDBMS可以看做是传统关系型数据库的功能的阉割版本基于键值对的存储数据不需要经过 SQL 层的解析性能非常高。同时通过减少不常用的功能进一步挺高性能。相比于 SQLNoSQL 泛指非关系型数据库包括了榜单上的键值性数据库、文档型数据库、搜索引擎和列存储等除此之外还包括图形数据库也只有 NoSQL 一词才可以将这些技术囊括进去。2.1SQL介绍数据库是不认识JAVA语言的但是我们同样要与数据库交互这时需要使用到数据库认识的语言SQL语句它是数据库的代码。结构化查询语言(Structured Query Language)简称SQL是关系型数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句但都有特有内容2.2SQL语句分类SQL分类数据定义语言简称DDL(Data Definition Language)用来定义数据库对象数据库表列等。关键字createalterdrop等数据操作语言简称DML(Data Manipulation Language)用来对数据库中表的记录进行更新。关键字INSERTDELETEUPDATE等数据控制语言简称DCL(Data Control Language)用来定义数据库的访问权限和安全级别及创建用户。主要的语句关键字包括GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT 等。数据查询语言简称DQL(Data Query Language)用来查询数据库中表的记录。关键字selectfromWHERE等。事务控制语言简称 TCLTransaction Control LanguageCOMMIT提交事务、ROLLBACK 回滚事务。SQL通用语法SQL语句可以单行或多行书写以分号( ; )结尾 。可使用空格和缩进来增强语句的可读性。MySQL 在 Windows 环境下是大小写不敏感的。MySQL 在 Linux 环境下是大小写敏感的。数据库名、表名、表的别名、变量名是严格区分大小写的额。关键字、函数名、列名或字段名、列的别名或字段的别名是忽略大小写的。推荐采用统一的书写规范数据库名、表名、表的别名、字段别名等都小写。SQL 关键字、函数名、绑定变量等都大写。例如SELECT /* FROM user。SELECT … FROM dual ; # dual 称为伪表注释#单行注释– 注释文字 -- 后面必须包含一个空格单行注释//* 注释文字 /*/ 多行注释关键字不能被缩写也不能分行标点符号必须保证所有的 ()、单引号、双引号是成对结束的。必须使用英文状态下的半角输入方式。字符串类型或日期时间类型的数据可以使用单引号‘’表示。列的别名尽量使用双引号“”而且不建议省略 as 。命名规则数据库、表名不得超过 30 个字符变量名限制为 29 个。必须只能包含 [a-zA-Z0-9/_] 共 63 个字符。数据库名、表名、字段名等对象名重要不要包含空格。同一个 MySQL 软件中数据库不能同名同一个库中表不能重名同一个表中字段不能重名。必须保证字段没有和保留字、数据库系统或常用方法冲突如果坚持使用请在 SQL 语句中使用 着重号引起来。保持字段名和类型的一致性在命名字段并为其指定数据类型的时候一定要保证一致性。如数据类型在一个表里是整数但是到另一个表里就不要变为字符类型。表名错误因为表名有空格create table student info(…);起别名时as 都可以省略,如果字段别名中没有空格那么可以省略select id as 编号, name as 姓名 from t_stu; /# 错误如果字段别名中有空格那么不能省略 select id as 编 号, name as 姓 名 from t_stu;2.3关系型数据库设计规则2.3.1概述关系型数据库的典型数据结构就是数据表这些数据表的组成都是结构化的Structured 。将数据放到表中表再放到数据库中。一个数据库中可以有多个表每个表都有一个名字用来标识自己。表名具有唯一性。表具有一些特性这些特性定义了数据在表中是如何存储类似于 Java 中类的设计2.3.2 表、记录、字段E-Rentity-relationship实体-联系模型中有三个主要的概念实体集、属性和联系集。一个实体集class对应数据库中的一个表table一个实体instance则对应数据库表中的一行row也称为一条记录record一个属性attribute对应于数据库表中的一列column也称为一个字段field。3.SQL语句中的数据类型MySQL中的我们常使用的数据类型如下整数类型字节 范围(有符号) 范围(无符号) 用途日期和时间类型字符串类型4.DDL-数据库操作4.1创建数据库格式:create database 数据库名; create database 数据库名 character SET 字符集; # 可以 设置数据库的字符编码例如:创建数据库 数据库中数据的编码采用的是安装数据库时指定的默认编码 utf8CREATE DATABASE java1;创建数据库 数据库中数据的编码采用的是安装数据库时指定编码 gbkCREATE DATABASE myDatabase character SET gbk;4.2查看数据库查看数据库MySQL服务器中的所有的数据库:SHOW DATABASES;查看某个数据库的定义的信息:SHOW CREATE DATABASE 数据库名;例如SHOW CREATE DATABASE java1;4.3删除数据库格式DROP DATABASE 数据库名称;例如DROP DATABASE java14.4使用数据库查看正在使用的数据库:select database();切换数据库use 数据库名;练习题###数据库操作 # 创建数据库 (默认字符集: UTF-8 , 此编码为安装时设置) CREATE DATABASE java2; #显示所有数据库 SHOW DATABASES; #显示数据库的创建信息 SHOW DATABASE JAVA2; #删除数据库 DROP DATABASE JAVA2;5.DDL–表结构操作 (重点※)5.1创建表格式create table 表名( 字段名 类型(长度) [约束], 字段名 类型(长度) [约束], ... ); 类型 varchar(n) 字符串 int 整形 double 浮点 date 日期 timestamp 时间戳 datetime 日期时间 约束 Primary key 主键被主键修饰字段中的数据不能重复、不能为 null。 Not null 非空约束 Unique 唯一约束 Default 默认约束5.2查看表查看数据库中的所有表格式SHOW tables;查看创建表语句格式SHOW CREATE tables 表名;查看表结构格式DESC 表名;5.3删除表格式drop table 表名;5.4修改表结构5.4.1增加字段alter table 表名 add 字段名 类型(长度) [约束];作用新增表添加列例如#1为学生表添加一个新的字段为 班级名称 varchar(50)ALTER TABLE t_student ADD classname varchar(50) ;5.4.2修改字段信息alter table 表名 modify 列名 类型(长度) [约束];作用修改表修改列的类型长度及约束例如#2, 将学生表的班级名称修改成int类型ALTER TABLE t_student modify classname int;5.4.3修改字段名alter table 表名 change 旧列名 新列名 类型(长度) [约束];作用修改表修改列名例如#3,将学生表的班级名称字段更换为 classname2 intALTER TABLE t_student change classname classname2 int ;5.4.4删除字段alter table 表名 drop 列名;作用修改表删除列.例如#4, 删除学生表中classname2这列ALTER TABLE t_student drop classname2;5.4.5修改表字符集alter table 表名 character SET 字符集;作用修改表的字符集例如#6, 将学生表 t/_students 的编码表进行修改修改成 gbkALTER TABLE t_student character set gbk;5.5修改表名rename table 旧表名 to 新表名;作用修改表名例如把t/_student表名改成studentrename table t_student to student;练习题#######表 table # 创建表--t_user ## 有主键 字段id,username,password,phone,remark create table t_user( id int primary key, username char(30) , password char(30) , phone int , remark char(20) ); ## 创建表之后可以查询创建表语句 (数据在可视化视图中显示不 全) show create tables t_user; ##查看表结构 desc t_user; #删除表 drop table t_user; #修改表结构 -- 如果SQL语句中使用到关键字建议使用重音符括住 ##添加字段 -- address alter table t_user add address int; ##修改字段类型 alter table t_user modify address char(255); ##修改整个字段 alter table t_user change address address2 char(10); ##删除字段 alter table t_user drop address2; ##修改表名 -- 修改成user rename table t_user to tuser; ##修改字符集 -- 修改成gbk alter table tuser character set gbk;6. DML–数据操作语言(⭐⭐)6.1 插入表记录INSERT语法-- 向表中插入某些字段 INSERT INTO 表名 (字段1,字段2,字段3) VALUES (值1,值2,值 3); --向表中插入所有字段,字段的顺序为创建表时的顺序 INSERT INTO 表 VALUES (值1,值2,值3..); # 简写注意值与字段必须对应个数相同类型相同值的数据大小必须在字段的长度范围内除了数值类型外其它的字段类型的值必须使用引号引起。建议单引号如果要插入空值可以不写字段或者插入 null。注意每一列的约束问题create table student( sid int(20) primary key, sname varchar(60) not null, email varchar(60), isdel varchar(10) default 1 ); insert into student(sid,sname,email,isdel)values(1001,张 三,zhangsanqq.com,1); insert into student(sid,sname,email,isdel) values(1001,李四,lisiqq.com,0); insert into student values(1003,王 五,wangwuqq.com,0);6.2 更新表记录UPDATE用来修改指定条件的数据将满足条件的记录指定列修改为指定值--更新所有记录的指定字段 UPDATE 表名 SET 字段名1值1,字段名2值2,...; --更新符号条件记录的指定字段 UPDATE 表名 SET 字段名1值1,字段名2值2,... WHERE 条件;注意列名的类型与修改的值要一致.修改值的时候不能超过最大长度.除了数值类型外其它的字段类型的值必须使用引号引起不能修改表中没有的字段#把王五改成王小五 update student set sname王小五; #加筛选条件 update student set sname王小五 where sid 1003; update student set sname王五 五,isdel1,emailwangwuwuqq.com where sid 1003;6.3删除表记录DELETE语法DELETE from 表名 [WHERE 条件]; 或者 truncate table 表名注意删除数据时要小心#删除数据delete from student where sid1003; delete from student; truncate table student;truncate与delete有什么区别DELETE 一条一条删除不清空auto_increment记录数。 truncate 直接将表删除重新建表auto_increment将置为零 从新开始。 create table student( sid int(20) primary key auto_increment, sname varchar(60) not null, email varchar(60), isdel varchar(10) default 1 ); #auto_increment设置sid自动增长默认从1开始 ## 删除所有不清空自动增长列记录数。 DELETE FROM student; ## 删除所有将清空自动增长列记录数。 TRUNCATE TABLE student;7.DQL–简单查询(⭐⭐⭐)准备数据#创建商品表 create table d_product( pid int primary key, pname varchar(20), price double, category_id varchar(32) ); #插入数据 INSERT INTO d_product VALUES (1, 苹果, 5000, c001); INSERT INTO d_product VALUES (2, vivo, 3000, c001); INSERT INTO d_product VALUES (3, 华为, 5000, c001); INSERT INTO d_product VALUES (4, oppo, 1000, c001); INSERT INTO d_product VALUES (5, 真维斯, 200, c002); INSERT INTO d_product VALUES (6, only, 440, c002); INSERT INTO d_product VALUES (7, 圣迪奥, 800, c002); INSERT INTO d_product VALUES (8, vero moda, 800, c003); INSERT INTO d_product VALUES (9, 相宜本草, 200, c003); INSERT INTO d_product VALUES (10, 卫龙辣条, 5, NULL); INSERT INTO d_product VALUES (11, 好想你枣, 56, NULL); INSERT INTO d_product VALUES (12, 香飘飘奶茶, 3, NULL); INSERT INTO d_product VALUES (13, 小浣熊干脆面, 1, NULL); INSERT INTO d_product VALUES(14,aop,300,NULL); INSERT INTO d_product VALUES(15,p_aop,500,NULL); INSERT INTO d_product VALUES (16, sda, 53, NULL); #创建商品表 COMMENT表示注释 CREATE TABLE emp( EMPNO int(11) PRIMARY KEY COMMENT 员工编号, ENAME varchar(10) COMMENT 员工姓名, JOB varchar(9) COMMENT 工作, MGR int(11) COMMENT 经理编号, HIREDATE date COMMENT 入职日期, SAL double COMMENT 工资, COMM double COMMENT 奖金, DEPTNO int(11) COMMENT 部门号 ); #插入数据 INSERT INTO emp VALUES (7369, SMITH, CLERK, 7902, 1980-12-17, 1002, NULL, 20); INSERT INTO emp VALUES (7499, ALLEN, SALESMAN, 7698, 1981-02-20, 1600, 300, 30); INSERT INTO emp VALUES (7521, WARD, SALESMAN, 7698, 1981-02-22, 1250, 500, 30); INSERT INTO emp VALUES (7566, JONES, MANAGER, 7839, 1981-04-02, 2975, 0, 20); INSERT INTO emp VALUES (7654, MARTIN, SALESMAN, 7698, 1981-09-28, 1250, 1400, 30); INSERT INTO emp VALUES (7698, BLAKE, MANAGER, 7839, 1981-05-01, 2850, NULL, 30); INSERT INTO emp VALUES (7782, CLARK, MANAGER, 7839, 1981-06-09, 2450, NULL, 10); INSERT INTO emp VALUES (7788, scott3, ANALYST, 7566, 1987-07-03, 3000, NULL, 20); INSERT INTO emp VALUES (7839, KING, PRESIDENT, NULL, 1981-11-17, 5000, NULL, 10); INSERT INTO emp VALUES (7844, TURNER, SALESMAN, 7698, 1981-09-08, 1500, 0, 30); INSERT INTO emp VALUES (7876, ADAMS, CLERK, 7788, 1987-07-13, 1100, NULL, 20); INSERT INTO emp VALUES (7900, JAMES, CLERK, 7698, 1981-12-03, 950, NULL, 30); INSERT INTO emp VALUES (7902, FORD, ANALYST, 7566, 1981-12-03, 3000, NULL, 20); INSERT INTO emp VALUES (7934, MILLER, CLERK, 7782, 1981-01-23, 1300, NULL, 10);查询语法select 字段名1 , 字段名2 ,....... from 表名 [where 筛选条件] 或 select * from 表名 [where 筛选条件] 解释 * 通配符表示所有字段(所有列名) ● 一般情况下除非需要使用表中所有的字段数据最好不要使用通配 符 * 。使用通配符虽然可以节省输入查询语句的时间但是获取不需 要的列数据通常会降低查询和所使用的应用程序的效率。通配符的优势 是当不知道所需要的列的名称时可以通过它获取它们。 ● 在生产环境下不推荐直接使用 SELECT * 进行查询#1.查询所有 select * from d_product; #2.查询pname和price select pname,price from d_product; #3.别名查询.使用的关键字是asas可以省略的. #3.1表别名: select d.pname,d.price from d_product as d,t_product as t; #3.2列别名 select avg(price) as avgPrice from d_product; select category_id cid from d_product; #4.去掉重复值. select distinct price from d_product; #5.查询结果是表达式运算查询将所有商品的价格打九折进行显 示. select price*0.8 as newPrice from d_product; #6.空值参与运算(空值就是 null,所有运算符或列值遇到 null值 运算的结果都是 null) 注意 ● 在 MySQL 中null 不等于空字符串或 0 。一个空字符串的 长度是 0 而空值的长度是空。 ● 在 MySQL 中null 是占用空间的。 #7.查询员工 id、月薪、奖金率、年薪 SELECT empno, sal as 月薪, comm as 奖金率, sal * ( 1 IFNULL( comm, 0 )) * 12 as 年薪 FROM emp; #8.着重号(我们需要保证表中的字段、表名等没有和保留字、数据库系 统或常用方法冲突,如果真的相同请在 SQL 语句中使用一对 着 重号引起来。) SELECT * FROM order ; #9.查询常数 ● 一般来说我们只从一个表中查询数据通常是不需要增加一 个固定的常数列了但是如果我们想要整合不同的数据源用常数列 作为这个表的标记就需要查询常数了。 ● 示例给员工表增加列字段 company 这个固定列的值为 家里蹲大学 SELECT 家里蹲大学 company, ename, job FROM emp;练习题#1.查询emp表中员工 12 个月的工资总和并取名为ANNUAL_SALARY #2.查询emp表中去除重复的 job 以后的数据8.DQL—行筛选由于互联网产品中提供的信息通常比较多用户在使用互联网产品的过程中可能会遇到查找信息时路径长甚至无法找到合适的信息和内容的问题。通过筛选功能可以让用户通过设置筛选条件的方式从产品中大量的信息中迅速找到符合筛选条件的内容。从而大大降低用户的查找成本减少用户查找时间提升用户体验。从上面的描述中可以看到 筛选功能的目的是让用户在面对互联网产品中海量的信息和内容时通过让用户设置筛选条件进行快速的查找和搜索缩短用户查找路径。帮助用户快速找到符合条件的内容和信息节省用户查找信息时间提升用户体验例如#查询价格是为偶数的商品信息 select * from d_product where price%2 0; select * from d_product where MOD(price,2) 0; #查询价格为800商品 select * from d_product where price800; select * from d_product where not (price800 or price 800); #查询价格不是800的所有商品 select * from d_product where price!800; select * from d_product where price800 or price 800; select * from d_product where not(price800); select * from d_product where price 800; #查询商品价格大于800元的所有商品信息 select * from d_product where price800; #查询商品价格在800到2000之间所有商品 select * from d_product where price800 and price 2000; select * from d_product where price between 800 and 2000; #查询商品价格是200或800的所有商品 select * from d_product where price800 or price200; select * from d_product where price in (200 ,800); #查询含有o字的所有商品 select * from d_product where pname like %o%; #查询pname中第一个字符含有o字的所有商品 select * from d_product where pname like o%; #查询pname中第二个字符含有o字的所有商品 select * from d_product where pname like _o%; #查询pname中第四个字符含有o字的所有商品 select * from d_product where pname like ___o%; #商品没有分类的商品 select * from d_product where category_id is null; #查询有分类的商品 select * from d_product where category_id is not null;练习题1.商品名称以o结尾 select * from d_product where pname like %o; 2.筛选价格大于等于800同时小于等于3000的商品 select * from d_product where price800 and price 3000; 3.筛选价格不等于800的商品 select * from d_product where price!800 4.筛选出价格在800以上同时包含o字符的商品id和名称、价格 select pid,pname,price from d_product where price800 and pname like %o%; 5.筛选出价格高于oppo价格的商品 select * from d_product where price(select price from d_product where pnameoppo);额外补充最小值运算符语法格式LEAST(值1值2…值n)其中“值n” 表示参数列表中有 n 个值。在有两个或多个参数的情况下返回最小值。当参数是整数或者浮点数时LEAST 将返回其中最小的值当参数为字符串时返回字母表中顺序最靠前的字符当比较值列表中有 NULL 时不能判断大小返回值为 NULL 。SELECT LEAST ( 1, 0, 2 ), # 整数 返回0 LEAST( b, a, c ), # 字符串 返回a LEAST( 1, NULL, 2 ) # 有null 返回null FROM DUAL;最大值运算符语法格式为GREATEST(值1值2…值n)。其中n 表示参数列表中有 n 个值。当有两个或多个参数时返回值为最大值。假如任意一个自变量为 NULL 则 GREATEST() 的返回值为NULL 。当参数中是整数或者浮点数时GREATEST 将返回其中最大的值当参数为字符串时返回字母表中顺序最靠后的字符当比较值列表中有 NULL 时不能判断大小返回值为 NULL 。SELECT GREATEST( 1, 0, 2 ), # 整数 返回2 GREATEST( b, a, c ), # 字符串 返回c GREATEST( 1, NULL, 2 ) # 有null 返回null FROM DUAL;ESCAPE回避特殊符号需要使用转义字符。如将 [%] 转为 [ ] 然后再加上 [ESCAPE ‘ $ ’ ] 即可。如果使用 / 表示转义要省略 ESCAPE 。如果不是 / 则要加上 ESCAPE 。#查询 pname 中第二个字符是 _ 且第三个字符是 a 的商品信 息 SELECT * FROM d_product WHERE pname LIKE _/_a% ; 或 SELECT * FROM d_product WHERE pname LIKE _$_a% ESCAPE $;REGEXP运算符REGEXP 运算符用来匹配字符串语法格式为 expr REGEXP匹配条件 。如果 expr 满足匹配条件返回 1 如果不满足则返回 0 。若expr 或匹配条件任意一个为 NULL 则结果为 NULL 。REGEXP 运算符在进行匹配时常用的有下面几种通配符‘^’ 匹配以该字符后面的字符开头的字符串。 ‘$’匹配以该字符前面的字符结尾的字符串。 ‘.‘匹配任何一个单字符。 “[...]” 匹配在方括号内的任何字符。例如“[abc]” 匹配 “a” 或 “b” 或 “c” 。为了命名字符的范围使用一个 ‘-’ 。“[a-z]” 匹配任何字母而 “[0-9]” 匹配任何数字。 ‘*’ 匹配零个或多个在它前面的字符。例如“x*” 匹配任何数量的 ‘x’ 字符“[0-9]*” 匹配任何数量的数字 而 “*” 匹配任何数量 的任何字符示例SELECT hcj REGEXP ^h, hcj REGEXP j$, huangchuanjian REGEXP jian FROM DUAL;xpr REGEXP匹配条件 。 - 如果 expr 满足匹配条件返回 1 如果不满足则返回 0 。若expr 或匹配条件任意一个为 NULL 则结果为 NULL 。 - REGEXP 运算符在进行匹配时常用的有下面几种通配符‘^’ 匹配以该字符后面的字符开头的字符串。‘$’匹配以该字符前面的字符结尾的字符串。‘.‘匹配任何一个单字符。“[…]” 匹配在方括号内的任何字符。例如“[abc]” 匹配 “a”或 “b” 或 “c” 。为了命名字符的范围使用一个 ‘-’ 。“[a-z]”匹配任何字母而 “[0-9]” 匹配任何数字。‘’ 匹配零个或多个在它前面的字符。例如“x” 匹配任何数量的‘x’ 字符“[0-9]” 匹配任何数量的数字 而 “” 匹配任何数量的任何字符###### 示例 sql SELECT hcj REGEXP ^h, hcj REGEXP j$, huangchuanjian REGEXP jian FROM DUAL;练习题#一、将 DDL--表结构操作(重点) 全部重写一遍 #二、根据上述数据完成下面的查询作业 #1.查询商品名称为“卫龙辣条”的商品所有信息 #2.查询价格为800商品 #3.查询价格不是800的所有商品 #4.查询商品价格大于60元的所有商品信息 #5.查询商品价格在200到1000之间所有商品 #6.查询商品价格是200或800的所有商品 #7.查询含有霸字的所有商品 #8.查询以香开头的所有商品 #9.查询第二个字为想的所有商品 #10.商品没有分类的商品 #11.查询有分类的商品 #12.把商品名为苹果改为苹果14 #13.插入华为手机价格5999,分类为c001 #14.找到名字长度为6个字符的商品信息 #15.找出oppo同分类的商品信息 #16.删除华为手机信息《网络安全从零到精通全套学习大礼包》96节从入门到精通的全套视频教程免费领取如果你也想通过学网络安全技术去帮助就业和转行我可以把我自己亲自录制的96节 从零基础到精通的视频教程以及配套学习资料无偿分享给你。网络安全学习路线图想要学习 网络安全作为新手一定要先按照路线图学习方向不对努力白费。对于从来没有接触过网络安全的同学我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线大家跟着这个路线图学习准没错。配套实战项目/源码所有视频教程所涉及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取网络安全学习路线图想要学习 网络安全作为新手一定要先按照路线图学习方向不对努力白费。对于从来没有接触过网络安全的同学我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线大家跟着这个路线图学习准没错。配套实战项目/源码所有视频教程所涉及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取