【database】 数据库初探 - mysql数据库

        今天开启开发中的一个很深也很重要的坑 - 数据库,java开发中最常使用的数据库就是关系型数据库,而关系型数据库中使用最多的一款数据库就是MySQL数据库,今天就对此做一个初步的梳理了解。

一、数据库

1.1、什么是数据库?

        数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。在开发中,主要是由后端跟数据库进行交互,是数据持久化(术语:即将数据存储在硬盘上)的一种重要的形式,比如系统的用户名和密码就需要存储持久化存储,数据库可以满足这一要求。

1.2、为什么叫关系型数据库

        关系型是指数据的存储结构,数据库中的每一个表是一个实体(或一个对象),表与表之间存在某种或几种关系,以医院管理系统为例,数据库中可能有医生表、药品表、处方表、患者表等,而它们之间的关系可以表示为:医生给某一患者开的药方上有某种或几种药品,这种关系可以通过主键和外键(术语:数据库中表示关系的一种常用的方法)进行关联。

1.3、还有什么类型的数据库?

        非关系型:代表为MongoDB,数据以json文件形式存储,适合业务更灵活的场景。

        内存数据库:使用时数据存在内存中,速度快于磁盘,适用于特定的业务场景,代表为Memcached、Redis

        时间序列数据库:常在监控系统使用,现在大名鼎鼎的prometheus即使用这种数据库

       混合数据库:随着大数据的兴起,数据仓库这一概念逐渐落地,混合列和行数据库的混合型数据库在一些场景下开始使用。

1.4、数据库管理工具

        在实际使用中,一般都是用管理工具连接数据库进行操作,可以做到可视化的方式连接数据库,提高开发人员的开发效率。常用的工具有:MySQL Workbench和Navicat。

二、MySQL数据库

        MySQL是关系型数据库的代表,其最大的特点就是免费和学习资源丰富,不但可以用于学习和模拟,还被各行各业应用在具体的生产活动中,下面就对MySQL做一简单但干货满满的简介。

2.1、常见术语

        数据库:表的集合。

        表:数据的存储矩阵,表的格式跟excel类似,可以看作是一个java对象。

        列:列数据可以看作是java对象中的某一个属性,一列数据是同种类型数据的和。

        行:一行可以看做是一个对象的实例,比如医生表中的一行数据可以代表一名医生。

        主键:一个表中只能有一个主键,主键是唯一的。

        外键:外键用于关联两个表。

        索引:使用索引可以更快速的访问数据库中的特定信息,类似于书籍中的目录。

2.2、MySQL管理

        数据库在计算机上安装成功后,需要进行相应的启动、关闭、创建新账号等管理工作。

        2.2.1、windows下管理

                服务启动:net start mysql

                服务关闭:net stop mysql

        2.2.2、linux下管理

                服务启动:sudo systenctl start mysql / sudo service mysql start

                服务关闭:sudo systemctl stop mysql / sudp service mysql stop

                服务重启:sudo systemctl restart mysql / sudo service mysql resart

                状态检查:sudo systemctl status mysql / sudo service mysql status

                创建用户:

                        CREATE USER 'username'@'host' IDENTIFIED BY 'password';

                        # Username:用户名

                        # Host:指定用户可以从哪些主机连接(localhost:只能用本地连接,%可以任何主机连接)

                        # Password:密码

                授权权限:

                        GRANT privileges ON database_name.* TO 'username'@'host';

                        # Privileges:可以授权的权限(all rivileges、select、insert、update、delete等)

                  # Database_name.*:表示对某个数据库或表授权。(.*表示对整个数据库都授权,.table_name表示对指定表授权)

                        # TO 'username'@'host':指定授予权限的用户和主机

                刷新权限:

                        FLUSH PRIVILEGES;

                查看用户权限:

                        SHOW GRANTS FOR 'username'@'host';

                撤销权限:

                        REVOKE ALL PRIVILEGES ON test_db.* FROM 'john'@'localhost';

                删除用户:

                        DROP USER 'username'@'host';

                修改用户密码:

                        ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';

                配置文件:

                /etc/my.cnf

                基本设置:

                        basedir: MySQL 服务器的基本安装目录。

                        datadir: 存储 MySQL 数据文件的位置。

                        socket: MySQL 服务器的 Unix 套接字文件路径。

                        pid-file: 存储当前运行的 MySQL 服务器进程 ID 的文件路径。

                        port: MySQL 服务器监听的端口号,默认是 3306。

                服务器选项:

                        bind-address: 指定 MySQL 服务器监听的 IP 地址,可以是 IP 地址或主机名。

                        server-id: 在复制配置中,为每个 MySQL 服务器设置一个唯一的标识符。

                        default-storage-engine: 默认的存储引擎,例如 InnoDB 或 MyISAM。

                        max_connections: 服务器可以同时维持的最大连接数。

                        thread_cache_size: 线程缓存的大小,用于提高新连接的启动速度。

                        query_cache_size: 查询缓存的大小,用于提高相同查询的效率。

                        default-character-set: 默认的字符集。

                        collation-server: 服务器的默认排序规则。

                性能调优:

                        innodb_buffer_pool_size: InnoDB 存储引擎的缓冲池大小,这是 InnoDB 性能调优中最重要的参数之一。

                        key_buffer_size: MyISAM 存储引擎的键缓冲区大小。

                        table_open_cache: 可以同时打开的表的缓存数量。

                        thread_concurrency: 允许同时运行的线程数。

                安全设置:

                        skip-networking: 禁止 MySQL 服务器监听网络连接,仅允许本地连接。

                        skip-grant-tables: 以无需密码的方式启动 MySQL 服务器,通常用于恢复忘记的 root 密码,但这是一个安全风险。

                        auth_native_password=1: 启用 MySQL 5.7 及以上版本的原生密码认证。

                日志设置:

                        log_error: 错误日志文件的路径。

                        general_log: 记录所有客户端连接和查询的日志。

                        slow_query_log: 记录执行时间超过特定阈值的慢查询。

                        log_queries_not_using_indexes: 记录未使用索引的查询。

                复制设置:

                        master_host 和 master_user: 主服务器的地址和复制用户。

                        master_password: 复制用户的密码。

                        master_log_file 和 master_log_pos: 用于复制的日志文件和位置。

                常用的MySQL命令:

                        Use database_name;  #选择要操作的数据库名称

                        Show databases;  #列出全部数据库

                        Show tables;  #显示数据库中所有的表

                        Show columns from table_name;  #显示数据库的属性、属性类型、主键信息等

                        Show INDEX from table_name;  #显示表的索引信息

                        Show table status from database_name; #显示数据库的所有表的信息及性能

        2.3、mysql操作

                连接数据库:mysql -u username -p # -u用于指定用户名,-p表示后续需要输入密码

在命令行中输入命令后,系统提示输入:password:,回车后如果登录成功会光标会变为“mysql>”

                退出数据库客户端:使用exit或quit,必须以;结尾

        2.4、常用语句

        在分享语句之前,首先分享下数据库对语句的一个分类,一般分成DDL、DML、DCL和TCL四种:

        DDL(Data Definition Languages):数据定义语句,用来创建数据库中的表、索引、视图、存储过程和触发器等,常用的包括CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME。

       DML(Data Manipulation Language):数据操作语句,用来查询、添加、更新、删除等,SELECT,INSERT,UPDATE,DELETE,MERGE,CALL,EXPLAIN PLAN,LOCK TABLE,包括通用性的增删改查。

       DCL(Data Control Language):数据控制语句,用于授权/撤销数据库及其字段的权限,GRANT,REVOKE。

        TCL(Transaction Control Language):事务控制语句,用于控制事务,常用的语句关键字有:COMMIT,ROLLBACK,SAVEPOINT,SET TRANSACTION。

        2.4.1、语句:

                创建数据库:CREATE DATABASE 数据库名;

                删除数据库

                        mysql> DROP DATABASE 数据库名; -- 直接删除数据库,不检查是否存在

                                     DROP DATABASE IF EXISTS 数据库名; -- 删除数据库,如果存在的话

                创建表

                1、不带任何要求的最普通方式:

                                CREATE TABLE table_name (

                                            column1 datatype,

                                            column2 datatype,

                                             ...

                                );

                                # table_name 是你要创建的表的名称。

                                # column1, column2, ... 是表中的列名。

                                # datatype 是每个列的数据类型。

                2. 生产情况:

                        需要对指定一些参数,一般是放在CREATE TABLE语句括号的最后,一般的配置如下:

ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='表的整体注释,一般对表的含义做出说明';

                插入数据

                        INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);

                        # table_name 是你要插入数据的表的名称。

                        # column1, column2, column3, ... 是表中的列名。

                        # value1, value2, value3, ... 是要插入的具体数值。

                查询数据

                        SELECT column1, column2, ...

                        FROM table_name

                        [WHERE condition]

                        [ORDER BY column_name [ASC | DESC]]

                        [LIMIT number];

                        上述案例中带有最常用的筛选条件:列条件筛选、排序和返回有限的数据

                        # column1, column2, ... 是你想要选择的列的名称,如果使用 * 表示选择所有列。

                        # table_name 是你要从中查询数据的表的名称。

                        # WHERE condition 是一个可选的子句,用于指定过滤条件,只返回符合条件的行。

                        # ORDER BY column_name [ASC | DESC] 是一个可选的子句,用于指定结果集的排序顺序,默认是升序(ASC)。

                        # LIMIT number 是一个可选的子句,用于限制返回的行数。

三、总结

        本文对数据库概念和一些最常见的命令进行了梳理,对自己也是一次复习,也希望能帮助到屏幕前的你,感谢阅读。

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值