MySQL笔记

什么是mysql,为什么要安装MySQL,如何连接MySQL数据库?

MySQL笔记

MySQL是一种流行的关系型数据库管理系统(RDBMS),使用SQL(Structured Query Language)语言进行数据存储和检索,是用于Web应用程序开发的常用数据库之一。安装MySQL可以使开发者在本地计算机中创建数据库和数据表,从而进行本地开发和测试。此外,MySQL也作为Web服务器上的数据库解决方案,在生产环境中大量应用。

连接MySQL数据库需要以下步骤:

  1. 安装并打开MySQL数据库
  2. 使用MySQL的默认用户“root”登录MySQL数据库
  3. 在MySQL控制台输入以下命令创建一个新用户,并授予该用户访问和管理数据库的权限:
    CREATE USER '新用户名'@'localhost' IDENTIFIED BY '密码'; 
    GRANT ALL PRIVILEGES ON *.* TO '新用户名'@'localhost';
  4. 在应用程序中,使用数据库连接工具(如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';

其中 usernamepassword 分别是要创建的用户名和密码。

修改用户密码:

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;

给TA打赏
共{{data.count}}人
人已打赏
编程专区

Linux安装Nginx

2023-4-26 17:34:00

编程专区

运维攻城狮笔记

2023-5-30 8:59:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索