数据库(Database)是一个按照数据结构来组织、存储和管理数据的仓库。它不仅存储数据本身,还存储数据之间的关系,以便于数据的检索和管理。数据库的概念是计算机科学中的一个核心概念,广泛应用于各种信息系统中,如企业资源规划(ERP)、客户关系管理(CRM)、电子商务、网站、移动应用等。
关系型数据库:基于关系模型,使用SQL语言进行操作,如MySQL、PostgreSQL、Oracle、SQL Server等。
非关系型数据库(NoSQL):不遵循传统的关系模型,适用于处理大量、多变的数据,如文档型数据库(MongoDB)、键值存储(Redis)、列存储(Cassandra)等。
分布式数据库:数据分布在多个物理位置,通过网络连接在一起,如Google的Spanner、Amazon的DynamoDB等。
对象数据库:存储对象及其关系,如对象关系映射(ORM)技术。
MySQL是一个流行的开源关系型数据库管理系统(RDBMS),由瑞典的MySQL AB公司开发,后来被Sun Microsystems公司收购,最终被Oracle公司收购。MySQL使用结构化查询语言(SQL)进行数据库管理,广泛应用于Web应用程序,如WordPress、Joomla、Drupal等。
1.开源:MySQL遵循GPL(GNU通用公共许可证),这意味着用户可以免费使用、修改和分发MySQL软件。
2.高性能:MySQL设计用于处理大量数据和高并发的数据库操作,适合于Web应用。
3.跨平台:MySQL可以在多种操作系统上运行,包括Linux、Windows、Mac OS X等。
4.支持多种存储引擎:MySQL支持多种存储引擎,如InnoDB、MyISAM、Memory等,用户可以根据应用需求选择合适的存储引擎。
5.安全性:MySQL提供了多种安全特性,如用户权限管理、数据加密、SSL连接等。
6.可扩展性:MySQL支持大型数据库,可以处理大量数据和高并发请求。
7.社区支持:MySQL拥有庞大的用户和开发者社区,提供了丰富的文档和资源。
MySQL的使用非常广泛,是许多网站和应用程序的首选数据库解决方案。如果你需要进行MySQL数据库的管理、查询、优化等操作,可以使用MySQL提供的命令行工具或图形界面工具,如phpMyAdmin、MySQL Workbench等。
1.数据以表格的形式出现
2.每行为各种记录名称
3.每列为记录名称所对应的数据域
4.许多的行和列组成一张表单
5.若干的表单组成database
1.数据库:数据库是一些表或者其它对象的集合。
2.数据表:表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
3.列:又称为字段。一列数据包含了相同类型的数据,例如邮政编码的数据。
4.行:又称为记录。一行数据是一组相关的数据,例如一条用户订阅的数据。
5.冗余:存储多份数据,冗余虽然浪费了空间,降低了性能,但提高了数据的安全性。
6.主键:一个数据表中只能包含一个主键。表中每一行数据(一条记录)的主键是唯一的,你可以使用主键来查询数据。
7.外键:外键用于关联两个表。其中一个表A的字段取之于表B的主键,那么B的主键称为A的外键。
8.复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
9.索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
10.参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
MySQL 官网地址为:地址
下载地址为:MySQL 下载 。挑选你需要的 MySQL Community Server 版本及对应的平台。
这里我们使用已经下载好的低版本 mysql-5.6.37-winx64
下载完后,我们将 zip 包解压到相应的目录,这里我将解压后的文件夹放在 D:\mysql-5.6.37-winx64
接下来我们需要配置下 MySQL 的配置文件
打开刚刚解压的文件夹D:\mysql-5.6.37-winx64 ,在该文件夹下创建 my.ini 配置文件,编辑 my.ini 配置以下基本信 息:
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[mysqld]
#设置3306端口
port=3306
#设置mysql的安装目录(存放地址可以更改)
basedir=D:\mysql
#设置mysql数据库的数据的存放目录(存放地址可以更改)
datadir=D:\mysql
#允许最大连接数
max_connections=200
#允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
#服务端使用的字符集默认为UTF8
character-set-server=utf8
#创建新表时将使用的默认存储引擎 default-storage-engine=INNODB
#默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8
[client]
#设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
innodb_force_recovery = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
接下来我们来启动下 MySQL 数据库:
以管理员身份打开 cmd 命令行工具,切换目录:
cd D:\mysql-5.6.37-winx64 \bin
初始化数据库:
mysqld --initialize --console
执行完成后,会输出 root 用户的初始默认密码,如:A temporary password is generated for root@localhost: APWCY5ws&hjQ
APWCY5ws&hjQ 就是初始密码,后续登录需要用到,你也可以在登陆后修改密码。
输入以下安装命令:
mysqld install
启动输入以下命令即可:
net start mysql
注意: 在 5.7 需要初始化 data 目录:
cd D:\mysql-5.6.37-winx64 \bin
mysqld --initialize-insecure
初始化后再运行
net start mysql
即可启动 mysql。
. 登录 MySQL
mysql -h 主机名 -u 用户名 -p
-h : 指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0.1)该参数可以省略;
-u : 登录的用户名;
-p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。
mysql -u root -p
指令 USE 数据库名 :
use wzry;
列出 MySQL 数据库管理系统的数据库列表。
SHOW DATABASES:
显示指定数据库的所有表,使用该命令前需要使用 use 命令来选择要操作的数据库。
SHOW TABLES:
可视化根据 使用客户端 Navicat 连接登录 MySQL
创建 MySQL 数据库的语法
CREATE DATABASE [IF NOT EXISTS] <数据库名>
[[DEFAULT] CHARACTER SET <字符集名>]
[[DEFAULT] COLLATE <校对规则名>];
mysqladmin -u root -p create wzrydata
使用 drop 命令删除数据库
drop database <数据库名>;
MySQL 数据类型
MySQL支持所有标准SQL数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT1 | byte | (-128,127) | (0,255) | 小整数值 |
SMALLINT2 | bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT3 | bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER4 | bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT8 | bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT4 | bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0, | (1.175 494 351 E-38,3.402 823 466 E+38) | 单精度浮点数值 |
DOUBLE | 8 bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
TIMESTAMP类型有专有的自动更新特性,将在后面描述。
类型 | 大小 | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | ‘-838:59:59’/‘838:59:59’ | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07YYYYMMDD | HHMMSS | 混合日期和时间值,时间戳 |
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
注意:char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。
navicat是一款强大的数据库可视化操作工具,支持各种不同的数据库,支持不同的平台。
官网地址:地址
文档地址:地址
navicat安装
navicat premium 16 科学安装版本下载地址: https://pan.baidu.com/s/1xg5dJcaqv6cTw_opWJG9AQ? pwd=8888
CREATE DATABASE `wzry` CHARACTER SET 'armscii8' COLLATE 'armscii8_general_ci';
CREATE TABLE table_name (column_name column_type);
CREATE TABLE `hero` (
`id` int(11) NOT NULL COMMENT '主键',
`name` varchar(255) DEFAULT NULL COMMENT '姓名',
`hurt` float DEFAULT NULL COMMENT '伤害',
`hp` float DEFAULT NULL COMMENT '血量',
`armor` float DEFAULT NULL COMMENT '护甲',
`moveSpeed` int(11) DEFAULT NULL COMMENT '移动速度',
`death` int(11) DEFAULT NULL COMMENT '死亡数量',
`kill` int(11) DEFAULT NULL COMMENT '击杀数量',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=armscii8;
CREATE TABLE `user` (
`id` bigint(20) NOT NULL COMMENT '主键',
`hero_id` int(20) DEFAULT NULL COMMENT '英雄id',
`name` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '姓名',
`phone` varchar(100) COLLATE utf8_bin NOT NULL COMMENT '手机号',
`sex` varchar(2) COLLATE utf8_bin DEFAULT NULL COMMENT '性别',
`id_number` varchar(18) COLLATE utf8_bin DEFAULT NULL COMMENT '身份证号',
`avatar` varchar(500) COLLATE utf8_bin DEFAULT NULL COMMENT '头像',
`status` int(11) DEFAULT '0' COMMENT '状态 0:禁用,1:正常',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=COMPACT COMMENT='用户信息';
DROP TABLE table_name ;
DROP TABLE hero;
INSERT INTO `wzry`.`hero`(`id`, `name`, `hurt`, `hp`, `armor`, `moveSpeed`, `death`, `kill`) VALUES (1, '鲁班', 1, 1, 1, 1, 1, 1);
INSERT INTO `wzry`.`user`(`id`, `hero_id`, `name`, `phone`, `sex`, `id_number`, `avatar`, `status`) VALUES (1, 1, '狂魔哥', '13112345678', NULL, NULL, NULL, 1);
INSERT INTO `wzry`.`user`(`id`, `hero_id`, `name`, `phone`, `sex`, `id_number`, `avatar`, `status`) VALUES (2, 2, '吕德华', '13812345678', NULL, NULL, NULL, 1);
SELECT * FROM `wzry`.`hero`
SELECT * from hero WHERE id ='1';
UPDATE hero SET hurt='100' WHERE id=1;
DELETE FROM hero WHERE id=1;
SELECT * from hero WHERE name LIKE '%鲁班';
SELECT * from hero WHERE name LIKE '%鲁班%';
SELECT name FROM hero
UNION
SELECT name FROM user
ORDER BY name;
SELECT * from hero ORDER BY name ASC;
SELECT name, COUNT(*) FROM hero GROUP BY name;
####MySQL INNER JOIN – (内连接,或等值连接)
SELECT a.id, a.name ,b.name as heroName FROM user a INNER JOIN hero b ON a.hero_id = b.id;
-- 使用limit做分页 0 = (当前页 - 1) * 每页显示条数
select * from hero limit 0,4;
MySQL 数据库中的事务是用户一系列的数据库操作,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库才支持事务。事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
一般来说,事务是必须满足4个条件(ACID):原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
事务A读取到了事务B已经修改但尚未提交的数据,还在这个数据基础上做了操作。此时,如果B事务回滚,A读取的数据无效,不符合一致性要求。
事务A读取到了事务B提交的新增数据,不符合隔离性。
事务A读取到了事务B已经提交的修改数据,不符合隔离性。
当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,由于每个事务都不知道其他事务的存在,就会发生丢失更新问题–最后的更新覆盖了由其他事务所做的更新。
在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别,在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同。
也称为读未提交(Read Uncommitted):会引发脏读取、不可重复读和虚读,但避免了更新丢失。如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。
也称为读提交(Read Committed):会引发不可重复读取和虚读,但避免脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。
可重复读取(Repeatable Read):禁止不可重复读取和脏读取,但是有时可能出现幻读数据和虚读。这可以通过“共享读锁”和“排他写锁”实现。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。
序列化(Serializable):提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。