MySQL(一)
数据库概述
- 数据库即DataBase(DB),是存储和管理数据的仓库。
- 数据库管理系统即DataBase Management System (DBMS),是操纵和管理数据库的大型软件。
- SQL即Structured Query Language,是操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。
常见的数据库产品
数据库 | 说明 |
---|---|
Oracle | 收费的大型数据库,Oracle公司的产品。 |
MySQL | 开源免费的中小型数据库。Sun公司收购了MySQL,Oracle又收购了Sun公司 |
SQL Server | MicroSoft公司收费的中型的数据库。C#、.net等语言常使用 |
PostgreSQL | 开源免费中小型的数据库。 |
DB2 | IBM公司的大型收费数据库产品 |
SQLite | 嵌入式的微型数据库。如:作为Android内置数据库 |
MariaDB | 开源免费的中小型的数据库 |
MySQL概述
安装、配置、卸载
安装
- 官网下载压缩包:https://dev.mysql.com/downloads/mysql/
- 解压。
配置
- 添加环境变量:右键此电脑→属性→高级系统设置→环境变量→在系统变量中新建MYSQL_HOME,变量值设置为MySQL的根目录→在系统变量中找到并双击Path→新建→输入%MYSQL_HOME%\bin→确定。
- 验证环境变量添加是否成功:在命令行中输入mysql,如果输出Can't connect to MySQL server on 'localhost:3306'则证明添加成功。
- 初始化MySQL:以管理员身份运行命令行窗口,并输入如下的指令:
mysqld --initialize-insecure
- 注册MySQL服务:以管理员身份运行命令行窗口,并输入如下的指令:
mysqld -install
- 启动MySQL服务:在命令行中输入net start mysql即可。
net start mysql //启动mysql服务
net stop mysql //停止mysql服务
- 修改默认账户密码:在命令行中输入以下的指令:
mysqladmin -u 想设置的用户名 password 想设置的密码
登录MySQL
在命令行中输入以下指令:
mysql -u用户名 -p密码 [-h要连接的mysql服务器的ip地址(默认本地IP:127.0.0.1) -P端口号(默认3306)]
退出mysql的指令:
exit
quit
卸载MySQL
- 点击开始菜单,输入cmd,选择 "命令提示符",选择右侧的 "以管理员身份运行"。
- 输入
net stop mysql
,回车。 - 再输入
mysqld -remove mysql
,回车。 - 最后删除MySQL目录及相关的环境变量。
数据模型
关系型数据库(RDBMS)
建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
特点
- 使用表存储数据,格式统一,便于管理和维护。
- 使用SQL语言操作,标准统一,使用方便,可用于复杂查询。
MySQL的数据模型
- MySQL程序运行在MySQL数据服务器上,它内置了一个DBMS(数据库管理系统)。
- 客户端通过网络连接上MySQL服务器,并使用SQL语句来操控数据库。
- 可以在MySQL服务器上创建多个独立的数据库,这些数据库在MySQL服务器上以文件夹的形式存在。
- 可以在数据库中创建多张二维表,这些二维表在MySQL服务器上以文件的形式存在。
SQL简介
SQL:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。
SQL的通用语法
- SQL语句可以单行或多行书写,以分号结尾。
- SQL语句可以使用空格/缩进来增强语句的可读性。
- MySQL数据库的SQL语句不区分大小写。
- 注释:
- 单行注释:-- 注释内容 或 # 注释内容(MySQL特有)
- 多行注释: /* 注释内容 */
SQL的分类
SQL语句通常被分为四大类:
分类 | 全称 | 说明 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户、控制数据库的访问权限 |
数据库定义-DDL
数据库
查询
- 查询所有数据库:
show databases;
- 查询当前数据库:
select database();
创建
- 创建数据库:
create database [ if not exists ] 数据库名;
使用
- 使用数据库:
use 数据库名;
删除
- 删除数据库:
drop database [ if exists ] 数据库名;
注意事项
- 上述语法中的database,也可以替换成schema。
DataGrip
- 介绍:DataGrip是JetBrains旗下的一款数据库管理工具,是管理和开发MySQL、Oracle、PostgreSQL的理想解决方案。
- 官网: https://www.jetbrains.com/zh-cn/datagrip/
- DataGrip已经集成到了Intellij IDEA中。
表(创建、查询、修改、删除)
创建
create table 表名(
字段1 字段类型 [ 约束 ] [ comment 字段1注释 ] ,
......
字段n 字段类型 [ 约束 ] [ comment 字段n注释 ]
) [ comment 表注释 ] ;
约束
- 约束是作用于表中字段上的规则,用于限制存储在表中的数据。
- 作用:保证数据库中数据的正确性、有效性和完整性。
约束 | 描述 | 关键字 |
---|---|---|
非空约束 | 限制该字段值不能为null | not null |
唯一约束 | 保证字段的所有数据都是唯一、不重复的 | unique |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | primary key(可以添加auto_increment:自增) |
默认约束 | 保存数据时,如果未指定该字段值,则采用默认值 | default |
外键约束 | 让两张表的数据建立连接,保证数据的一致性和完整性 | foreign key |
数据类型
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
数值类型
类型 | 大小(byte) | 有符号(SIGNED)范围 | 无符号(UNSIGNED)范围 | 描述 |
---|---|---|---|---|
tinyint | 1 | (-128,127) | (0,255) | 小整数值 |
smallint | 2 | (-32768,32767) | (0,65535) | 大整数值 |
mediumint | 3 | (-8388608,8388607) | (0,16777215) | 大整数值 |
int | 4 | (-2147483648,2147483647) | (0,4294967295) | 大整数值 |
bigint | 8 | (-263,263-1) | (0,2^64-1) | 极大整数值 |
float | 4 | (-3.402823466 E+38,3.402823466351 E+38) | 0 和 (1.175494351 E-38,3.402823466 E+38) | 单精度浮点数值 |
double | 8 | (-1.7976931348623157 E+308,1.7976931348623157 E+308) | 0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308) | 双精度浮点数值 |
decimal | 小数值(精度更高) |
- 默认有符号,如果需要使用无符号需要在类型后指定,如:
tinyint unsigned
。 - 在使用小数时,需要指定数字的长度:float(a, b),a表示整个数字长度,b表示小数位个数。
字符串类型
类型 | 大小 | 描述 |
---|---|---|
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和varchar的比较:char性能较高但比较浪费空间;varchar性能较差但更节省空间。
日期时间类型
类型 | 大小(byte) | 范围 | 格式 | 描述 |
---|---|---|---|---|
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:01 至 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
查询
- 查询当前数据库所有表:
show tables;
- 查询表结构:
desc 表名;
- 查询建表语句:
show create table 表名;
修改
- 添加字段:alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
- 修改字段类型:
alter table 表名 modify 字段名 新数据类型(长度);
- 修改字段名和字段类型:
alter table 表名 change 旧字段名 新字段名 类型 (长度) [comment 注释] [约束];
- 删除字段:
alter table 表名 drop column 字段名;
- 修改表名:
rename table 表名 to 新表名;
删除
- 删除表:
drop table [ if exists ] 表名;
注意事项
- 在删除表时,表中的全部数据也会被删除。
数据库操作-DML
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。
添加数据(INSERT)
- 指定字段添加数据:
insert into 表名 (字段名1, 字段名2) values (值1, 值2);
- 全部字段添加数据:
insert into 表名 values (值1, 值2, ...);
- 批量添加数据(指定字段):
insert into 表名 (字段名1, 字段名2) values (值1, 值2), (值1, 值2);
- 批量添加数据(全部字段):
insert into 表名 values (值1, 值2, ...), (值1, 值2, ...);
注意事项
- 插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
- 字符串和日期型数据应该包含在引号中。
- 插入的数据大小,应该在字段的规定范围内。
- 调用now()函数可以获取当前系统时间。
- 添加数据时需要添加创建时间和修改时间。
修改数据(UPDATE)
- 修改数据:
update 表名 set 字段名1 = 值1, 字段名2 = 值2, .... [ where 条件 ];
注意事项
- 修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
- 修改数据时需要修改修改时间。
删除数据(DELETE)
- 删除数据:
delete from 表名 [ where 条件 ];
注意事项
- DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
- DELETE 语句不能删除某一个字段的值(如果要操作,可以使用UPDATE,将该字段的值置为NULL)。