数据库(Database,简称DB)
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
长期存放在计算机内,有组织、可共享的大量数据的集合,是一个数据“仓库”
作用:保存、管理数据
数据库总览
关系型数据库(SQL) MySQL、Oracle、SQL Server、SQLite、DB2
非关系型数据库(NOSQL) Redis、MongoDB
数据库管理系统(Database Management System)
数据库管理系统是对数据进行管理的大型系统软件,它是数据库系统的核心组成部分,用户在数据库系统中的一切操作,包括数据定义、查洵、更新(包括插入、删除和修改)及各种控制都是通过DBMS进行的。DBMS就是实现把用户意义下的抽象逻辑数据处理转换成计算机中的具体的物理数据的处理软件,这给用户带来很大的方便。
主要功能:
1.数据定义功能·
2.数据操纵功能
3.数据库运行管理功能
4.数据库的建立和维护功能
5.数据通信接口
6.数据组织、存储和管理
数据管理软件,科学组织和存储数据、高效地获取和维护数据

MySQL是一个开源的关系型数据库管理系统,由瑞典MySQL AB公司1995年开发,迅速成为最流行的开源关系型数据库管理系统。
MySQL数据库管理系统由瑞典MySQL AB公司1995年开发,该公司后被Sun公司收购,现在Sun公司又被Oracle公司收购,因此MySQL目前属于Oracle旗下产品
MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策,分为社区版和商业版。由于其体积小,速度快,总体拥有成本低,一般中小型网站的开发都选择MySQL作为网站数据库。
特点
免费、开源数据库
小巧、功能齐全
使用便捷
可运行于Windows或Linux操作系统
可适用于中小型甚至大型网站应用
Structure Query Language(结构化查询语言)简称SQL,它被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。数据库管理系统可以通过SQL管理数据库;定义和操作数据,维护数据的完整性和安全性。
优点:
1、简单易学,具有很强的操作性
2、绝大多数重要的数据库管理系统均支持SQL
3、高度非过程化;用SQL操作数据库时大部分的工作由DBMS自动完成
结构化查询语句分类
| 名称 | 解释 | 命令 |
| DDL (数据定义语言) | 定义和管理数据对象, 如数据库,数据表等 | CREATE、DROP、ALTER |
| DML (数据操作语言) | 用于操作数据库对象中所包含的数据 | INSERT、UPDATE、DELETE |
| DQL (数据查询语言) | 用于查询数据库数据 | SELECT |
| DCL (数据控制语言) | 用来管理数据库的语言,包括管理权限及数据更改 | GRANT、COMMIT、ROLLBACK |
创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名;
删除数据库
DORP DATABASE [IF EXISTS] 数据库名;
查看数据库
SHOW DATABASES;
使用数据库
USE 数据库名;
创建数据表

反引号用于区别MySQL保留字与普通字符而引入的
删表
DROP TABLE [ IF EXISTS ] 表名
IF EXISTS 为可选,判断是否存在该数据表 如删除不存在的数据表会抛出错误
显示表结构
desc 表名
显示表创建语句
show create table 表名
修改数据表
修改表(ALTER TABLE)
修改表名
ALTER TABLE 旧表名 RENAME AS 新表名
添加字段
ALTER TABLE 表名 ADD 字段名 列类型 [ 属性 ]
- #在员工表基础上增加age列
- ALTER TABLE workers ADD age INT;
修改字段
ALTER TABLE 表名 MODIFY 字段名 列类型 [ 属性 ]
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列类型 [ 属性 ]
- #修改email 长度为50
- ALTER TABLE workers MODIFY email VARCHAR(50);
- #列名name 修改为username
- ALTER TABLE workers CHANGE sname username VARCHAR(20);
删除字段
ALTER TABLE 表名 DROP 字段名
- #删除remark列
- ALTER TABLE workers DROP remark;
列类型
规定数据库中该列存放的数据类型
分为:
数值类型
| 类型 | 说明 | 取值范围 | 存储需求 |
| tinyint | 非常小的数据 | 有符值: -27 ~ 27-1 无符号值:0 ~ 28-1 | 1字节 |
| smallint | 较小的数据 | 有符值: -215 ~ 215-1 无符号值: 0 ~ 216-1 | 2字节 |
| mediumint | 中等大小的数据 | 有符值: -223 ~ 223-1 无符号值: 0 ~ 224-1 | 3字节 |
| int | 标准整数 | 有符值: -231 ~ 231-1 无符号值:0 ~ 232-1 | 4字节 |
| bigint | 较大的整数 | 有符值: -263 ~263-1 无符号值:0 ~264-1 | 8字节 |
| float | 单精度浮点数 | ±1.1754351e -38 | 4字节 |
| double | 双精度浮点数 | ±2.2250738585072014e -308 | 8字节 |
| decimal | 字符串形式的浮点数 | decimal(m, d) | m个字节 |
字符串类型
| 类型 | 说明 | 最大长度 |
| char[(M)] | 固定长字符串,检索快但费空间, 0 <= M <= 255 | M字符 |
| varchar[(M)] | 可变字符串 0 <= M <= 65535 | 变长度 |
| tinytext | 微型文本串 | 28–1字节 |
| text | 文本串 | 216–1字节 |
日期和时间型数值类型
| 类型 | 说明 | 取值范围 |
| DATE | YYYY-MM-DD,日期格式 | 1000-01-01~ 9999-12-31 |
| TIME | Hh:mm:ss ,时间格式 | -838:59:59~838:59:59 |
| DATETIME | YY-MM-DD hh:mm:ss | 1000-01-01 00:00:00 至 9999-12-31 23:59:59 |
| TIMESTAMP | YYYYMMDDhhmmss格式表示的时间戳 | 197010101000000 ~2037年的某个时刻 |
| YEAR | YYYY格式的年份值 | 1901~2155 |
NULL值
理解为“没有值”或“未知值” 不要用NULL进行算术运算,结果仍为NULL
选择数据类型:
整数和浮点
日期类型
char和varchar
PRIMARY KEY
主关键字(主键,primary key)是被挑选出来,作表的行的惟一标识的候选关键字。一个表只有一个主关键字。主关键字又可以称为主键。主键可以由一个字段,也可以由多个字段组成,分别成为单字段主键或多字段主键。
多字段主键案例:

UNSIGNED
无符号的 声明该数据列不允许负数
ZEROFILL
0填充的 不足位数的用0来填充,如 int(3),5则为 005
AUTO_INCREMENT
自动增长的,每添加一条数据,自动在上一个记录数上加1
通常用于设置主键,且为整数类型
可定义起始值和步长
NULL 和 NOT NULL
默认为NULL,即没有插入该列的数值
如果设置为NOT NULL,则该列必须有值
DEFAULT
默认的
用于设置默认值 例如,性别字段,默认为“男”,否则为“女”;若无指定该列的值,则默认为“男”的值
MySQL注释: 1、#…… 单行注释
2、/*……*/ 多行注释
- CREATE TABLE 表名(
- #省略一些代码
- ) ENGINE = MyISAM
- CREATE TABLE 表名(
- #省略一些代码
- ) ENGINE = InnoDB
MySQL的数据表的类型
MyISAM、InnoDB 、HEAP、BOB、CSV等
常见的MyISAM与InnoDB类型
| 名称 | MyISAM | InnoDB |
| 事务处理 | 不支持 | 支持 |
| 数据行锁定 | 不支持 | 支持 |
| 外键约束 | 不支持 | 支持 |
| 全文索引 | 支持 | 不支持 |
| 表空间大小 | 较小 | 较大,约2倍 |
使用MyISAM: 节约空间及相应速度
使用InnoDB: 安全性,事务处理及多用户操作数据表
DML语言(数据操作语言)
用于操作数据库对象中所包含的数据
包括
INSERT ( 添加数据语句 )
UPDATE ( 更新数据语句 )
DELETE ( 删除数据语句 )
INSERT INTO 表名 [ ( 字段1, 字段2, 字段3, … ) ] VALUES ( '值1', '值2', '值3', …)
字段或值之间用英文逗号隔开
“字段1, 字段2…”该部分可省略,但添加的值务必与表结构数据列顺序相对应,且数量一致
可同时插入多条数据,values 后用英文逗号隔开
- INSERT INTO 表名 [ ( 字段1, 字段2, 字段3, … ) ] VALUES ( '值1', '值2', '值3', …),
- ( '值1', '值2', '值3', …),( '值1', '值2', '值3', …),......( '值1', '值2', '值3', …);
-
-
- INSERT INTO workers VALUES (1,'张三丰','男','1367-10-21','12321222@qq.com',102),
- (2,'达摩','男','122-4-15','1121213242@126.com',54),
- (3,'梅超风','女','1547-6-1','232442@163.com',44),
- (4,'三体星人','未知','3012-8-15','12345678@fly.com',2000),
- (5,'超级赛亚人','男','1985-2-3','whosyurdaday@sina.com',25);
- UPDATE 表名
- SET column_name = value [ , column_name2 = value2, …. ] [ WHERE condition ];
column_name 为要更改的数据列
value 为修改后的数据,可以为变量、具体值、表达式或者嵌套的SELECT结果
condition为筛选条件,若不指定则修改该表的所有列数据
有条件地从表中筛选数据
WHERE中的运算符:
| 运算符 | 含义 | 范例 | 结果 |
| = | 等于 | 5=6 | false |
| <> 或 != | 不等于 | 5!=6 | true |
| > | 大于 | 5>6 | false |
| < | 小于 | 5<6 | true |
| >= | 大于等于 | 5>=6 | false |
| <= | 小于等于 | 5<=6 | true |
| BETWEEN | 在某个范围之间 | BETWEEN 5 AND 10 | - |
| AND | 并且 | 5>1 AND 1>2 | false |
| OR | 或 | 5>1 OR 1>2 | true |
- #将sid为4的那一行的username改为"弗利萨"
- UPDATE workers SET username='弗利萨' WHERE sid=4;
- #将sid为4的那一行的age设为250
- UPDATE workers SET age =250 WHERE sid=4;
delete命令
DELETE FROM 表名 [ WHERE condition ];
- #删除age为2000的那一行
- DELETE FROM workers WHERE age=250;
condition为筛选条件,若不指定则删除该表的所有列数据
TRUNCATE命令
用于完全清空表数据,但表结构、索引、约束等不变
TRUNCATE [TABLE] table_name
相同:都能删除数据、不删除表结构,但TRUNCATE 速度更快
不同:使用TRUNCATE TABLE重新设置AUTO_INCREMENT计数器
使用TRUNCATE TABLE不会对事务有影响