1.什么是Mysql:
MySQL是一种开源的关系型数据库管理系统(RDBMS),它是最流行的数据库之一。MySQL使用结构化查询语言(SQL)来管理和操作数据。它支持多用户、多线程的访问,并能够在各种操作系统上运行。
MySQL广泛应用于Web应用程序的后端,用于存储和管理大量的数据。它被许多大型网站和应用程序使用,包括Facebook、Twitter和YouTube等。
MySQL以其高性能、可靠性和易用性而闻名。它具有丰富的特性,包括索引、事务支持、视图、触发器和存储过程等。此外,MySQL还支持各种编程语言和开发工具,可方便地与其他应用程序集成。
2.数据库存储引擎:
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎。
MySQL数据库支持多种存储引擎,每个存储引擎都有不同的特点和适用场景。以下是一些常见的MySQL存储引擎:
- InnoDB:InnoDB是MySQL的默认存储引擎,它支持ACID事务,具有较好的并发性和崩溃恢复能力。它采用行级锁定,能够处理高并发的读写操作。InnoDB支持外键约束、故障恢复和崩溃恢复,并提供了较高的数据安全性和可靠性。
- MyISAM:MyISAM是MySQL的另一个常见存储引擎。它具有较快的读取速度和较小的存储空间消耗。MyISAM不支持事务和行级锁定,但适合于读操作频繁、写操作相对较少的场景,例如日志记录、数据仓库等。
存储引擎怎么看:
InnoDB和MyISAM的区别:
事务
一个是行锁定一个是表锁定
InnoDB行锁定:
InnoDB是MySQL数据库中最常用的存储引擎之一,也是默认的存储引擎。以下是关于InnoDB的一些特点:
- 支持事务处理:InnoDB存储引擎具有ACID(原子性、一致性、隔离性和持久性)特性,支持事务处理。它使用了多版本并发控制(MVCC)来实现高并发和数据一致性。
- 行级锁定:InnoDB支持行级锁定,可以避免数据冲突和死锁问题。这意味着多个事务可以同时对表中的不同行进行更改而彼此不会互相阻塞。
- 外键约束:InnoDB支持外键约束,这允许在表之间建立关联关系,并自动处理相关的数据一致性和完整性。
- 支持并发读写:InnoDB通过采用多版本并发控制(MVCC)来支持高并发的读写操作。不同的事务可以并发地读取和修改数据,而且不会相互冲突。
- 崩溃恢复能力:InnoDB具有良好的崩溃恢复能力。它使用写前日志(Write-Ahead Logging,WAL)技术来确保在数据库崩溃或意外断电时数据的一致性和完整性。
- 适用于高负载环境:InnoDB适用于处理高负载和高并发的应用程序,它通过优化索引和缓存、提供高效的数据读写方式,以及使用并发控制机制来提供高性能和可扩展性。
MyISAM表锁定:在查询方面效率更高因为它不支持事务
MyISAM是MySQL数据库中另一种常见的存储引擎。以下是关于MyISAM的一些特点:
- 不支持事务处理:与InnoDB不同,MyISAM存储引擎不支持事务处理。这意味着它无法提供原子性和数据一致性的保证。
- 表级锁定:MyISAM使用表级锁定机制,这意味着对一个表的写入操作会阻塞对该表的其他写入操作。也就是说,它不支持行级锁定,可能导致并发读写操作之间的冲突。
- 高性能读取操作:MyISAM在读取高频率的场景下具有很好的性能。由于它使用了表级锁定,读取操作不会出现锁冲突,因此在主要是读取操作的应用程序中,性能较好。
- 全文搜索支持:MyISAM提供了全文搜索的功能,可以进行文本的关键字搜索。
- 适用于只读或少量写入的应用:由于MyISAM不支持事务处理和行级锁定,它更适合只读或少量写入的应用场景。
- 例如,静态网站或报表查询等应用程序可以从MyISAM的性能优势中受益。
什么是ACID:
ACID是数据库管理系统中用于确保事务处理正确性和可靠性的关键特性。ACID是以下四个属性的缩写:
- 原子性(Atomicity):表示一个事务中的所有操作要么全部成功执行,要么全部回滚。事务是一个不可分割的工作单位,要么完全完成,要么不做任何改变。
- 一致性(Consistency):表示数据库在事务开始之前和结束之后都必须保持一致的状态。事务执行的操作必须满足预先定义的约束和规则,以确保数据库的完整性。
- 隔离性(Isolation):表示并发执行的事务之间应该彼此隔离,互相不干扰。每个事务运行时都应该像是在系统中独立运行的,即使有多个事务同时运行,也不能相互干扰。
- 持久性(Durability):表示一旦事务提交成功,所做的数据修改必须永久保存,即使在系统故障或断电等异常情况下也能够恢复到事务提交之后的状态。
ACID属性的存在确保了数据库中的事务处理的可靠性和一致性。只有满足了ACID属性,数据库才能够提供可靠的数据处理和一致的结果。
需要注意的是,ACID属性对于某些特定的数据库存储引擎或配置选项可能会有一定的限制或调整。一些存储引擎可能提供更高的并发性能或灵活性,但在某些条件下可能无法提供完全的ACID保证。因此,在选择数据库系统和存储引擎时,需要根据应用需求和数据的重要性来权衡和选择。
四种隔离级别
- 读未提交(Read Uncommitted):
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
- 读已提交(Read Committed):
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
- 可重复读(Repeatable Read):
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
- 串行化(Serializable):
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
可以使用以下语句来查看当前事务的隔离级别:
SELECT @@tx_isolation;
3.数据库授权
数据库分三类:
测试库(是你公司的):测试库是指用于进行软件测试的数据库。它是一个用于模拟真实生产环境的数据库环境,用于开发和验证软件系统的功能、性能和可靠性。
开发库(是你的):指用于软件开发过程中的数据库环境。它是开发人员在开发软件时使用的数据库,用于设计、编码和测试软件系统的功能。
生产库(客户公司的):指用于生产环境中实际运行的数据库。它是存储和管理实际业务数据的数据库,用于支持生产系统的正常运行。
用sql语句来查找用户:
查找云数据库的版本:
查看用户权限:
MySQL8:
#命令:create user 用户名 identified by '密码'; create user test01; ALTER USER 'test01'@'%' IDENTIFIED WITH mysql_native_password BY 'test01'; #MySQL8 select * from user; #5.设置权限(Grant) #语法:grant privileges on databasename.tablename to username@'host'; #给 zs用户 赋予 数据库db_xiaoli中的表t_p1_user 查询权限 grant SELECT on db_xiaoli.t_p1_user to zs@'%'; #给 zs用户 赋予 数据库db_xiaoli中的表t_p1_user 修改权限 grant UPDATE on db_xiaoli.t_p1_user to zs@'%'; #给 zs用户 赋予 数据库db_xiaoli中所有表 查询权限 grant SELECT on db_secondhandmarket.* to test01@'%'; #给 zs用户 赋予 数据库db_xiaoli中所有表 所有权限 grant ALL on db_crm.* to test01@'%'; 6.撤销权限(Revoke) #语法:revoke privileges on databasename.tablename from username@'host'; #啥也不能回收,不会对GRANT ALL PRIVILEGES ON `db_xiaoli`.* TO `zs`@`%`有任何影响 revoke DELETE on db_xiaoli.t_p1_user from zs@'%'; #可以回收GRANT SELECT, UPDATE ON `db_xiaoli`.`t_p1_user` TO `zs`@`%`这条权限语句 revoke all on db_xiaoli.t_p1_user from zs@'%'; #可以回收GRANT ALL PRIVILEGES ON `db_xiaoli`.* TO `zs`@`%`这条赋权语句带来的权限 revoke all on db_secondhandmarket.* from test01@'%'; #注:revoke只能回收grants列表中更小的权限; SELECT VERSION();