目录
数据库简介
- 概念:数据库(database)是用来组织、存储和管理数据的仓库。
- 目的:为了方便管理互联网世界中的数据,就有了数据库管理系统的概念(简称:数据库)。用户可以对数据库中的数据进行新增、查询、更新、删除等操作。
- 常见数据库工具:
MySQL 数据库(目前使用最广泛、流行度最高的开源免费数据库;Community + Enterprise)
Oracle 数据库
SQL Server 数据库
Mongodb 数据库 (Community + Enterprise) -
数据库分类:
· 传统数据库(关系型数据库或SQL数据库)
MySQL、Oracle、SQL Server,这三者的设计理念相同,用法比较类似
· 新型数据库(非关系数据库或NoSQL数据库)
Mongodb,它在一定程度上弥补了传统型数据库的缺陷
一、MySQL简介
MySQL是一种开放源代码的关系型数据库管理系统,使用最常用的数据库管理语言–结构化查询语言(SQL)进行数据库管理。 MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。
注:以上内容来自百度百科
二、 MySQL安装及配置
可参考: MySQL安装教程_酷爱编程的小猿同学-CSDN博客_mysql安装教程
三、数据库列的类型
3.1 数值类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
TINYINT | 1 Bytes | (-128 , 127) | (0 , 255) | 小整数值 |
SMALLINT | 2 Bytes | (-2^15 , 2^15 -1) | (0 , 2^16 -1) | 大整数值 |
MEDIUMINT | 3 Bytes | (-2^23,2^23 -1) | (0 , 2^24 -1) | 大整数值 |
INT或 INETGER | 4 Bytes | (-2^31 , 2^31 -1) | (0 , 2^32 -1) | 大整数值 |
BIGINT | 8 Bytes | (-2^63 , 2^63 -1) | (0 , 2^64 -1) | 极大整数值 |
FLOAT | 4 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的值 | 小数值 |
常见数据类型:
- int 整数
- varchar(len) 字符串
- tinyint(1)布尔值
3.2 日期/时间
类型 | 大小(bytes) | 范围 | 格式 | 用途 |
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | ‘-838:59:59’/‘838:59:59’ | HH:M: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:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
3.3 字符串类型
类型 | 大小(bytes) | 用途 |
CHAR | 0~255 | 定长字符串 |
VARCHAR | 0~65535 | 变长字符串 |
TINYBLOB | 0~255 | 不超过255个字符的二进制字符串 |
TINYTEXT | 0~255 | 短文本字符串 |
BLOB | 0~65535 | 二进制形式的长文本数据 |
TEXT | 0~65535 | 长文本数据 |
MEDIUMBLOB | 0~16777215 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0~16777215 | 中等长度文本数据 |
LONGBLOB | 0~4294967295 | 二进制形式的极大文本数据 |
LONGTEXT | 0~4294967295 | 极大文本数据 |
四、数据库字段属性
- Unsigned:指无符号的整数,如果声明了该属性,则该字段对应的列的数据不能为负数。
- zerofill:指0填充,即不足的位数用0来填充。
- 自增: 自动在上一条记录的基础上加1(默认),一般用来设置唯一的主键。可以自定义自增的起始值和步长。
- 非空: 如果设置为not null,则必须填写值,否则会报错;如果设置为null,可以不填写值,则默认值为null。
- 默认: 设置为默认的值,如果不指定该列的值,则会有默认值。
五、数据库操作
5.1 创建数据库
create database [if not exists] 数据库名称;
--在创建数据库时,我们应该要使用IF NOT EXISTS进行判断创建的数据库是否已经存在,这样可以避免运行SQL语句出现报错。
5.2 删除数据库
drop database [if exists] 数据库名称;
5.3 使用数据库
use 数据库名称;
--如果数据库名、表名或字段名是一个特殊字符或者关键字时,就需要带tab键上面的那个键的符号,即反引号。
5.4 显示数据库
show database;
--查看所有的数据库
六、数据库表的操作
6.1 创建表
create table [if not exists] `表名` (
`字段名1` 列类型 [属性] [索引] [注释],
`字段名2` 列类型 [属性] [索引] [注释],
...
`字段名n` 列类型 [属性] [索引] [注释]
)[表的类型] [字符集设置] [注释]
设置字段的特殊标识:
- PK(Primary Key) --- 主键、唯一标识
- NN(Not Null) --- 值不允许为空
- UQ(Unique) --- 值唯一
- AI(Auto Increment) --- 值自动增长
6.2 表的修改与删除
修改表名称
alter table 原表名 rename as 新表名
增加表字段
alter table 表名 add 字段名 列类型
修改表的字段约束
alter table 表名 modify 字段名 列类型 [类属性]
修改表的字段名
alter table 表名 change 旧字段名 新字段名 [列类型] [列属性]
删除表字段
alter table 表名 drop 字段名
删除表
drop table [if exists] 表名
七、SQL语句
SQL 是 结构化查询语言,专门用来访问和处理数据库的编程语言。能够让我们以编程的形式,操作数据库里面的数据。
7.1 SQL能做什么
- 从数据库中查询数据
- 向数据库中插入新的数据
- 更新数据库中的数据
- 从数据库删除数据
- 可以创建新数据库
- 可在数据库中创建新表
- 可在数据库中创建存储过程、视图
注意:
- SQL 是一门数据库编程语言
- 使用 SQL 语言编写出来的代码,叫做 SQL 语句
- SQL 语言只能在关系型数据库中使用(例如 MySQL、Oracle、SQL Server)。非关系型数据库(例如 Mongodb)不支持 SQL 语言
7.2 SELECT 语句
SELECT 语句用于从表中查询数据。执行的结果被存储在一个结果表中(称为结果集),SQL 语句中的关键字对大小写不敏感。SELECT 等效于 select,FROM 等效于 from,在执行语句的时候,需要选择默认的数据库。
7.2.1 查询所有列
--从FROM指定的【表中】,查询出【所有的】数据 (*表示所有的列)
select * from 表名称
--从FROM 指定的【表中】,查询出指定 列名称(字段)的数据
SELECT 列名称 FROM 表名称
7.3 INSERT INTO 语句
用于向数据表中插入新的数据行。
--注意:列和值要一一对应,多个列和多个值间,使用英文的逗号分隔开
insert into users (username, password) values ('mz', '123456');
或
insert into 表名 set 字段1 = 值1,字段1 = 值1,字段1 = 值1;
注意:新的数据需要加上引号,否则会报错
7.4 UPDATE 语句
用于修改表中的数据。
update 表名称 set 列名称 = 新值 where 列名称 = 某值
--用update指定要更新哪个表中的数据
--用set指定列对应的新值
--用where指定更新的条件
例如:
update users set password=654321 where id=4;
--注意:
--多个被更新的列之间, 使用英文的逗号进行分隔
--where 后面跟着的是更新的条件
--初学者经常忘记提供更新的 where 条件,这样会导致整张表的数据都被更新,一定要慎重
7.5 DELETE 语句
用于删除表中的行。
--从指定表中,根据where条件,删除对应数据行
delete from 表名称 where 列名称 = 值
7.6 where 子句
用于限定选择的标准。在 SELECT、UPDATE、DELETE 语句中,皆可使用 WHERE 子句来限定选择的标准。(可在 WHERE 子句中使用的运算符)
注意:在某些版本的 SQL 中,操作符 <> 可以写为 !=
select 表名称 set 字段1=值1 where 字段2=值2;
7.7 操作符及含义
操作符 | 含义 |
---|---|
= | 等于 |
<> 或 != | 不等于 |
> | 大于 |
< | 小于 |
>= | 大等于 |
<= | 小等于 |
BETWEEN … AND … | 在某个范围内 |
AND | 用于连接多个条件,相当于 && |
OR | 用于连接多个条件,相当于 ll |
- AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来
- AND 表示必须同时满足多个条件,相当于 JavaScript 中的 && 运算符,例如 if (a !== 10 && a !== 20)
- OR 表示只要满足任意一个条件即可,相当于 JavaScript 中的 || 运算符,例如 if(a !== 10 || a !== 20)
7.8 ORDER BY 语句
语法:
- ORDER BY 语句用于根据指定的列对结果集进行排序
- ORDER BY 语句默认按照升序对记录进行排序,ASC 关键字代表升序排序
- 如果您希望按照降序对记录进行排序,可以使用 DESC 关键字
7.8.1 对表中数据按照指定字段进行升序排序
-- 下面这两条 SQL 语句是等价的,因为 order by 默认进行升序排序其中,ASC 关键字代表升序排序
select * from 表名称 order by 字段;
select * from 表名称 order by 字段 asc;
7.8.2 对表中数据按照指定字段进行降序排序
-- desc 代表降序排序
select * from 表名称 order by 字段 desc;
7.8.3 多重排序
select * from 表名称 order by 字段1 desc, 字段2 asc;
例如:
select * from users order by status desc, username asc;
--对 users 表中的数据,先按照 status 字段进行降序排序,再按照 username 的字母顺序,进行升序排序
7.9 COUNT(*) 函数
COUNT(*) 函数用于返回查询结果的总数据条数。
-- 查询 users 表中 status 为 0 的总数据条数
select count(*) from 表名称 where 字段=值;
八、MySQL事务
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
事务用来管理 insert,update,delete 语句。一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。
8.1 原子性
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
8.2 一致性
在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
8.3 隔离性
数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
8.4 持久性
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
PS:(以上内容来自菜鸟教程)
只是个菜鸟来总结MySQL,不做任何商业价值,如有侵犯请不要伤害。