什么是mysql,为什么要安装MySQL,如何连接MySQL数据库?
MySQL是一种流行的关系型数据库管理系统(RDBMS),使用SQL(Structured Query Language)语言进行数据存储和检索,是用于Web应用程序开发的常用数据库之一。安装MySQL可以使开发者在本地计算机中创建数据库和数据表,从而进行本地开发和测试。此外,MySQL也作为Web服务器上的数据库解决方案,在生产环境中大量应用。
连接MySQL数据库需要以下步骤:
- 安装并打开MySQL数据库
- 使用MySQL的默认用户“root”登录MySQL数据库
- 在MySQL控制台输入以下命令创建一个新用户,并授予该用户访问和管理数据库的权限:
CREATE USER '新用户名'@'localhost' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO '新用户名'@'localhost';
- 在应用程序中,使用数据库连接工具(如JDBC)连接MySQL数据库,提供新用户的用户名和密码等数据库连接信息即可。
MySQL主从复制
MySQL主从复制是一种数据库复制技术,其中一个主服务器将其更改记录传输给另一个或多个从服务器。
主服务器上的更改在从服务器上自动重放,以使从服务器上的数据保持与主服务器上的数据同步。
这种复制方法可以提供高可用性、故障转移和读取负载均衡等优点。
主从复制的原理是通过二进制日志(binlog)来实现,主服务器把每一次写入操作都记录在binlog里,
并且把包含这些写入操作的binlog文件传递给从服务器,从服务器则根据binlog文件里的指令进行读取和执行,
从而达到与主服务器数据一致的效果。
主从复制的应用场景包括:
数据备份:可以将主服务器作为数据源,将数据复制到从服务器上,以便再发生故障时恢复数据。
负载均衡:可以将读请求分发到不同的从服务器上,从而减轻主服务器的负载。
高可用性/故障转移:当主服务器故障时,可以快速地将从服务器提升为主服务器,从而实现高可用性和故障转移。
数据库方面
什么是mysql,特点,优势
MySQL 是一种关系型数据库管理系统 (RDBMS),用于存储和管理应用程序中的数据。以下是 MySQL 的主要特点和优势:
- 开源免费:MySQL 是一个开源软件,可以免费使用,并且提供了完整的源代码。
- 跨平台支持:MySQL 可以在多种操作系统上运行,例如 Windows、Linux、macOS 等等。
- 高性能:MySQL 能够高效地处理大规模数据,具有较快的查询速度和高并发能力。
- 可扩展性强:MySQL 支持水平扩展和垂直扩展,能够轻松地满足日益增长的数据量和访问量需求。
- 安全性高:MySQL 提供了各种安全措施来保护数据不受攻击和误操作的影响,如权限管理、加密传输等。
- 易用性好:MySQL 具有良好的用户界面和易用的 API,使得开发人员可以轻松地创建和管理数据库和表。
由于其稳定性、性能和可靠性等方面的优势,MySQL 已成为最流行的开源关系型数据库之一,并被广泛应用于各种 Web 应用程序、企业应用程序和科学研究领域。
mysql数据库常用命令
启动/关闭 MySQL 服务:
sudo service mysql start
sudo service mysql stop
登录并连接到 MySQL 数据库:
mysql -u username -p
其中 username
是你的数据库用户名。系统会提示你输入该用户的密码,输入密码后回车即可登录。如果你是在本地连接 MySQL,可以省略 -h
参数。
备份 MySQL 数据库:
mysqldump -u username -p databasename > backupfile.sql
其中 username
是数据库用户名,databasename
是要备份的数据库名称,backupfile.sql
是备份数据库的文件名。该命令将把整个数据库导出为一个 SQL 脚本,保存到指定文件中。
还原 MySQL 数据库:
mysql -u username -p databasename < backupfile.sql
其中 username
是数据库用户名,databasename
是要还原的数据库名称,backupfile.sql
是包含数据库备份内容的 SQL 脚本文件名。该命令将执行 SQL 脚本中的命令,创建或更新数据库和表,并导入备份数据。
执行 SQL 脚本:
mysql -u username -p databasename < scriptfile.sql
其中 username
是数据库用户名,databasename
是要执行脚本的数据库名称,scriptfile.sql
是包含 SQL 命令的脚本文件名。该命令将按顺序执行脚本中的每个 SQL 命令。
mysql常用sql语句
建库/删库:
创建数据库:
CREATE DATABASE dbname;
删除数据库:
DROP DATABASE dbname;
建表/删表:
创建表:
CREATE TABLE tablename (
column1 datatype,
column2 datatype,
...
);
删除表:
DROP TABLE tablename;
增删改查SQL:
插入数据:
INSERT INTO tablename (column1, column2, ...) VALUES (value1, value2, ...);
更新数据:
UPDATE tablename SET column1 = new_value1 WHERE condition;
删除数据:
DELETE FROM tablename WHERE condition;
查询数据:
SELECT * FROM tablename;
SELECT column1, column2, ... FROM tablename WHERE condition ORDER BY column1 ASC;
修改表结构:
添加列:
ALTER TABLE tablename ADD COLUMN column_name datatype;
重命名列:
ALTER TABLE tablename RENAME COLUMN old_column_name TO new_column_name;
删除列:
ALTER TABLE tablename DROP COLUMN column_name;
创建,修改,删除,查看索引:
创建索引:
CREATE INDEX index_name ON tablename (column_name);
删除索引:
DROP INDEX index_name ON tablename;
查看索引:
SHOW INDEXES FROM tablename;
创建用户:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
其中 username
和 password
分别是要创建的用户名和密码。
修改用户密码:
SET PASSWORD FOR 'username'@'localhost' = PASSWORD('newpassword');
分配权限:
GRANT permission1, permission2, ... ON databasename.tablename TO 'username'@'localhost';
其中 permission1
, permission2
等是要授予的权限,例如 SELECT
, INSERT
, UPDATE
等。databasename.tablename
是授权的数据库表的名称。
数据库事务
数据库事务是一组操作,这些操作被视为单个逻辑单元并且要么全部成功执行,要么全部取消。
以下是数据库事务的概念、特征和事务隔离级别:
概念:
- 事务是一组关联的数据库操作,它们需要作为一个整体来执行。
- 事务必须满足 ACID 原则:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
- 事务可以使用 COMMIT 提交,也可以使用 ROLLBACK 回滚,以确保数据的完整性和正确性。
特征:
- 原子性:事务中的所有操作要么全部成功地完成,要么全部取消。如果一个操作失败,则整个事务会回滚到原始状态。
- 一致性:执行事务后,数据库必须处于一致状态。这意味着,事务必须遵守数据库的约束和规则,以确保数据的正确性和完整性。
- 隔离性:每个事务都应该是相互独立的,即使同时有多个事务在运行时也不应该互相干扰或影响。
- 持久性:一旦事务提交,它对数据库所做的更改就应该是永久性的,并且即使系统故障或崩溃也应该能够恢复数据。
事务隔离级别:
- 读未提交(Read Uncommitted):在一个事务中,可以读取到其他事务未提交的数据。这是最低级别的隔离级别。
- 读已提交(Read Committed):在一个事务中,只有在其他事务提交后才能读取数据。这可以防止脏读,但不会防止非重复读和幻象读。
- 可重复读(Repeatable Read):在一个事务中,可以多次读取相同的数据,并且不受其他事务的影响。这可以防止脏读和非重复读,但不会防止幻象读。
- 序列化(Serializable):所有事务都按顺序运行,就像在单个线程中一样。这是最高级别的隔离级别,可以防止脏读、非重复读和幻象读。
MySQL常用语句
1.登录mysql数据库
mysql -u root -p
2.显示mysql数据库管理系统下的所有数据库
show databases;
3.创建一个数据库
create database 数据库名字 charset 'utf8mb4';
4.切换数据库
use 数据库名字;
5.创建表
create table 表名(
字段1 类型 约束,
字段2 类型 约束
...
);
create tables student(
id int primary key auto_increment,
name varchar(128),
age int
);
6.删除数据库
drop 数据库名字;
7.删除表
drop table 表名;
8.修改表结构
# 修改表名
alter table 旧表名 rename to 新表名;
alter table student rename to student2;
# 修改表字段名
alter table 表名 change 旧字段名 新字段名 类型;
alter table student change name stu_name varchar(128);
# 修改表字段类型
alter table 表名 modify 字段名 新类型;
alter table student modify name char(128);
# 添加新字段
alter table 表名 add 字段名 类型;
alter table student add sex char(4);
# 删除字段
alter table 表名 drop 字段名;
alter table student drop sex;
9.展示当前数据库下所有表
show tables;
10.显示某个表的所有字段
desc 表名;
SQL语句的分类:
- DDL:数据定义语言,create,drop,alter
- DML:数据操作语言,insert,delete,update
- DQL:数据查询语言,select,show
11.增删改
# 向表中插入数据
insert into 表名(指定字段)value(每个字段对应的值);
insert into student(name,sex)value('张三','男');
insert into student(name,sex)values('张三','男'),('李四','女');
# 删除数据
delete from 表名 where 条件; 注意:where条件必须有
delete from student where id = 1;
# 修改数据
update 表名 set 字段=值,字段2=值2..where 条件;
update student set age=age+1 where id = 2;
12.数据查询
# 简单的查询
select 指定字段 from 表名 [where 条件 order by 字段];
select * from student;
select id,name,age from student where classid = 1;
# 排序
select id,name,age from student where classid = 1 order by age desc;
# 排除重复记录
select distinct classid from student;
# 限制返回行数
select * from employee order by birthday limit 10;
# 聚合函数max最大,min最小,count计数,sum求和,avg求平均
select max(birthday) from employee;
select min(birthday) from employee;
select count(*) from employee;
select sum(score) from score where studentid = 2 and subjectId = 1;
select avg(score) from score where studentid = 2 and subjectId = 1;
# 分组统计(按照指定字段进行分组,该字段值一致时一致的会作为一组)
# 分组统计每个部门的人数
select departmentId,count(*) from employee group by departmentId;
# 对分组结果再进行筛选,使用having子句
select departmentId,count(*) from employee group by departmentId
having count(*) > 200;
13.联表查询
# 查询每个员工的信息及其对应的部门信息
select e.id,e.name,d.name from employee e, department d where e.departmentid = d.id;
# 内连接方式实现
select e.id,e.name,d.name from employee e inner join department d on e.departmentid = d.id;
# 左外连接,左表为主表,结果包含左表中全部数据,右表与左表相匹配数据
select e.id,e.name,d.name from employee e left join department d on e.departmentid = d.id;