存储过程和函数 存储过程就是一条或者多条SQL语句的集合,可视为批文件,但是其作用不仅限于批处理。 创建存储过程和函数 存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别是CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句来调用存储过程,只能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。 创建存储过程 创建存储过程需要使用CREATE PROCEDURE语句,基本语法格式如下: DELIMITER // --将结束符号指定为// CREATE PROCEDURE sp_name([proc_parameter]) [characteristics...] BEGIN routine_body; END // CREATE PROCEDURE为用来创建存储函数的关键字;sp_name为存储过程的名称;routine_body是SQL代码的内容,可以用BEGIN...END来表示SQL代码的开始和结束;proc_parameter为指定存储过程的参数列表,列表形式如下: .... MySQL存储过程和函数(九) MySQL
索引 索引用于快速找出某列中有一特定值的行。如果表中查询的列有一个索引,MySQL能快速到达某个位置去搜寻数据文件,而不必查看所有数据。 索引简介 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可提高数据库中特定数据的查询速度。 索引的含义 索引是在存储引擎中实现的,每种存储引擎的索引都不一定完全相同。所有存储引擎支持每个表至少16个索引,总索引长度至少256字节。MySQL中索引的存储类型有两种:BTREE和HASH,具体和表的存储引擎相关;MyISAM和InnoDB存储引擎只支持BTREE索引;MEMORY/HEAP存储引擎可以支持HASH和BTREE索引。 索引的分类 MySQL的索引可以分为以下几类: 普通索引和唯一索引 普通索引是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值。 唯一索引,索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。主键索引是一种特殊的唯一索引,不允许有空值。 单列索引和组合索引 单列索引即一个索引只包含单个列,一个表可以有多个单列索引。 组合索引指在表的多个字段组合上创建的索引,只有在查询条件中使用.... MySQL索引(八) MySQL
插入、更新与删除数据 存储在系统中的数据是数据库管理系统(DBMS)的核心,数据库被设计用来管理数据的存储、访问和维护数据的完整性。 插入数据 MySQL中使用INSERT语句向数据库表中插入新的数据记录。可以插入的方式有插入完整的记录、插入记录的一部分、插入多条记录、插入另一个查询的结果。 为表的所有字段插入数据 使用基本的INSERT语句插入数据要求指定表名称和插入到新纪录中的值。基本语法格式为: INSERT INTO table_name (column_list) VALUES (value_list); table_name指定要插入数据的表名,column_list指定要插入数据的那些列,value_list指定每个列应对应插入的数据。注意,使用改语句时字段列和数据值的数量必须相同。 INSERT语句后面的列名称顺序可以不是表定义时的顺序,即插入数据时,不需要按照表定义的顺序插入,只要保证值的顺序与列字段的顺序相同就可以。 提示:虽然使用INSERT插入数据时可以忽略插入数据的列名称,但是值如果不包含列名称,那么VALUES关键字后面的值不仅要求完整而且顺序必须和表定义.... MySQL插入、更新与删除数据(七) MySQL
查询数据 基本查询语句 MySQL从数据表中查询数据的基本语句为SELECT语句。SELECT语句的基本格式是: SELECT {* | <字段列表>} [ FROM <表1>,<表2> [ WHERE <表达式> [ GROUP BY <group by definition> ] [ HAVING <expression> [{<operator> <expression>}...] ] [ ORDER BY <order by definition> ] [ LIMIT [offset,] <row count> ] ]; 其中,各条子句的含义如下: {*|<字段列表>} 包含星号通配符选字段列表,表示查询的字段,其中字段列至少包含一个字段名称,如果要查询多个字段,多个字段之间用逗号隔开,最后一个字段后不用加逗号。 FROM <表1>,<表2>...,表1和表2表示查询数据的来源,可以是单个或者多个。 WHERE 子句是可选.... MySQL查询数据(六) MySQL
MySQL函数 MySQL 函数简介 MySQL提供了大量丰富的函数,在进行数据库管理以及数据的查询和操作时将会经常用到各种函数。各类函数从功能方面主要分为数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数和加密函数等。 数学函数 数学函数主要用来处理数值数据,主要的数学函数有绝对值函数、三角函数(包括正弦函数、余弦函数、正切函数、余切函数等)、对数函数、随机数函数等。在有错误产生时,数学函数将会返回空值NULL。 绝对值函数ABS(x)和返回圆周率的功能PI() ABS(x) ABS(x)返回X的绝对值。 PI() PI()返回圆周率的值。默认的显示小数位数是6位。 平方根函数SQRT(x)和求余函数MOD(x,y) SQRT(x) SQRT(x)返回非负数x的二次方根。当x为负数时,返回结果为NULL。 MOD(x,y) MOD(x,y)返回x被y除后的余数,MOD()对于带有小数部分的数值也起作用,返回除法运算后的精确余数。 获取整数的函数CEIL(x)、CEILING(x)和FLOOR(x) CEIL(x)和CEILING(x) CEIL(x)和CEILING(x.... 有更新! MySQL函数(五) MySQL
数据类型和运算符 MySQL数据类型介绍 MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。 数值数据类型:包括整数类型TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,浮点小数数据类型FLOAT和DOUBLE,定点小数类型DECIMAL。 日期/时间类型:包括YEAR、TIME、DATE、DATETIME和TIMESTAMP。 字符串类型:包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET等。字符串类型又分文本字符串和二进制字符串。 整数类型 数值型数据类型主要用来存储数字。MySQL提供了多种数值数据类型,不同的数据类型提供了不同的取值范围,可以存储的值范围越大,其所需要的存储空间也会越大。MySQL主要提供的整数类型有TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)、BIGINT。整数类型的属性字段可以添加AUTO_INCREMENT自增约束条件。 MySQL中整数型数据类型存储空间图如下: 不同整数类型的取值范围图如下: 在创建数据表时,指定INT(1.... 有更新! MySQL数据类型和运算符(四) MySQL
数据表的基本操作 概念:在数据库中,数据表是数据库中最重要、最基本的操作对象,是数据存储的基本单位。数据表被定义为列的集合,数据在表中是按照行和列的格式来存储的。每一行代表一条唯一的记录,每一列代表记录中的每一个域。 创建数据表 概念:所谓创建数据表,指的是在已经创建好的数据库中建立新表。创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性等)约束的过程。 创建表的语法格式 数据表属于数据库,在创建数据表之前,应该使用语句USE <数据库名>指定操作是在哪个数据库中进行,如果没有选择数据库,就会抛出“No database selected”的错误。 创建数据表的语句格式如下: CREATE TABLE <表名> ( 字段名1 数据类型 [列级别约束条件] [默认值], 字段名2 数据类型 [列级别约束条件] [默认值], ...... [表级别约束条件] ); 使用CREATE TABLE创建表时,必须指定以下信息: 要创建的表的名称,不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INS.... 有更新! MySQL数据表基本操作(三) MySQL
数据库的基本操作 创建数据库 MySQL安装完成之后,将会在data目录下自动创建几个必须的数据库,可以使用查看数据库的语句查看当前所有存在的数据库,输入的语句如下: SHOW DATABASES; 初始时数据库列表中包含6个数据库。mysql是必需的,描述用户的访问权限。 创建数据库的基本SQL语法格式如下: CREATE DATABASE database_name; 查看数据库定义的语句如下: SHOW CREATE DATABASE database_name; 删除数据库 删除数据库是将已存在的数据库从磁盘空间上清除。清除之后,数据库中的所有数据也将一同被清除。删除数据库语句与创建数据库的命令相似。MySQL中删除数据库的基本语句格式为: DROP DATABASE database_name; 注:使用DROP DATABASE命令时要非常谨慎,在执行该命令时,MySQL不会给出任何提示确认信息,DROP DATABSE声明删除数据库后,数据库中存储的所有数据表和数据也将一同被删除,不可恢复。 理解数据库存储引擎 数据库存储引擎是数据库底层软件组件,数据库管理系统(.... MySQL数据库基本操作(二) MySQL
认识MySQL(数据库管理系统[DBMS] ) 数据库基础 什么是数据库 定义 数据库由一批数据构成有序的集合,这些数据被存放在结构化的数据表中。 数据库系统 数据库系统提供对数据的安全控制和完整性控制。 数据库种类 层次式数据库、网络式数据库和关系式数据库。 特点 实现数据共享、减少数据冗余、采用特定的数据类型、具有较高的数据独立性和统一的数据控制功能。 表 定义 在关系数据库中,数据库表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构。它由纵向的列和横向的行组成,行被称为记录,是组织数据的单位;列被称为字段,每一个列表示记录的一个属性,都有相应的描述信息,如数据类型、数据宽度等。 数据类型 作用 数据类型决定了数据在计算机中的存储格式,代表不同的信息类型。 分类 常用的数据类型:整数数据类型、浮点数数据类型、精确小数类型、二进制数据类型、日期/时间数据类型、字符串数据类型。表中的每一个字段就是某种指定数据类型。 主键 定义 主键(Primary Key)又称主码,用于唯一地标识表中的每一条记录。 用法 可以定义表中的一列或多列为主键,主键列上不能有两行相同的值,也不能为空值.... 有更新! MySQL概述(一) MySQL
模块化 模块的基本使用 模块的使用步骤 创建模块 在模块的src目录下新建一个名为module-info.java的描述文件,该文件专门定义模块名,访问权限,模块依赖等信息 描述性文件中使用模块导出和模块依赖来进行配置使用 模块中所有未导出的包都是模块私有的,不能在模块之外被访问 模块导出格式:exports 包名; 一个模块要访问其他模块,必须明确指定依赖哪些模块,未明确指定依赖的模块不能访问 模块依赖格式:requires 模块名; 注意:写模块名报错,需要按下Alt + Enter提示,然后选择模块依赖 模块服务的使用 模块服务的使用步骤 在模块A下创建一个包myInterface,在该包下提供一个接口Inter public interface Inter{ void run(); } 在myInterface包下创建一个包myImpl,在该包下提供接口的实现类Impl01 在模块A下的描述性文件中添加以下配置 模块导出:exports myInterface; 服务提供:provides Inter with Impl01 在模块B的描述性文件中添加以下配置 模块依赖:r.... 有更新! Java模块化与接口组成(十六) Java
反射 类加载器 概述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载,类的连接,类的初始化这三个步骤来对类进行初始化,如果不出现意外情况,JVM将会连续完成这三个步骤,所以有时也把这三个步骤统称为类加载或者类初始化。 类加载 就是指将class文件读入内存,并为之创建一个java.lang.Class对象 任何类被使用时,系统都会为之建立一个java.lang.Class对象 类的连接 验证阶段:用于验证被加载的类是否有正确的内部结构,并和其他类协调一致 准备阶段:负责为类的类变量分配内存,并设置默认初始值 解析阶段:将类的二进制数据中的符号引用替换为直接引用 类的初始化 概述:在此阶段,主要对类变量的初始化 类的初始化步骤: 假如类还未被加载和连接,则程序先加载并连接该类 假如该类的直接父类还未被初始化,则先初始化其直接父类 假如类中有初始化语句,则系统依次执行初始化语句 注意:在执行第2个步骤时,系统对直接父类的初始化步骤也遵循初始化步骤1-3 类的初始化时机: 创建类的实例 调用类的类方法 访问类或者接口的类变量,或者为该类变量赋值 使用反射方式来强制创建.... Java反射(十五) Java
Stream流 概述 Stream流的使用 生成流 通过数据源(集合,数组等)生成流 list.stream() 中间操作 一个流后面可以跟随零个或多个中间操作,其目的主要是打开流,做出某种程度的数据过滤/映射,然后返回一个新的流,交给下一个操作使用 filter() 终结操作 一个流只能有一个终结操作,当这个操作执行后,流就被使用 “光” 了,无法再被操作 forEach() Stream流的生成方式 Stream流常见生成方式 Collection体系的集合可以使用默认方法 stream() 生成流 default Stream<E> stream() Map体系的集合简介的生成流 Stream<K> keyStream = map.keySet().stream(); // Map键生成流 Stream<V> valueStream = map.values().stream(); // Map值生成流 Stream<Map.Entry<String,Integer>> entryStream = map.ent.... Java Stream流(十四) Java
函数式接口 概述 函数式接口:有且仅有一个抽象方法的接口 Java中的函数式编程体现就是Lambda表达式,所以函数式接口就是可以适合于Lambda使用的接口 只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导 @FunctionalInterface :函数式接口的注解 函数式接口作为方法的参数 如果方法的参数是一个函数式接口,则可以使用Lambda表达式作为参数传递 范例: // Runnable函数式接口作为方法的形式参数 public class RunnableDemo{ public static void main(String[] args){ useRunnable(() -> System.out.println("多线程程序启动了")); } private static void useRunnable(Runnable r){ new Thread(r).start; } } 函数式接口作为方法的返回值 如果方法的返回值是一个函数式接口,则可以使用Lambda表达式作为结果返回 范例: // 返回函数式接口Comparato.... Java函数式接口(十三) Java
方法引用 方法引用符 :: 该符号为引用运算符,而它所在的表达式被称为方法引用 范例: // Inter为接口,InterDemo为测试类 public interface Inter{ void run(String s); } public class InterDemo{ public static void main(String[] args){ getRun(System.out::println); } private static void getRun(Inter i){ i.run("java"); } } // 执行结果为java 引用类方法 概述:引用类方法,就是引用类的静态方法 格式:类名 :: 静态方法 Lambda表达式被类方法替代时,它的形式参数全部传递给静态方法作为参数 引用对象的实例方法 概述:引用对象的实例方法,就是引用类中的成员方法 格式:对象 :: 成员方法 Lambda表达式被对象的实例方法替代时,它的形式参数全部传递给该方法作为参数 引用类的实例方法 概述:引用类的实例方法,就是引用类中的成员方法 格式:类名 :: 成员方法 Lambda.... Java方法引用(十二) Java
Lambda表达式 Lambda表达式的标准格式 格式:(形式参数) -> {代码块} 形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,则留空 -> :由英文中划线和大于符号组成,固定写法。代表指向动作 代码块:是具体要做的事情,即方法体内容 Lambda表达式的使用前提 有一个接口 接口中有且仅有一个抽象方法 Lambda表达式的省略模式 省略规则: 参数类型可以省略,但是有多个参数的情况下,不能只省略一个 如果参数有且仅有一个,那么小括号可以省略 如果代码块的语句只有一条,可以省略大括号和分号,若语句是return语句,则return关键字需要省略 Lambda表达式的注意事项 注意事项: 使用Lambda必须要有接口,并且要求接口中有且仅有一个抽象方法 必须有上下文环境,才能推导出Lambda对应的接口 根据局部变量的赋值得知Lambda对应的接口: Runnable r = () -> {代码块}; 根据调用方法的参数得知Lambda对应的接口: new Thread(() -> {代码块}).start(); Lambda表达式和匿名.... 有更新! Java Lambda表达式(十一) Java