首先我们要了解MySql是一个数据库服务客户端,MySql是一个数据库服务端。
存储数据用文件就可以了,为什么还要弄个数据库?
文件保存数据有以下几个缺点:
- 文件的安全性问题
- 文件不利于数据查询和管理
- 文件不利于存储海量数据
- 文件在程序中控制不方便
数据库存储介质:
- 磁盘
- 内存
数据库本质也是文件,只不过这些文件不由程序员来操作而是由数据库服务去mysqld操作!!
它的实现可以帮助人更好的管理数据。
指令的分类:
- DDL【data definition language】数据定义语言,用来维护存储数据的结构
代表指令: create,drop,alter - DML【data manipulation language】数据操纵语言,用来对数据进行操作
代表指令: insert,delete,update- DML 中又单独分了一个 DQL,数据查询语言,代表指令: select
- DCL【Data Control Language】数据控制语言,主要负责权限管理和事务
代表指令: grant,revoke,commit
存储引擎
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL 的核心就是插件式存储引擎,支持多种存储引擎。
常用的两个存储引擎:
InnoDB
- 特点:支持完整 ACID 事务特性,提供事务隔离级别防止脏读、不可重复读、幻读等;采用行级锁定,降低锁冲突概率,适合高并发写操作;支持外键约束维护数据参照完整性;通过重做日志和撤销日志保证系统崩溃时的数据恢复;使用聚簇索引,主键索引和数据存储在一起 。
- 适用场景:适用于高并发事务系统,如银行交易系统(大量插入、更新且需保证事务完整性和隔离性 )、电子商务平台(频繁订单插入和库存更新,保证数据一致性 )。
MyISAM
- 特点:不支持事务和外键;采用表级锁定,读写操作会锁定整个表,并发性能差;支持全文索引,利于高效全文搜索;存储格式紧凑,占用空间小;在只读或读多写少场景下性能好。
- 适用场景:常用于只读数据库(如数据仓库、日志存储系统 ),以及需要快速全文搜索的场景。
数据库基本操作:
数据库操作
- 查看所有数据库:
show databases;
- 创建数据库:
create database 数据库名;
,如create database testdb;
- 删除数据库:
drop database 数据库名;
,例如drop database testdb;
- 选择数据库:
use 数据库名;
,比如use testdb;
,用于切换到指定数据库进行后续操作。
数据表操作
- 查看当前数据库中的所有表:
show tables;
- 创建表:
create table 表名 (列名1 数据类型1, 列名2 数据类型2, ...);
。例如create table users (id int, name varchar(50));
- 查看表结构:
describe 表名;
或desc 表名;
,如describe users;
- 修改表结构:
- 添加列:
alter table 表名 add 列名 数据类型;
,例如alter table users add age int;
- 删除列:
alter table 表名 drop column 列名;
。
- 添加列:
- 删除表:
drop table 表名;
,如drop table users;
- 重命名表:
rename table 原表名 to 新表名;
,例如rename table users to users_new;
数据操作
- 插入数据:
- 指定列插入:
insert into 表名 (列名1, 列名2, ...) values (值1, 值2, ...);
,比如insert into users (id, name) values (1, 'John');
- 不指定列插入(按表结构顺序):
insert into 表名 values (值1, 值2, ...);
- 插入多条数据:
insert into 表名 (列名1, 列名2, ...) values (值1, 值2, ...), (值3, 值4, ...);
- 指定列插入:
- 查询数据:
select 列名1, 列名2, ... from 表名 where 条件;
。- 查询所有列:
select * from 表名;
,如select * from users;
- 条件查询:
select * from users where age > 18;
- 去重查询:
select distinct 列名 from 表名;
- 排序查询:升序
select * from 表名 order by 列名 asc;
,降序select * from 表名 order by 列名 desc;
- 限制结果行数:
select * from 表名 limit 行数;
,如select * from users limit 5;
,获取前 5 条记录。 - 分页查询:
select * from 表名 limit 偏移量, 行数;
,比如select * from users limit 10, 5;
,获取从第 11 条开始的 5 条记录 。
- 查询所有列:
- 更新数据:
update 表名 set 列名1 = 值1, 列名2 = 值2, ... where 条件;
,例如update users set age = 20 where name = 'John';
- 删除数据:
delete from 表名 where 条件;
,如delete from users where age < 18;
,若不加where
条件会删除表中所有数据。
用户与权限管理
- 创建用户:
create user '用户名'@'主机地址' identified by '密码';
,比如create user 'testuser'@'localhost' identified by 'testpass';
- 授予权限:
grant 权限列表 on 数据库名.表名 to '用户名'@'主机地址';
,例如grant all privileges on testdb.* to 'testuser'@'localhost';
(赋予用户对 testdb 数据库所有表的所有权限)。 - 查看用户权限:
show grants for '用户名'@'主机地址';
- 撤销权限:
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机地址';
- 删除用户:
drop user '用户名'@'主机地址';
数据备份与恢复
- 备份数据库:
mysqldump -u用户名 -p 数据库名 > 备份文件名.sql
,例如mysqldump -u root -p testdb > testdb_backup.sql
- 恢复数据库:先创建空数据库,再执行
mysql -u用户名 -p 数据库名 < 备份文件名.sql
。 如mysql -u root -p testdb < testdb_backup.sql
。