这是我们 MySQL 学习的第一程,话不多说,直接开始吧!
初识数据库
数据库干系基本概念
【数据库(DataBase)】
数据库(DB)是一个按照数据结构来构造、存储和管理数据的仓库,通俗点,就是存储数据的仓库。
数据库与数据结构的关系:
数据库是一个用于存储、管理和操作大量数据的体系,而数据结构则提供了数据的构造和存储方式,使数据库可以或许高效地管理和操作这些数据。通俗的讲,数据库底层利用了符合的数据结构来构造存储数据。
为什么要利用数据库?
最简朴的一点就是,为了保证数据的长期性。
我们在例如IDEA上编程并运行时,数据会存在内存中,这些数据会存在安全问题,断电或其他体系故障可能导致内存中的数据未能实时保存到磁盘而丢失,所以引出了数据库。
固然,我们要利用数据库还有其他的缘故原由,例如:数据共享与协同合作、支持复杂数据分析。
为什么不利用文件呢?
由于文件体系通常面向某一特定应用程序,数据共享性差,冗余度大,而且数据独立性较差,同时倒霉于数据查询和管理,倒霉于存储海量数据。
综上所述,我们要学习利用数据库。
【数据库管理体系(DataBase Management System)】
数据库管理体系(DBMS)是建立、操作和管理数据库的大型软件,通俗地讲,就是操作数据库的工具
【数据库服务】
数据库服务是指提供数据库访问和管理功能的体系或软件。它通常包罗数据库服务器、网络毗连、存储设备等组件,用于存储、检索和管理数据。数据库服务可以由多个客户端应用程序共享,并提供数据的一致性、安全性和可靠性。常见的数据库服务包罗MySQL、Oracle、Microsoft SQL Server等。
数据库服务与数据库管理体系的区别:
数据库服务是一个更广泛的概念,涵盖了数据库管理体系以及干系的硬件和软件组件;而数据库管理体系则是详细的软件产物,专注于管理和操作数据库的功能。
【SQL】
SQL(Structured Query Language)是一种特定于数据库的编程语言,用于管理、查询和操作关系型数据库。
SQL分类:
- 数据查询语言(DQL)
- DQL是SQL中最告急的部门,用于从数据库中检索数据。
- 主要命令是SELECT,用于选择表中的特定列和行。
- 数据定义语言(DDL)
- DDL用于定义和管理数据库的结构,包罗创建、修改和删除表和其他数据库对象。
- 主要命令包罗CREATE(创建数据库对象)、ALTER(修改数据库对象)、DROP(删除数据库对象)和TRUNCATE(清空数据库对象)
- 数据操纵语言(DML)
- DML用于添加、修改和删除数据库中的数据。
- 主要命令包罗INSERT(插入数据)、UPDATE(更新数据)和DELETE(删除数据)
- 数据控制语言(DCL)
- DCL用于控制对数据库的访问权限,确保数据的安全和完整。
- 主要命令包罗GRANT(授予权限)和REVOKE(撤销权限)
- 事务控制语言(TCL)
- TCL用于管理数据库中的事务,确保数据的一致性和完整性。
- 主要命令包罗COMMIT(提交事务)和ROLLBACK(回滚事务)
- 游标控制语言(CCL)
- CCL用于管理和操作数据库中的游标,游标是一个存储在DBMS服务器上的数据库查询。
- 主要命令包罗DECLARE(声明游标)和FETCH(获取游标中的数据)
所以,我们利用 SQL 操作 数据库管理体系(DBMS),再通过 数据库管理体系 操作 数据库以及数据库中的数据。
数据库的分类
数据库大要可分为关系型数据库 和 非关系型数据库
- 关系型数据库(Relational Database)
指采用了关系模子来构造数据的数据库。
利用表格来构造数据,每个表由行和列构成,具有固定的模式(schema),对数据的结构和关系进行严格定义。关系模子可以简朴明白为二维表格模子,一个关系型数据库就是由这些二维表及其之间的关系构成的数据构造。
例如:Oracle、MySQL、SQL Server
- 非关系型数据库(NoSQL DataBase)
不利用传统关系模子的数据库体系,而且不基于SQL
它们通常以差别的方式存储和处理数据,旨在解决关系型数据库在某些应用场景下的局限性,如大规模数据、高并发访问和高可扩展性需求等。
例如:redis、mongodb、hbase
区别:
关系型数据库非关系型数据库利用SQL是不逼迫要求,一样平常不基于SQL实现事务支持支持不支持复杂操作支持不支持海量读写操作服从低服从高基本结构基于表和列,结构固定机动性比较高,例如键值对、文档利用场景业务方面的联机事务处理(OLTP)体系用于数据的缓存、或基于统计分析的联机分析处理(OLAP)体系 主流数据库一览(2019年的,了解为主):
MySQL数据库
MySQL是一种流行的开源关系型数据库管理体系,用于有效地存储、管理和处理数据。它由瑞典MySQL AB公司开辟,并现属于Oracle公司。作为一个关系型数据库,MySQL利用表格来存储数据,支持标准的SQL语言,并可以或许运行在多种体系和多语言环境下。
MySQL因其开源、高效和机动的特点,成为广泛应用的数据库管理体系。无论是小型网站照旧大型企业应用,MySQL都能提供强大的数据管理和处理本事。
数据模子
MySQL的数据模子指的是数据库中数据的构造结构和操作方式。数据模子是数据库体系的核心,它定义了如何存储、访问和管理数据。
MySQL的数据模子的类型有很多,最常用的就是关系模子,除关系模子外,还有网状模子和条理模子等,但关系模子因其简朴性和强大的数学理论根本被广泛利用,我们后续讨论的就是关系模子。
我们的MySQL关系型数据库建立在关系模子的根本上,由多张相互毗连的二维表及其关系构成。
我们只须要记住:一个MySQL数据库服务下,可以有多个数据库,而一个数据库中可以有多张表,一张表中可以有很多的数据行(或记录),每条记录由很多的属性(字段、列)构成。
二维表,可称为数据表,由行和列构成,一行代表一条记录,一列代表一个属性或字段
如下图就是两个二维表及其关系:
- 如员工表中1 金庸 总裁 2这一行就是一条记录(数据行)
- id、name、job、dept_id分别是员工表这张二维表的四个属性
- 一个关系型数据库就是由这些二维表及其之间的关系构成的数据构造
基本操作
了解了MySQL数据库是由一张张二维表构成等基本结构的知识后,我们学习一些最基本SQL语句来操作数据库,主要包罗基本库操作,基本表操作,别的还有数据类型。其他的知识后序会不断发文先容的,这只是我们的第一步!
库操作
查看数据库、创建数据库、删除数据库、选中数据库
查看数据库
语法:
- 分号问题: MySQL分号是可选的,而且可以省略。每条语句默认以换行符作为结束标志。这意味着你可以在一行中编写多个SQL语句,而不须要利用分号分隔它们。
但为了确保你的SQL语句在差别的数据库体系中都能正确实行,发起在每个SQL语句的末尾添加分号。 如许可以进步代码的可移植性,并制止潜在的语法错误。
- SHOW 是一个关键字,作用是显示某些信息
- 注意DATABASES是复数。
- 作用就是:查看当前服务器的所有数据库
例如:
创建数据库
语法:
- CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
- [create_option] ...
- create_option: [DEFAULT] {
- CHARACTER SET [=] charset_name
- | COLLATE [=] collation_name
- | ENCRYPTION [=] {'Y' | 'N'}
- }
复制代码
- |:表现"或"的意思,用于分隔差别的选项。例如,在CREATE语句中,可以选择CREATE DATABASE大概CREATE SCHEMA来创建一个数据库(最常用的是DATABASE)。
- []:表现可选的部门。例如,在CREATE DATABASE语句中,IF NOT EXISTS和create_option都是可选的,不选也可以达到结果,不外会有差异,这要视情况而定。
- {}:表现一组选项中的一个必须被选择。例如,用户选择创建数据库必须选择DATABASE | SCHEMA
- =:表现赋值操作符,用于给变量或参数赋值。例如,在CHARACTER SET [=] charset_name中,等号左边的CHARACTER SET是一个变量名,右边的charset_name是要赋给它的值。
- 大写显示的都是关键字,db_name是我们要创建的数据库的名称
【最简朴的建库语法】
用对关键字并自定义一个数据库名,就可以创建成功;不外,以这种方式创建数据库,如果数据库已经存在(重名),就会报错,而一旦报错整个SQL就会停止
【加上IF NOT EXISTS】
- CREATE DATABASE IF NOT EXISTS db_name;
复制代码 IF NOT EXISTS翻译过来就是如果不存在,意味着只有db_name这个数据库不存在时才会创建,相称于多了一层校验,如果数据库存在,最多只会告诫(终端),有的甚至没有显式地展示告诫(如 Navicat Premium Lite 17),如许的话,就不会出现一条语句的错误影响整个实行的情况了。
【加上可选选项】
可选项有三个,可多选,用于指定数据库的特性:
- create_option: [DEFAULT] {
- CHARACTER SET [=] charset_name
- | COLLATE [=] collation_name
- | ENCRYPTION [=] {'Y' | 'N'}
- }
复制代码
- CHARACTER SET:指定数据库利用的字符编码方式,通常采用utf8mb4
- COLLATE:指定数据库中的字符排序规则,常用utf8mb4_0900_ai_ci
- utf8mb4是一种字符集,支持最多4个字节的UTF-8编码。与传统的utf8(现实上是utf8mb3,即最多3个字节)差别,utf8mb4可以或许存储更多的Unicode字符,包罗所有的emoji表情符号和一些特别字符。
- 0900表现利用Unicode的排序规则(collation),其中"0900"是该排序规则的编号。
- ai代表“accent insensitive”(不区分重音符号),意味着在排序和比较时,带有重音符号的字符(如“á”和“a”)会被视为相称。
- ci代表“case insensitive”(不区分大小写),意味着在排序和比较时,大写和小写字符(如“A”和“a”)会被视为相称,所以,当设定成功后,我们编写的所有SQL语句就不区分大小写了,将关键字大写只是方便区分而已。
- ENCRTPTION:用于指定数据库是否加密
例如:
- CREATE DATABASE IF NOT EXISTS db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
复制代码 【以关键字为库名】
直接将关键字作为库名是不可以的,须要用``(反引号)`引起来:
- CREATE DATABASE IF NOT EXISTS `create`;
复制代码
删除数据库
语法
- DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
复制代码
- 不加IF EXISTS校验,如果删除不存在的库,就会报错,停止;如果须要删除发起加上校验
- 删库操作谨慎利用,误删后果十分严重
选中数据库
语法:
- 选择了数据库才可以在选中数据库中实行建表等操作,如果想换数据库,那就再用USE db_name切换即可。
- 可以通过数据库的一个内置函数观察当前毗连(选择)的数据库,语法如下:
- NULL并不是空指针或空引用,SQL中的NULL表现缺失值或未知值,具有很多特性,后序将在符合的位置先容
数据类型
数值类型
类型大小作用TINYINT1 BytesTINYINT(1)用作BOOL类型,常用作表现性别SMALLINT2 Bytes大整数值MEDIUMINT3 Bytes大整数值INT4 Bytes大整数值BIGINT8 Bytes极大整数值,一样平常编号为此类型FLOAT4 Bytes单精度浮点数值,存在精度丧失(可以像DECIMAL一样利用M和D)DOUBLE8 Bytes双精度浮点数值,存在精度丧失,但比FLOAT精度高(可以像DECIMAL一样利用M和D)DECIMAL(M, D)如果M>D,为M+2,否则D+2M表现位数(包罗小数位),D指定小数位数,精度极高,一样平常用于表现金额NUMERIC(M, D)如果M>D,为M+2,否则D+2等同于DECIMAL
- 数值类型默以为有符号类型,如果须要可以指定为无符号,做法如:INT UNSIGNED、BIGINT UNSIGNED,只管不利用无符号,容量不敷时,发起更换更大的类型(如int转为bigint),而不是有符号转无符号
- 对于整型类型范围(不必特意记忆):
- 有符号范围:-2^(类型字节数 * 8-1)到2^(类型字节数 * 8-1)-1,如int是4字节,就 是-231到231-1
- 无符号范围:0到2^(类型字节数 * 8)-1,如int就是2^32-1
字符串类型
类型大小作用CHAR(SIZE)0-255 bytes定长字符串,SIZE指定字符数,固定占用指定空间VARCHAR(SIZE)0-65 535 bytes变长字符串,SIZE指定字符数,最多占用指定空间,根据现实存储字符串的长度来占用存储空间TINYBLOB0-255 bytes不高出255个字符的二进制字符串TINYTEXT0-255 bytes短文本字符串BLOB0-65 535 bytes二进制情势的长文本数据TEXT0-65 535 bytes长文本数据MEDIUMBLOB0-16 777 215 bytes二进制情势的中等长度文本数据MEDIUMTEXT0-16 777 215 bytes中等长度文本数据LONGBLOB0-4 294 967 295 bytes二进制情势的极大文本数据LONGTEXT0-4 294 967 295 bytes极大文本数据
- CHAR类型占用固定长度的空间,当存储较短的字符串时会浪费存储空间,但如许的利益是进步了检索服从。定长字段的存取服从通常高于变长字段。适用于存储长度相近或固定长度的数据,如身份证号码、电话号码等。
- VARCHAR(SIZE)是利用最多的字符串类型,按现实存储内容占用空间,恰当存储长度变革较大的字符串,从而可以节流存储空间。但是在检索服从上通常低于CHAR类型。恰当用于存储长度不定的文本数据,如评论、文章内容等。
日期类型
类型大小范围格式用途YEAR1 bytes1901/2155YYYY年份值DATE3 bytes1000-01-01/9999-12-31YYYY-MM-DD日期值TIME3 bytes‘-838:59:59’ / ‘838:59:59’HH:MM:SS时间值或持续时间DATETIME8 bytes1000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值TIMESTAMP4 bytes从1970到2038年,自动检索当前时 区并进行转换。YYYYMMDDHHMMSS时间戳
- 最常用的就是DATE和DATETIME,DATE用于表现如生日,DATETIME用于表现如创建xx的时间等
表操作
查看某个数据库的表,查看表结构,创建表,删除表
查看所有表
语法:
查看表结构
语法:
表明:(后四条有关约束,后面发文先容)
- Field:属性(字段)名
- Type:属性(字段)类型
- NULL:是否允许为空
- Key:索引类型(键值的类型)
- Default:默认值
- Extra:拓展功能
查看的是结构,并不是数据。
查询指定表的建表语句
语法:
- SHOW CREATE TABLE tbl_name;
复制代码 创建表
语法:
- CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (
- field1 datatype [COMMENT 'string'],
- field2 datatype [COMMENT 'string'],
- field3 datatype [COMMENT 'string']
- );
复制代码
- field1、field2… 均为自定义的字段名;datatype为该字段的数据类型;注意最后个字段后没有逗号
- 可以利用COMMENT关键字增加字段说明(注意 注释说明必须被单引号引起来,岂论中文照旧英文):
- 加上TEMPORARY意味着创建的是一个暂时表(否则就是永世表),暂时表通常以特定的命名约定(例如,以#开头)来标识,是在数据库会话期间创建的,它们通常用于存储中间结果或暂时数据。这些表只在当前会话中可见,而且在会话结束时会自动删除。
- 暂时表和真实的表(永世表)的区别:
- 生命周期:暂时表只在当前会话期间存在,当会话结束时,暂时表会自动删除。而真实的表是长期化的,它们存储在数据库中,而且可以在多个会话之间共享和利用。
- 可见性:暂时表仅对创建它们的会话可见,其他会话无法访问或修改这些表。而真实的表可以被所有毗连到数据库的用户访问和操作。
- 数据长期性:暂时表的数据不是永世存储的,它们只存在于内存中,而且在会话结束后会被自动清除。真实的表则将数据存储在磁盘上,即使会话结束,数据仍然存在。
- 用途:暂时表通常用于存储中间结果、暂时计算或处理大量数据时利用。它们提供了一种快速且暂时的方式来存储和操作数据,而不会对真实表造成影响。真实的表通常用于长期存储和管理数据,如用户信息、订单记录等。
- 性能:由于暂时表存储在内存中,访问速度通常比真实表快,由于它们不须要从磁盘读取数据。然而,如果内存不敷,暂时表可能会被互换到磁盘上,导致性能降落。
- SHOW TABLES;
不会显示暂时表
- DESC tmp_tbl_name;可以查看暂时表的结构
【拓展】
快速创建结构相称的表
上面例子我们已经创建好了一张表table1,我们快速创建一个结构相称的表,语法如下:
- CREATE TABLE [IF NOT EXISTS] tbl_name LIKE copyed_tbl_name;
复制代码
修改表
- field:字段名
- datatype:数据类型
- constraint:约束,MySQL的知识点,后续会先容
添加字段
语法:
- ALTER TABLE tbl_name ADD field datatype [COMMENT 'string'] [constraint];
复制代码 修改字段
语法:
- # 修改指定字段的数据类型
- ALTER TABLE tbl_name MODIFY field new_datatype;
- # 修改字段名和字段类型
- ALTER TABLE tbl_name CHANGE old_field new_field datatype [COMMENT 'string'] [constraint];
复制代码 删除字段
语法:
- ALTER TABLE tbl_name DROP field;
复制代码 修改表名
语法:
- ALTER TABLE tbl_name RENAME TO new_tbl_name;
复制代码 删除表
语法:
- # 删除表
- DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...;
- # 删除指定表,并重新创建该表
- TRUNCATE TABLE tbl_name;
复制代码
- 一条语句可以删除多个表,多个表的表名用,(逗号)毗连,但注意一条语句只能删除一条数据库
- TEMPORARY用于显式地说明删除的是暂时表,即使不加TEMPORARY也可以删除暂时表,由于暂时表和永世表不能重名
- TRUNCATE语句删除指定表后,自然清除了所有数据,得到了一张全新的空表
- 删除操作谨慎实行,岂论是删表照旧删库
其他操作
查看告诫信息
语法:
- 现在我前已知的告诫信息只有IF NOT EXISTS发现存在、IF EXISTS发现不存在抛出的。
查看编码集
语句:
- SHOW VARIABLES LIKE '%character%';
复制代码
- 该语句用于显示MySQL数据库中所有与字符干系的体系变量。这些变量包罗字符集、排序规则等设置。
完
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |