MySQL基础
-
-
为什么要使用数据库
- 解决数据持久化问题
- 高效的管理数据(增删改查)
-
-
数据库的分类:
-
关系型数据库
- 理论基础:关系代数
- 具体表象:二维表-
~ 行:记录
-
列:字段
- 编程语言:SQL(结构化查询语言) - DDL - 数据定义语言 —> create / drop / alter
- DML - 数据操作语言 —> insert / delete / update
- DQL - 数据查询语言 —> select
- DCL - 数据控制语言 —> grant / revoke
-
列:字段
-
非关系型数据库(NoSQL / NewSQL)
- MongoDB —> 文档数据库
- Redis —> KV数据库
-
关系型数据库
-
-
相关术语
- DB - database(数据库)
- DBA - database administrator(数据库管理员)
- DBMS - database management system(数据库管理系统)
- DBS - database system(数据库系统。)
~–> 计算机系统(软硬件+人)+DBMS+DB
-
-
使用MySQL
- 查看所有数据库:show databases;
- 切换数据库:use school;
- 查看数据库下所有的表:show tables;
- 查看所有的字符集(编码):show charset;
- 查看所有的校对(排序)规则:show collation;
- 查看所有的引擎:show engines;
~ 创建/删除数据库:
create schema school default charset utf8mb4;
create database school default charset utf8mb4 collate utf8mb4_bin;
create database school default character set utf8mb4;
drop database if exists school;
~ 创建/删除/修改二维表:
create table tb_student (列名 数据类型 约束条件);
drop table tb_student;
alter table tb_student add column …;
alter table tb_student drop column …;
alter table tb_student modify column …;
alter table tb_student change column …;
alter table tb_student add constraint …;
alter table tb_student drop constraint …;
- 主键(primary key):能够唯一确定一条记录的字段。
- 外键(foreign key):外来的主键(其他表的主键)。
~ 插入/删除/更新数据:
insert into tb_student (…) values (…);
insert into tb_student (…) values (…), (…), (…);
delete from tb_student where stu_id=…;
delete from tb_student where stu_id in (…);
update tb_student set …, … where stu_id=…;
-
\5. MySQL的数据类型 —> ? data types;
-
整数:
- int / integer —> -2^31 ~ 2^31 - 1
- int unsigned —> 0 ~ 2^32 - 1
- bigint —> -2^63 ~ 2^63 - 1
- bigint unsigned —> 0 ~ 2^64 - 1
- smallint —> -32768 ~ 32767
- smallint unsigned —> 0 ~ 65535
- tinyint —> -128 ~ 127
- tinyint unsigned —> 0 ~ 255 -
小数:
- float / double
- decimal —> decimal(10,2) -
字符串:
- char(N) / varchar(N)
- longtext —> longblob(二进制大对象)—> 4G —> 放资源路径(URL) -
时间日期:
- date / time / datetime(6)
- timestamp —> 1970-1-1 00:00:00 -
布尔型:
- boolean —> tinyint(1) —> 0 / 1
相关术语
在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:
- 数据库: 数据库是一些关联表的集合。
- 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
- 列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
- **行:**一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
- 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
- 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
- **外键:**外键用于关联两个表。与另一张表关联,用来确定另一张表记录的字段的取值范围,确保数据的一致性。表的外键是另一张表的主键,可以重复也可以为空值。
- 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
- **索引:**使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
- 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成。如图所示的一个表格:
- 表头(header): 每一列的名称;
- 列(col): 具有相同数据类型的数据的集合;
- 行(row): 每一行用来描述某条记录的具体信息;
- 值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
- 键(key): 键的值在当前列中具有唯一性。
数据库操作
MySQL管理
启动及关闭
启动及关闭 MySQL 服务器
Windows 系统下
1.在 Windows 系统下,打开命令窗口(cmd),进入 MySQL 安装目录的 bin 目录。
启动:
cd c:/mysql/bin
mysqld --console
关闭:
cd c:/mysql/bin
mysqladmin -uroot shutdown
2.通过Windows服务管理器
启动MySQL服务通过Windows的服务管理器可以查看MySQL服务是否开启,首先单击“开始”菜单,在弹出的菜单中选择“运行”命令,打开“运行”对话框输入services.msc命令,单击“确定”按钮,此时就会打开Windows的服务管理器,找到MySQL服务,右键手动开启。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EejmeMb8-1631012717546)(C:/Users/小新/Pictures/mysql安装/服务.png)]
Linux 系统下
首先,我们需要通过以下命令来检查MySQL服务器是否启动:
ps -ef | grep mysqld
如果MySql已经启动,以上命令将输出mysql进程列表, 如果mysql未启动,你可以使用以下命令来启动mysql服务器:
root@host# cd /usr/bin
./mysqld_safe &
如果你想关闭目前运行的 MySQL 服务器, 你可以执行以下命令:
root@host# cd /usr/bin
./mysqladmin -u root -p shutdown
注意:如果没有设置MySQL开机自启,关机后数据库自动关闭,那么我们在下次使用MySQL数据库时需要先启动MySQL数据库。
个人推荐使用Windows服务管理器启动。
MySQL 用户设置
如果你需要添加 MySQL 用户,你只需要在 mysql 数据库中的 user 表添加新用户即可。
以下为添加用户的的实例,用户名为guest,密码为guest123,并授权用户可进行 SELECT, INSERT 和 UPDATE操作权限:
root@host# mysql -u root -p
Enter password:*******
mysql> use mysql;
Database changed
mysql> INSERT INTO user
(host, user, password,
select_priv, insert_priv, update_priv)
VALUES ('localhost', 'guest',
PASSWORD('guest123'), 'Y', 'Y', 'Y');
Query OK, 1 row affected (0.20 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 1 row affected (0.01 sec)
mysql> SELECT host, user, password FROM user WHERE user = 'guest';
+-----------+---------+------------------+
| host | user | password |
+-----------+---------+------------------+
| localhost | guest | 6f8c114b58f2ce9e |
+-----------+---------+------------------+
1 row in set (0.00 sec)
在添加用户时,请注意使用MySQL提供的 PASSWORD() 函数来对密码进行加密。 你可以在以上实例看到用户密码加密后为: 6f8c114b58f2ce9e.
注意:在 MySQL5.7 中 user 表的 password 已换成了authentication_string。
**注意:**password() 加密函数已经在 8.0.11 中移除了,可以使用 MD5() 函数代替。
**注意:**在注意需要执行 FLUSH PRIVILEGES 语句。 这个命令执行后会重新载入授权表。
如果你不使用该命令,你就无法使用新创建的用户来连接mysql服务器,除非你重启mysql服务器。
你可以在创建用户时,为用户指定权限,在对应的权限列中,在插入语句中设置为 ‘Y’ 即可,用户权限列表如下:
- Select_priv
- Insert_priv
- Update_priv
- Delete_priv
- Create_priv
- Drop_priv
- Reload_priv
- Shutdown_priv
- Process_priv
- File_priv
- Grant_priv
- References_priv
- Index_priv
- Alter_priv
另外一种添加用户的方法为通过SQL的 GRANT 命令,以下命令会给指定数据库TUTORIALS添加用户 zara ,密码为 zara123 。
root@host# mysql -u root -p
Enter password:*******
mysql> use mysql;
Database changed
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON TUTORIALS.*
-> TO 'zara'@'localhost'
-> IDENTIFIED BY 'zara123';
以上命令会在mysql数据库中的user表创建一条用户信息记录。
注意: MySQL 的SQL语句以分号 (😉 作为结束标识。
-- 创建用户(用户名@用户可以登录的地址;密码)
create user 'guest'@'10.7.178.%' identified by 'Guest.618';
-- 删除用户
drop user 'guest'@'10.7.178.%';
-- 修改用户
alter user 'guest'@'10.7.178.%' identified
with mysql_native_password by 'Gue