Mysql_DML

关键字

insert 插入 update 修改 delete 删除 truncate 清空

一、数据插入

方式一:指定列

     insert into
	 mydb1(1,2...) values(1,2...),
						  (1,2...),
						  (1,2...);
	--例:
	insert into 
	mydb1 (`gradeid`,`gradename`) values('11114','小七')values('11115','大七')

方式二:默认所有列

	insert into 
	mydb1 values(1,2...),
				 (1,2...);
	--例:
	insert into 
	emp1 values(1,'wanli','2022-12-12',4000)(2,'wanli2','2022-12-13',5000)

二、数据修改

--将id为1004的学生地址修改为北京
	update stu 
	set address = '北京'
	where sid = 1004;

首先,在updata子句中指明要更新的表。
其次,在SET子句中指定要修改的列。 SET子句中未列出的列的值不会被修改。
第三,指定WHERE子句中要更新的行。

三、数据删除

//删除sid为1003的学生
delete from stu where sid=1003;
--删除stu表
delete from stu;

--清空表数据,(先删除,在创建)
truncate table stu;
truncate stu;
<think> 我们被要求解释几个MySQL系统变量或配置项。这些配置项通常出现在MySQL的配置文件(如my.cnf)或通过SET命令设置。下面是对每个术语的详细解释: 1. **rds_internal_schema_dml_control** - 这是阿里云RDS(Relational Database Service)MySQL特有的一个配置项。 - 用于控制是否允许对RDS内部库(如`mysql`、`information_schema`、`performance_schema`和`sys`)执行DML操作(INSERT/UPDATE/DELETE)。 - 默认情况下,RDS禁止用户直接修改系统库的数据,以保障系统稳定性。 - 可以设置为0(禁止)或1(允许)。但强烈建议不要开启,除非有特殊需求并由阿里云技术支持指导。 2. **skip_name_resolve** - 这是MySQL服务器的一个配置选项。 - 当设置为ON时,MySQL在授权(grant tables)中只使用IP地址,而不使用主机名(hostname)进行连接验证。 - 优点:避免DNS解析带来的延迟和故障(特别是在DNS服务器不可靠时),提高连接速度。 - 缺点:必须在授权中使用IP地址而不是主机名。 - 通常建议在生产环境中开启,除非你依赖主机名进行权限管理。 3. **skip_show_database** - 这也是MySQL服务器的一个配置选项。 - 当设置为ON时,普通用户(没有SHOW DATABASES权限)无法执行`SHOW DATABASES`命令。只有拥有该权限的用户(如root)才能执行。 - 增强安全性,避免普通用户看到所有数据库名。 - 默认情况下,该选项是关闭的(OFF)。 4. **threadpool_stall_limit** - 这是MySQL企业版线程池插件(Thread Pool Plugin)的一个参数。 - 用于定义线程池中一个任务(statement)执行多长时间(单位为毫秒)被认为是“停滞”(stall),从而触发线程池分配一个新的工作线程来处理后续任务。 - 默认值通常是500毫秒(0.5秒)。 - 调整这个值可以优化高并发下的性能:值设置过小可能导致线程创建过于频繁;设置过大可能导致线程不能及时处理新请求。 下面我们分别用配置文件和动态设置的方式展示这些参数: ### 配置文件设置(my.cnf) ```ini [mysqld] # 阿里云RDS特有参数(通常RDS控制台设置,这里仅为示例) # rds_internal_schema_dml_control = 0 # 通常不在配置文件中直接设置,而是通过RDS控制台参数设置 # 跳过域名解析 skip_name_resolve = ON # 禁止普通用户SHOW DATABASES skip_show_database = ON # 线程池停滞时间限制(仅当使用线程池插件时有效) threadpool_stall_limit = 500 ``` ### 动态设置(需要相应权限) ```sql -- 注意:有些变量是只读的,只能在启动时设置(如skip_show_database) -- 动态设置skip_name_resolve(需要重启,因为它是只读的) -- 但可以通过SET命令设置会话或全局变量(如果允许) -- 设置skip_name_resolve(只读变量,只能在配置文件中设置然后重启) -- 设置skip_show_database(同样只读,需要重启) -- 对于threadpool_stall_limit,如果是动态变量,可以设置: SET GLOBAL threadpool_stall_limit = 500; ``` ### 详细解释: - **rds_internal_schema_dml_control**:阿里云RDS出于安全考虑,默认禁止用户修改系统库。如果需要修改,可以在RDS控制台的参数配置中设置,但需谨慎。 - **skip_name_resolve**:如果开启,则授权中必须使用IP地址。例如,创建用户时: ```sql CREATE USER 'user'@'192.168.1.1' IDENTIFIED BY 'password'; ``` 而不是 ```sql CREATE USER 'user'@'example.com' IDENTIFIED BY 'password'; ``` - **skip_show_database**:开启后,普通用户执行`SHOW DATABASES`只会看到他们有权限的数据库,但如果用户没有SHOW DATABASES权限,则什么也看不到。 - **threadpool_stall_limit**:这个参数只在启用了线程池插件时有效。线程池插件是为了在高并发下减少线程创建和销毁的开销。当一个任务执行时间超过这个阈值,线程池会认为这个线程被“停滞”了,从而分配新的线程来处理新请求。 ### 相关参数查询 可以通过以下命令查看这些变量的当前值: ```sql SHOW VARIABLES LIKE 'rds_internal_schema_dml_control'; -- 如果存在的话 SHOW VARIABLES LIKE 'skip_name_resolve'; SHOW VARIABLES LIKE 'skip_show_database'; SHOW VARIABLES LIKE 'threadpool_stall_limit'; ``` ### 注意事项 1. 修改只读系统变量(如`skip_name_resolve`和`skip_show_database`)需要修改配置文件并重启MySQL。 2. 阿里云RDS的参数修改通常通过控制台或API完成,有些参数可能不允许修改。 §§相关问题§§: 1. 如何查看MySQL中所有只读的系统变量? 2. MySQL线程池插件的工作原理是什么? 3. 在阿里云RDS中如何修改系统参数? 4. 开启`skip_name_resolve`后,对MySQL用户授权有什么影响? </think> ### MySQL 配置参数详解 下面我将详细解释您提到的四个 MySQL 配置参数,包括它们的作用、适用场景和配置建议: --- #### 1. **`rds_internal_schema_dml_control`** (阿里云 RDS 特有参数) **作用**: 控制是否允许对 MySQL 内部系统执行 DML(INSERT/UPDATE/DELETE)操作 **配置值**: - `0`:禁止修改系统(默认安全设置) - `1`:允许修改系统 **使用场景**: ```sql -- 查看当前配置 SHOW VARIABLES LIKE 'rds_internal_schema_dml_control'; -- 启用系统修改(需要高级权限) SET GLOBAL rds_internal_schema_dml_control = 1; ``` **注意事项**: - **仅限阿里云 RDS 环境** - 修改系统可能导致数据库不稳定或崩溃 - 生产环境强烈建议保持默认值 `0` - 如需修改系统,建议先在测试环境操作 --- #### 2. **`skip_name_resolve`** (网络连接优化) **作用**: 跳过 DNS 主机名解析,仅使用 IP 地址验证连接 **配置值**: - `ON`:启用(推荐) - `OFF`:禁用 **优化原理**: ```mermaid graph LR A[客户端连接] --> B{skip_name_resolve=ON?} B -->|是| C[直接IP验证] B -->|否| D[DNS查询] D --> E[可能延迟或失败] C --> F[更快建立连接] ``` **配置建议**: ```ini # my.cnf 配置 [mysqld] skip_name_resolve = ON ``` **注意事项**: - 启用后授权必须使用 IP 地址而非主机名 - 避免在连接字符串中使用主机名 - 可减少 DNS 故障导致的连接问题 - 提升连接建立速度(约 30-50ms) --- #### 3. **`skip_show_database`** (安全增强) **作用**: 限制普通用户执行 `SHOW DATABASES` 命令 **配置值**: - `ON`:仅特权用户可见所有数据库 - `OFF`:所有用户可见(默认) **安全效果**: ```sql -- 普通用户执行 SHOW DATABASES; -- 结果:仅显示有权限的数据库 -- 特权用户执行 SHOW DATABASES; -- 结果:显示所有数据库 ``` **配置建议**: ```ini # my.cnf 配置 [mysqld] skip_show_database = ON ``` **适用场景**: - 多租户环境 - 需要隐藏系统数据库 - 符合安全合规要求(如等保) --- #### 4. **`threadpool_stall_limit`** (线程池优化) **作用**: 设置线程被认定为"停滞"的时间阈值(毫秒) **默认值**:`500` (0.5秒) **工作流程**: ```python def thread_monitor(): while True: for thread in thread_pool: if thread.exec_time > stall_limit: mark_as_stalled(thread) create_new_thread() # 创建新线程处理新请求 ``` **优化建议**: ```ini # my.cnf 配置 [mysqld] # 高负载OLTP系统建议 threadpool_stall_limit = 100 # 100ms # 分析型系统建议 threadpool_stall_limit = 1000 # 1s ``` **调整原则**: | 场景 | 推荐值 | 说明 | |---------------------|---------|----------------------------| | OLTP 高频短查询 | 50-100 | 快速响应新请求 | | OLAP 长查询 | 500-1000| 避免过度创建线程 | | 混合负载 | 200-500 | 平衡点 | | CPU 密集型 | 较高值 | 减少线程切换开销 | --- ### 配置最佳实践 1. **阿里云 RDS 环境**: ```bash # 通过阿里云控制台修改参数 rds_modify_parameter --name skip_name_resolve --value ON rds_modify_parameter --name skip_show_database --value ON ``` 2. **自建 MySQL 配置**: ```ini # /etc/my.cnf [mysqld] skip_name_resolve = ON skip_show_database = ON threadpool_stall_limit = 200 # 线程池插件启用 plugin-load = thread_pool.so thread_handling = pool-of-threads ``` 3. **状态监控命令**: ```sql -- 查看线程池状态 SHOW STATUS LIKE 'thread_pool%'; -- 查看停滞线程 SELECT * FROM performance_schema.threads WHERE PROCESSLIST_STATE = 'Waiting for work' AND PROCESSLIST_TIME > @@threadpool_stall_limit; ``` --- ### 参数间协作关系 ```mermaid graph TD A[客户端连接] --> B{skip_name_resolve} B -->|ON| C[快速IP验证] B -->|OFF| D[DNS解析] C --> E[线程池处理] D --> E E --> F{执行时间 > threadpool_stall_limit?} F -->|是| G[标记停滞+新建线程] F -->|否| H[正常完成] I[用户查询] --> J{skip_show_database} J -->|ON| K[过滤数据库可见性] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值