MySQL新建用户授权,建表分区

本文介绍了在MySQL数据库中如何创建用户并设置权限,特别是针对特定表的查询权限。在5.7.36版本中,需要注意授权的细节以避免赋予用户超出预期的权限。同时,讨论了数据库分区的优势,如提升查询效率,并展示了如何创建和调整分区,以及清理和删除分区的操作。这些技巧对于优化数据库性能和管理至关重要。

创建新的用户,密码永不过期:

CREATE USER market668@`` IDENTIFIED BY 'market886' PASSWORD EXPIRE NEVER;

给用户授权,可以查询某一个表:

GRANT Select ON tourism.* TO market668@``;
GRANT Select ON TABLE tourism.cell TO market668@``;

说明:

在数据库版本5.7.36中,本意是想授权用户只能查询cell表,对其他表没有任何权限,仅仅使用第二条命令是无效的,必须添加第一条命令。结果因为第一条命令的存在,该用户能查询该数据库下所有表。

在数据库版本8以上中,本意是想授权用户只能查询cell表,仅仅使用第二天命令就能达成。

所以,在低版本的数据库中,如果想给用户设置某些表的查询权限,设置之后需要多方面做下验证。

取消授权:

REVOKE Select ON TABLE tourism.cell FROM market668@``;

MySQL使用分区的好处,可以把一些归类的数据放在一个分区中,可以减少服务器检查数据的数量加快查询

在创建表时添加分区:

CREATE TABLE CRT(
    ID VARCHAR(32) NOT NULL,
    CELL_ID VARCHAR(15) NULL,
    YEAR INT(11) NOT NULL,
    MONTH INT(11) NOT NULL,
    DAY INT(11) NULL,
    TIME INT NULL,
    MINUTE INT(11) NOT NULL,
    QUANTITY INT(11) NULL,
    PRIMARY KEY(ID, YEAR, MONTH)
) PARTITION BY RANGE COLUMNS(YEAR, MONTH) PARTITIONS 2(
    PARTITION P202205 VALUES LESS THAN(2022, 6),
    PARTITION P202206 VALUES LESS THAN(2022, 7));

建表之后调整分区:

ALTER TABLE CRT
PARTITION BY RANGE COLUMNS (YEAR, MONTH) (
	PARTITION p202301 VALUES LESS THAN (2023, 2),
	PARTITION p202302 VALUES LESS THAN (2023, 3),
	PARTITION p202303 VALUES LESS THAN (2023, 4),
	PARTITION p202304 VALUES LESS THAN (2023, 5)	
);
ALTER TABLE CRT
	ADD PARTITION (PARTITION p202305 VALUES LESS THAN (2023, 6));

我们大家都知道MySQL数据库分区属于一种物理的数据库相关设计技术,DBA与MySQL数据库相关人员对其可以说是相当的熟悉。虽然实现分区技术有很多种,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。 

对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据。相反地,在某些情况下,添加新数据的过程又可以通过为那些新数据专门增加一个新的分区,来很方便地实现。

清理分区数据为空,保留分区不删除,仅仅是清理数据:

ALTER TABLE CRT TRUNCATE PARTITION 202205;

删除分区:

ALTER TABLE CRT DROP PARTITION 202205;

### 增加基于月份的分区MySQL 中,可以使用 `RANGE` 或者 `LIST COLUMNS` 的方式来创建基于日期列(通常是时间戳或者日期类型的列)的分区。以下是具体的实现方法: #### 创建带月分区的表 如果要为一张新表设置基于月份的分区,可以在表语句中指定分区策略。例如,假设有一张记录日志的表 `log_table`,其中有一个名为 `create_time` 的字段表示每条记录的时间戳。 ```sql CREATE TABLE log_table ( id INT NOT NULL AUTO_INCREMENT, message TEXT, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id, create_time) -- 主键必须包含分区键 ) PARTITION BY RANGE (TO_DAYS(create_time)) ( PARTITION p2023_01 VALUES LESS THAN (TO_DAYS('2023-02-01')), PARTITION p2023_02 VALUES LESS THAN (TO_DAYS('2023-03-01')), PARTITION p2023_03 VALUES LESS THAN (TO_DAYS('2023-04-01')) ); ``` 此示例中的 `TO_DAYS()` 函数用于将日期转换成天数以便于范围划分[^1]。 #### 对现有表添加月分区 如果已经存在一张表而希望为其添加基于月份的分区,则需要先将其导出到一个新的带有分区定义的新表中。具体过程如下: 1. **备份原始数据** 首先确保当前的数据被安全保存下来。 2. **重新创建支持分区结构的新表** 使用类似于上述的方法构新的分区表。 3. **迁移旧数据至新表** 将原表中的所有数据导入新建好的分区表里。 4. **替换原有表名** 当确认无误之后,可以用新表替代原来的表名称。 需要注意的是,在某些情况下可能还需要调整应用层面对应逻辑以适应这种变化[^3]。 另外值得注意的一点是关于索引方面的问题。当采用分区技术时,每一个单独的子分区都会维护自己独立的一套次级索引体系;因此即使总体上看似乎增加了额外开销但实际上由于查询通常只涉及部分而非全部分区内存从而提高了检索效率[^1]。 最后提醒一点就是尽量避免直接修改已存在的大型生产环境下的数据库对象除非绝对必要并且经过充分测试验证可行后再行动以免造成不可预料后果影响业务正常运行状态[^4]。 ```sql -- 示例:向已有表添加分区功能前需重表 ALTER TABLE existing_log_table RENAME TO old_existing_log_table; CREATE TABLE new_log_table LIKE old_existing_log_table; ALTER TABLE new_log_table ADD PRIMARY KEY(id, create_time); INSERT INTO new_log_table SELECT * FROM old_existing_log_table ORDER BY create_time; RENAME TABLE existing_log_table TO backup_log_table, new_log_table TO existing_log_table; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

链诸葛

真爱了。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值