• [技术干货] MySQL架构与历史
    MySQL架构与历史引言MySQL是一个广泛使用的关系型数据库管理系统(RDBMS),以其高性能、可靠性和易用性而闻名。自1995年首次发布以来,MySQL已经成为了许多企业和个人项目的首选数据库解决方案。本文将探讨MySQL的架构和历史,以便更好地了解这个强大的数据库系统。MySQL历史MySQL的历史可以追溯到1995年,当时Michael Widenius和David Axmark共同创建了MySQL AB公司,并发布了第一个MySQL版本。从那时起,MySQL不断发展壮大,逐渐成为了最受欢迎的开源数据库之一。在MySQL的发展过程中,有几个重要的里程碑值得一提:2000年:MySQL发布了3.23版本,引入了许多新功能,如全文搜索和存储过程。2004年:MySQL 5.0版本的发布标志着MySQL进入了新的发展阶段,引入了视图、触发器、存储过程和事件调度器等高级功能。2008年:Sun Microsystems收购了MySQL AB,将MySQL作为其开源软件战略的重要组成部分。不久后,Oracle Corporation收购了Sun Microsystems,从而成为MySQL的新东家。2020年代:MySQL继续发展,不断优化性能和功能,以适应现代应用程序的需求。MySQL架构MySQL的架构可以分为几个主要组件:1. 连接层连接层负责处理客户端与MySQL服务器之间的连接。它支持多种协议,如TCP/IP、Unix套接字和命名管道,以便客户端可以通过不同的方式与MySQL服务器通信。2. 服务层服务层是MySQL架构的核心,负责处理来自客户端的SQL请求。它包括解析器、优化器、查询缓存和执行引擎等组件。解析器:解析器负责将SQL查询转换为内部表示形式,以便后续处理。优化器:优化器负责为查询选择最佳的执行计划,以提高查询性能。查询缓存:查询缓存存储已执行查询的结果,以便在相同查询再次出现时快速返回结果。但需要注意的是,在某些情况下,查询缓存可能会降低性能,因此在高并发环境下可能需要禁用它。执行引擎:执行引擎负责执行查询并返回结果。MySQL支持多种存储引擎,如InnoDB、MyISAM和Memory等,每种存储引擎都有其特定的优势和适用场景。3. 存储引擎层存储引擎层负责数据的存储和检索。MySQL的灵活性之一在于其支持多种存储引擎,用户可以根据需要选择合适的存储引擎。例如,InnoDB提供了事务支持和行级锁定,适用于需要高并发写入的应用场景;而MyISAM则提供了全文搜索和高速读取功能,适用于读密集型的应用场景。4. 数据存储层数据存储层负责将数据存储在磁盘上。MySQL使用文件系统或原始磁盘分区来存储数据。为了提高性能,MySQL还支持将数据分区存储在不同的物理磁盘上。总结MySQL的架构和历史展示了其作为一个强大、可靠和易用的数据库系统的演变过程。通过了解MySQL的架构,我们可以更好地理解其工作原理,并根据实际需求进行优化。在未来,随着技术的不断发展,MySQL将继续适应新的挑战,为用户提供更高效的数据库解决方案。
  • [技术干货] MySql和Oracle数据库的区别总结一览
    查询当前所有的表SQL> select * from tab;SQL> select * from cat where table_type=’TABLE’;//可能会有viewSQL>select * from user_tables;mysql> show tables;c:/mysql/bin>mysqlshow 库名显示当前连接用户(库)SQL> show usermysql> connect查看帮助SQL> ?mysql> help显示表结构SQL> desc 表名SQL> describe 表名mysql> desc 表名;mysql> describe 表名;mysql> show columns from 表名;c:/mysql/bin>mysqlshow 库名 表名日期函数SQL> select sysdate from dual;mysql> select now();mysql> select sysdate();mysql> select curdate();mysql> select current_date;mysql> select curtime();mysql> select current_time;日期格式化SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;SQL> select to_char(sysdate,'hh24-mi-ss') from dual;mysql> select date_format(now(),'%Y-%m-%d');mysql> select time_format(now(),'%H-%i-%S');日期函数(增加一个月)SQL> select to_char(add_months(to_date('20000101','yyyymmdd'),1),'yyyy-mm-dd') from dual;结果:2000-02-01SQL> select to_char(add_months(to_date('20000101','yyyymmdd'),5),'yyyy-mm-dd') from dual;结果:2000-06-01mysql> select date_add('2000-01-01',interval 1 month);结果:2000-02-01mysql> select date_add('2000-01-01',interval 5 month);结果:2000-06-01别名SQL> select 1 a from dual;SQL>select 1 as a from dual; //as可以省略mysql> select 1 as a;字符串截取函数SQL> select substr('abcdefg',1,5) from dual;SQL> select substr('abcdefg',1,5) from dual;结果:abcdemysql> select substring('abcdefg',2,3);结果:bcdmysql> select mid('abcdefg',2,3);结果:bcdmysql> select substring('abcdefg',2);结果:bcdefgmysql> select substring('abcdefg' from 2);结果:bcdefg另有SUBSTRING_INDEX(str,delim,count)函数返回从字符串str的第count个出现的分隔符delim之后的子串。如果count是正数,返回最后的分隔符到左边(从左边数) 的所有字符。如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)。执行外部脚本命令SQL >@a.sql1:mysql> source a.sql2:c:/mysql/bin>mysql <a.sql3:c:/mysql/bin>mysql 库名 <a.sql导入、导出工具exp.exeexp73.exeimp.exeimp73.exemysqldump.exemysqlimport.exe改表名SQL> rename a to b;mysql> alter table a rename b;执行命令;<回车>/rrun;<回车>goegodistinct用法SQL> select distinct 列1 from 表1;SQL> select distinct 列1,列2 from 表1;mysql> select distinct 列1 from 表1;mysql> select distinct 列1,列2 from 表1;注释--/*与*/#--/*与*/当作计算器SQL> select 1+1 from dual;mysql> select 1+1;限制返回记录条数SQL> select * from 表名 where rownum<5;mysql> select * from 表名 limit 5;新建用户(库)SQL> create user 用户名 identified by 密码;mysql> create database 库名;删用户(库)SQL> drop user 用户名;mysql> drop database 库名;查询索引SQL> select index_name,table_name from user_indexes;mysql> show index from 表名 [FROM 库名];通配符“%”和“_”“%”和“_”SQL语法SELECT selection_list 选择哪些列FROM table_list 从何处选择行WHERE primary_constraint 行必须满足什么条件GROUP BY grouping_columns 怎样对结果分组HAVING secondary_constraint 行必须满足的第二条件ORDER BY sorting_columns 怎样对结果排序SELECT selection_list 选择哪些列FROM table_list 从何处选择行WHERE primary_constraint 行必须满足什么条件GROUP BY grouping_columns 怎样对结果分组HAVING secondary_constraint 行必须满足的第二条件ORDER BY sorting_columns 怎样对结果排序LIMIT count 结果限定自动增长的数据类型处理create sequence myseq increment by 1 start with 1 maxvalue 99999; 主键列上加auto_increment
  • [技术干货] 【MySQL】数据库和表的操作-转载
     一、数据库的操作 1. 创建数据库 语法:CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...]      create_specification:     [DEFAULT] CHARACTER SET charset_name     [DEFAULT] COLLATE collation_name 1 2 3 说明:  大写的表示关键字,mysql 不区分大小写,所以也可以用小写 [] 是可选项 CHARACTER SET: 指定数据库采用的字符集 COLLATE: 指定数据库字符集的校验规则 假设现在我们现在需要创建一个名为 d1 的数据库,首先我们先查看一下数据库,查看数据库:show databases;  下面开始创建 d1 数据库:create database d1;   如上,d1 数据库就创建好了。  注意:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_ general_ ci.  创建一个使用 utf8 字符集的 d2 数据库:create database d2 charset=utf8;  创建一个使用 utf8 字符集,并带校对规则的 d3 数据库:create database d3 charset=utf8 collate utf8_general_ci;  我们在前面也说过,创建一个数据库其实就是在 Linux 下创建一个目录,这里就不再重复介绍了。  2. 字符集和校验规则 当我们创建数据库的时候,有两个编码集:  数据库编码集 - - - 数据库未来存储数据所采用的编码集; 数据库校验集 - - - 支持数据库,进行字段比较使用的编码,本质也是一种读取数据库中数据所采用的编码格式; 所以数据库无论对数据做任何操作,都必须保证操作和编码必须是编码一致的。  字符集主要是控制用什么语言。比如 utf8 就可以使用中文。  (1)查看系统默认字符集以及校验规则         show variables like 'character_set_database';  # 默认字符集         show variables like 'collation_database';      # 检验规则  (2)查看数据库支持的字符集         show charset; 1 (3)查看数据库支持的字符集校验规则         show collation; 1 (4)校验规则对数据库的影响 不区分大小写 创建一个数据库,校验规则使用 utf8_ general_ ci (不区分大小写,即在检验的时候不严格匹配,不对大小写字母进行区分)          create database test1 collate utf8_general_ci; 1 随后我们需要使用这个数据库:use test1  然后我们为这个数据库创建一张表,并插入一些数据,创建表和插入的语法我们先不做介绍,后面再介绍;如下:  接下来我们对这个表的插入结果进行查看,注意,该表的校验方法是不进行区分大小写进行匹配的;所以我们先查看整个表的情况:select * from for_test;  接下来我们筛选出 a 这个字符:select * from for_test where name='a';  我们可以看到,数据库在匹配 a 这个字符的时候不进行大小写区分,无论大写还是小写都给我们显示出来了。  区分大小写 创建一个数据库,校验规则使用 utf8_ bin (区分大小写,校验时按照严格匹配的方式,区分大小写)  因为该数据库的检验规则为 utf8_ bin,进行区分大小写的方式进行严格匹配,所以筛选出来的字符 a 就是字符 a.  3. 操纵数据库 (1)查看数据库         show databases; 1  (2)显示创建的语句         show create database 数据库名;  MySQL 建议我们关键字使用大写,但是不是必须的; 数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字 / * !40100 default… * / 这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话; (3)修改数据库 语法:          ALTER DATABASE db_name         [alter_spacification [,alter_spacification]...] 1 2 alter_spacification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name  说明:对数据库的修改主要指的是修改数据库的字符集,校验规则。  假设将我们上面创建的 test1 数据库的字符集改成 gbk:alter database test1 charset=gbk;   test1 数据库的字符集就修改成了 gbk.  4. 数据库删除 语法:          DROP DATABASE [IF EXISTS] db_ name; 1 例如我们删掉我们前面建的 test2 数据库:drop database test2;  如下:   如上图,test2 数据库就被删除了。  执行删除之后的结果:  数据库内部看不到对应的数据库 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删 5. 备份和恢复 (1)备份数据库 在备份数据库之前我们先需要退出 mysql.  语法:          mysqldump -P3306 -u root -p密码 -B 数据库名 > 数据库备份存储的文件路径 1 其中密码部分我们可以不在命令行输入,当我们执行这条命令的时候命令行会提示我们输入。  例如我们把 test1 库备份到文件中:mysqldump -P3306 -uroot -p -B test1 > /home/lmy/test1.sql   这时,可以打开看看 test1.sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中。  接下来我们进入 mysql 中,把这个数据库删掉:   如上图,test1 库就被我们删除了,接下来我们进行还原。  (2)还原 语法:          source 数据库备份的文件路径; 1 我们在 mysql 中输入指令:source /home/lmy/test1.sql; 即可在 mysql 中恢复 test1 库:   (3)拓展 如果备份的不是整个数据库,而是其中的一张表,怎么做?做法如下:          mysqldump -uroot -p 数据库名 表名1 表名2 > 备份文件路径 1 如果同时备份多个数据库,如下:          mysqldump -uroot -p -B 数据库名1 数据库名2 ... > 数据库存放路径 1 如果备份一个数据库时,没有带上 -B 参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用 source 来还原。  6. 查看连接情况 查看连接情况可以告诉我们当前有哪些用户连接到我们的 MySQL,如果查出某个用户不是我们正常登陆的,很有可能我们的数据库被人入侵了。以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。  语法:          show processlist; 1 例如:   二、表的操作 1. 创建表 语法:          CREATE TABLE table_name (             field1 datatype,             field2 datatype,             field3 datatype         ) character set 字符集 collate 校验规则 engine 存储引擎; 在创建表之前需要指定数据库,即使用:use 数据库; 为该数据库创建表。  注意,数据库的数据类型我们暂时先不介绍,后续会介绍。  说明:  field 表示列名 datatype 表示列的类型 character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准 collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准 例如我们创建一个 users 表,里面存储用户的 id、用户名、密码、生日:          create table users(             -> id int,             -> name varchar(20) comment '用户名',             -> password char(20) comment '密码',             -> birther date comment '生日'             -> ) character set utf8 engine MyISAM; 说明:不同的存储引擎,创建表的文件不一样。users 表存储引擎是 MyISAM ,在数据库目录中有三个不同的文件,我们可以进入该目录查看:cd /var/lib/mysql/d1,分别是:   其中,它们分别表示:  users.frm:表结构 users.MYD:表数据 users.MYI:表索引 而 db.opt 则是该数据库对应的字符集和检验规则。  2. 查看表 上面我们已经创建好了一张 users 表,此时我们可以查看该数据库有哪些表:show tables;   3. 查看表结构 语法:desc 表明;  例如查看 users 表的结构:   以上就是表的结构中的介绍,我们后面会详细介绍每一列的功能的。  4. 修改表 在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等;这时我们就需要修改表。          ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column         datatype]...);  # 添加                  ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,column         datatype]...);  # 修改                  ALTER TABLE tablename DROP (column);  # 删除 例如:  先在 users 表添加两条记录:      mysql> insert into users values(1, 'a', 'b', '2000-01-01'),          -> (2, 'c', 'd', '2000-01-02'); 1 2  在 users 表添加一个字段,用于保存图片路径:alter table users add assets varchar(100) comment '图片路径' after birther;  插入新字段后,我们查看原表的数据,对原来表中的数据没有影响:   修改 name,将其长度改成 60: alter table users modify name varchar(60);  删除 password 列: alter table users drop password;  我们再查看表中的数据,发现 password 这一列的数据都不见了:   所以删除字段一定要小心,删除字段及其对应的列数据都没了。  修改表名为 employee: alter table users rename to employee; ,其中 to 可以省略  将 name 列修改为 xingming: alter table employee change name xingming varchar(60); ,新字段需要完整定义  5. 删除表 语法:DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...  例如:   再次查看:  ———————————————— 版权声明:本文为CSDN博主「YoungMLet」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/YoungMLet/article/details/134977958 
  • [问题求助] obs服务调用“外呼结果回写接口OBS_CallResultProc”时存在报错
    问题来源】【必填】    【南海农商行】【问题简要】【必填】 ICD V300R008C25 数据库接口方式,调用“外呼结果回写接口OBS_CallResultProc”,返回报错。【问题类别】【必填】    【可选问题分类:ICD obs 】【AICC解决方案版本】【必填】    【AICC可选择版本:AICC 22.100】    【UAP可选择版本:V100R005】    【CTI可选择版本:ICD V300R008C25SPC012】【期望解决时间】【选填】尽快【问题现象描述】【必填】查看obs日志:查看dbop下面的日志其中一条的文本内容: 数据源:rdWork3,Msg Hstmt= [47514], RecvTime=10:26:37:341, SessionTime=10:26:37:341 ,Time: 2024-01-08;10:26:37:344,来源:106.0.52.222:1301(),类型:MSG_PROXY_EXECUTE_NEW,语句:OBS_CallResultProc,输入:1:;2:0101;3:oct1703756093342qfJ55;4:2;5:1234343545;6:00551;7:1;8:1;9:0;10:2024-01-08 10:25:59;11:2024-01-08 10:25:59;12:2024-01-08 10:26:37;13:1704680759-67068;,结果:,失败,描述:执行失败,错误:错误类型: SA_DBMS_API_ERROR; 错误码:1366; 错误描述: INCORRECT STRING VALUE: '\X89\X01' FOR COLUMN 'I_SUNIQUEID' AT ROW 1
  • [技术干货] [MySQL] SQL优化之性能分析-转载
     一、索引优化 1、索引是什么: 通过一些约束,快速查询到相应字段的一种数据结构  索引在sql优化中占有非常重要的地位,因为索引与查询挂钩,查询是我们最常做的一个操作。  2、索引的数据结构: Hash索引:查询快,但是不支持范围查询,只能精确定位某个数据。  B+树索引:查询较快,支持范围查询,这也是InnoDB存储引擎中默认的索引结构  B+树结构:  多路平衡树,每个节点存放key和指针,指针数量等于key数量+1   插播小知识:  B+树与B树,有什么区别,为什么不用二叉树???  B+树没个非叶子结点只存放指针,可以最大限度的降低树的高度,提高查询效率。  所有数据存放在叶子节点,查询稳定,而二叉树层次会更深,也会有退化为链表的风险  3、索引种类: 聚簇索引:叶子节点中主键下面挂的是每一行的数据  二级索引:叶子节点中索引值下面挂的是主键id  4、sql分析(回表查询) 现有user表,id为主键,name有唯一约束和唯一索引结构,分析下面sql语句。  -- select * from user where id = 1;  -- select * from user where name = 'zhang';  分析:  ①where 后面是id,从主键索引里面查找,找到了id为1的,再看前面select 后面是 * 主键下面包含了这些字段信息,直接返回。  ②where 后面是name,并且有唯一索引结构,从该索引查找,找到了姓名为zhang的,同样select * 也是查询所有字段,但是此时name下面只有主键id的值,他要根据id再次查询主键索引,性能低  二、定位慢查询语句 1、慢查询日志 mysql带有慢查询日志,该日志会记录超过指定时间的sql语句, 注意:  慢查询日志默认为不开启,开启之后默认指定时间为10s。  可通过修改配置文件来设置这两参数。  修改mysql的配置文件   缺点:  有些sql在规定的时间之内,但是查询花了9.9秒,并且性能很低,慢查询日志无法记录这样的sql我们也就无法优化.  2、profile详情 show profiles 查看sql语句的执行时间  show profile for query query_id; 查看指定语句的执行时间  3、explain执行计划(重点) explain执行计划:他记录了sql查询的一些详细信息 例如:查询部门和员工信息,  控制台返回这么一张表,我们重点关注这5个字段。   type:  表示访问表的方式,是性能分析中重要的一个指标。常见的取值有: ALL:全表扫描。 index:通过索引扫描。 range:通过索引范围扫描。 ref:非唯一性索引扫描。 eq_ref:唯一性索引扫描。 const:单表中最多有一个匹配行的情况。 反应查询效率 从高到底分别是NULL->system->const->eq_ref->ref->range->index->all  all性能最差,也就是它是全表扫描,没有使用索引,NULL 只有像select 'A' 这样的没有查表才会这样,所以开发中我们尽量优化到system 或者const或者ref级别。  possible_keys:  可能使用的索引,但不一定用到 key:  使用的索引 key_len:  使用索引的长度(字节为单位) Extra:  包含有关查询的额外信息,可能包括: Using index:表示查询使用了覆盖索引。 Using where:表示 MySQL 会在存储引擎层使用 WHERE 条件过滤行。 Using temporary:表示查询需要创建临时表。 Using filesort:表示 MySQL 会对结果使用文件排序。 4、查看执行频次  ———————————————— 版权声明:本文为CSDN博主「不会就选C.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/Panci_/article/details/134918156 
  • [问题求助] obs服务获取到任务数据之后,发现调用CTIAPI接口失败的报错
    问题来源】【必填】    【南海农商行】【问题简要】【必填】 ICD V300R008C25 数据库接口方式,通过“取外呼任务接口”,获取到任务数据之后。后面的步骤在obs的日志发现" 调用CTIAPI接口失败 CTIApiName:CccGetDeviceBySkillsWithVDN,VdnID=3,ServiceID=oct1702888507020s11kW,@@skillB,ErrorCode:16,ErrInfo:。"【问题类别】【必填】    【可选问题分类:ICD obs】【AICC解决方案版本】【必填】    【AICC可选择版本:AICC 22.100】    【UAP可选择版本:V100R005】    【CTI可选择版本:ICD V300R008C25SPC012】【期望解决时间】【选填】尽快【问题现象描述】【必填】obs服务获取到任务数据obs日志发现报错:其中这些技能组skillA、skillB是对应的vdn管理员配置的:192.168.0.76:3306@work3?CharacterEncodingName:utf8这个配置的日志日志文件:
  • [技术干货] MySql中怎样查询表是否被锁-转载
     MySql查询表是否被锁 查看表被锁状态  # 查询哪些表锁了 show OPEN TABLES where In_use > 0; 查看造成死锁的sql语句  # 查询innodb引擎的运行时信息 show engine innodb status; 查询进程  # 查询所有进程 show processlist; 解锁(删除进程)  # 删除进程 kill id; 查看正在执行的事务  # 查看正在执行的事务 select * from information_schema.INNODB_TRX; 查看正在锁的事物  # 查看正在锁的事物 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS 查看等待锁的事物  # 查看等待锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; MySql出现数据库表被锁解决方案 出现的现象 页面出现502错误,数据库CPU持续飙升,大量事务堆积未提交成功(事务一直处于阻塞阶段)  查看阻塞事务列表,发现其中有锁表现象。  排查与解决思路 1)查看数据库中是否有表被锁  show open tables where in_use > 0; 如果上述返回有结果,说明有表正在被使用,返回字段如下  | Database | Table | In_use | Name_locked | 2)查看进程(只会显示当前用户的进程,除非是root用户)  show processlist; 3)查看当前运行所有事务  SELECT * FROM information_schema.INNODB_TRX; 4)查看当前出现的所有锁  SELECT * FROM information_schema.INNODB_LOCKs; 5)查询锁等待的对应关系  SELECT * FROM information_schema.INNODB_LOCK_waits; 查看事务表 INNODB_TRX中 是否有正在锁定的事务线程  确认 ID 是否在 show processlist 的 sleep 线程中:如果在,说明这个sleep的线程事务一直没有commit 或者 rollback,而是卡住了,需要手动kill掉。  搜索的结果中,如果在事务表发现了很多任务,最好都 kill 掉。  6)清理事务指定的线程 ID  kill 1234; 原文地址 MySql中怎样查询表是否被锁_Mysql_脚本之家 (jb51.net) https://www.jb51.net/database/2934268li.htm  文章知识点与官方知识档案匹配,可进一步学习相关知识 MySQL入门技能树数据库组成表76311 人正在系统学习中  ———————————————— 版权声明:本文为CSDN博主「无聊的何宝荣」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/yukiwe7/article/details/133673777 
  • [问题求助] obs查看任务信息,发现中文乱码
    问题来源】【必填】    【南海农商行】【问题简要】【必填】 ICD V300R008C25 数据库接口方式,通过“取外呼任务接口”,获取到任务数据后,在“系统监控台”查看obs任务信息,发现中文乱码。【问题类别】【必填】    【可选问题分类:ICD obs 中文乱码】【AICC解决方案版本】【必填】    【AICC可选择版本:AICC 22.100】    【UAP可选择版本:V100R005】    【CTI可选择版本:ICD V300R008C25SPC012】【期望解决时间】【选填】尽快【问题现象描述】【必填】本地数据的字符集是utf8在“Web配置台”中的数据源中,配置连接字符串为:ip:3306@work3?CharacterEncodingName:UTF8获取到任务数据后,在“系统控制台”查看任务数据发现中文乱码:尝试过:1、将连接字符串为:ip:3306@work3?CharacterEncodingName:GBK        结果是存在中文乱码2、创建新的数据库,数据库字符设置为GBK,且将连接字符串为:ip:3306@work3?CharacterEncodingName:GBK       结果也是存在一样的中文乱码。所以,发帖请教老师们一下,可以检查哪里的配置来解决这个问题?
  • [其他] mysql中枚举类型使用varchar还是数字?哪个效率更好
     在MySQL中,当遇到枚举字段时,选择使用varchar还是数字类型(如tinyint)是一个常见的问题。根据观察,很多人倾向于使用tinyint,而少数会选择varchar。  ENUM和SET是MySQL中的字符串数据类型,与CHAR和VARCHAR这类可以随意插入任意字符的字符串类型不同,ENUM和SET只能在指定的集合里取值。例如,当使用ENUM类型创建表时,每个枚举值都需要用单引号引起来,如:`CREATE TABLE shirts ( name VARCHAR(40), size ENUM('x-small', 'small', 'medium', 'large', 'x-large') );`。  从效率的角度来看,tinyint作为数字类型,在查询时通常会比varchar类型更快。但是,如果枚举值较多,使用tinyint可能会导致数据冗余,因为一个整数可能对应多个枚举值。相反,使用varchar可以更直观地显示枚举值,但在某些查询场景下可能不如tinyint高效。 
  • [其他] mysql 字段varchar和char怎么使用,区别是什么
     在MySQL中,char和varchar都是用来存储字符串的数据类型,但它们具有一些主要的区别。首先,char字段是有固定长度的,一旦定义了长度,该字段能存储的字符数量就是固定的。例如,如果声明了一个长度为10的char字段,那么无论实际存储的字符串有多短,都将占用10个字符的空间。而varchar字段是可变长的,它只占用实际需要的空间来存储字符串。例如,如果声明了一个长度为10的varchar字段,但只存储了一个长度为3的字符串,那么实际上只会占用3个字符的空间。  另外,由于char字段的长度是固定的,所以对于长度小于指定长度的字符串,它将用空格进行填充以达到指定长度;而对于varchar字段,它将只存储实际字符串的长度。  在效率方面,由于char字段总是占用相同的空间,无论存储的字符串有多短,所以在处理很短的字符串时可能不如varchar高效。反过来,由于varchar只使用所需的空间,所以对于非常长的字符串,它可能比char更高效。  总的来说,选择使用char还是varchar主要取决于您的具体需求。如果您有一个固定长度的字符串需要存储,并且对存储空间有严格的控制,那么可以使用char。如果您需要存储的字符串长度经常变化,或者对存储空间的有效利用有较高的要求,那么应该使用varchar。 
  • [技术干货] MySQL binlog 的开启以及查看方式
    前言MySQL的binlog(Binary log)是二进制日志文件,它记录了对MySQL数据库执行的所有更改(只记录对数据的修改操作)。它主要用于数据库的主从复制以及增量恢复。此外,binlog还可以用来查看数据库的变更历史(具体的时间点所有的SQL操作)、数据库增量备份和恢复(增量备份和基于时间点的恢复)、MySQL的复制(主主数据库的复制、主从数据库的复制)。binlog包含所有数据更新的SQL语句,即所有的DDL和DML语句,并以事件的形式存储。它还包含每一条更新数据的语句的执行时间,以及其他一些元数据,如有关正确重新执行语句的server状态信息、错误代码、维护binlog本身所需要的元数据。binlog是在server运行期间生成的全局状态变化的追踪,它包含的事件描述了这种状态的变化。更准确地说,binlog记录的事件描述了可以用于重现server上发生的相同全局状态改变的操作。开启binlog操作很简单,只需在 mysqld 配置文件中加上,参数为 binlog 文件名前缀。[mysqld] log-bin = mysql-bin.log gtid_mode = ON enforce-gtid-consistency = ON查看 binlog要查看MySQL的binlog,可以按照以下步骤进行操作:登录到MySQL数据库服务器上。你可以使用命令行工具(如MySQL命令行客户端)或图形化工具(如phpMyAdmin)来登录。执行以下命令查看可用的binlog文件列表: SHOW BINARY LOGS ; 这将显示所有可用的binlog文件及其文件名。例如:通过SHOW BINLOG EVENTS IN 'mysql-bin.023957' LIMIT 10;可以直接在客户端显示 binlog 的预览 Event 类型,但是不会显示具体的变更内容。如下所示:mysql> show binlog events in 'mysql-bin.023957' limit 20; +------------------+------+----------------+------------+-------------+---------------------------------------------------------------------------------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+------+----------------+------------+-------------+---------------------------------------------------------------------------------------------------------------+ | mysql-bin.023957 | 4 | Format_desc | 549162831 | 123 | Server ver: 5.7.28-log, Binlog ver: 4 | | mysql-bin.023957 | 123 | Previous_gtids | 549162831 | 234 | dc9bac04-2845-11ec-95ad-0c42a1b7313e:1-5807740472, e8ad4358-55bf-11eb-9e76-0c42a1070c62:7241693234-7242018889 | | mysql-bin.023957 | 234 | Gtid | 2818504855 | 299 | SET @@SESSION.GTID_NEXT= 'dc9bac04-2845-11ec-95ad-0c42a1b7313e:5807740473' | | mysql-bin.023957 | 299 | Query | 2818504855 | 362 | BEGIN | | mysql-bin.023957 | 362 | Table_map | 2818504855 | 585 | table_id: 8023460 (test) | | mysql-bin.023957 | 585 | Update_rows_v1 | 2818504855 | 1485 | table_id: 8023460 flags: STMT_END_F | | mysql-bin.023957 | 1485 | Xid | 2818504855 | 1516 | COMMIT /* xid=13566310119 */ | | mysql-bin.023957 | 1516 | Gtid | 2818504855 | 1581 | SET @@SESSION.GTID_NEXT= 'dc9bac04-2845-11ec-95ad-0c42a1b7313e:5807740474' 选择要查看的binlog文件。根据上一步中显示的文件列表,选择你想要查看的binlog文件。执行以下命令查看选定的binlog文件的内容:mysqlbinlog [options] log_file将"log_file"替换为你要查看的binlog文件的路径和文件名。你还可以使用一些可选参数(options)来定制输出格式,如指定输出格式、过滤特定数据库或表等。有关更多选项,请参阅MySQL官方文档。这样,你就可以查看MySQL的binlog文件了。请注意,binlog文件是以二进制格式存储的,因此需要使用适当的工具(如mysqlbinlog)进行解析和查看。通过mysqlbinlog工具解析binlog通过mysqlbinlog工具解析binlog文件,可以按照以下步骤进行操作:打开命令行终端,并导航到包含binlog文件的目录。运行以下命令来解析binlog文件:mysqlbinlog [options] binlog_file将"binlog_file"替换为实际的binlog文件名。mysqlbinlog工具提供了许多选项,可以根据需要进行自定义。以下是一些常用的选项:--start-datetime:指定开始时间,只解析该时间之后的日志事件。--stop-datetime:指定结束时间,只解析该时间之前的日志事件。--base64-output:控制二进制数据的输出格式,可以选择"never"、"auto"或"always"。--verbose:显示详细的日志事件信息。--short-form:只显示语句,而不显示元数据或其他详细信息。--database:只解析指定数据库的日志事件。你可以根据需要选择适合的选项进行解析。解析完成后,mysqlbinlog工具会将解析结果输出到终端。你可以查看输出结果,其中包含了binlog文件中的日志事件信息。请注意,mysqlbinlog工具是MySQL官方提供的命令行工具,可以帮助你解析和查看binlog文件。确保你已经安装了MySQL,并且在命令行中可以使用mysqlbinlog命令。
  • [技术干货] 数据库DDL语言深度解析
    数据库DDL语言深度解析摘要本文旨在深入探讨数据库DDL(Data Definition Language)语言,通过对其基础概念、语法结构以及实际应用案例进行详细解析,帮助读者更好地理解和掌握DDL语言。我们将通过代码示例来展示DDL语言的实际运用,并讨论其在实际数据库设计中的重要性。一、引言DDL是数据库管理系统(DBMS)中用于定义和管理数据库结构的一种语言。与DML(Data Manipulation Language)和DCL(Data Control Language)等其他数据库语言相比,DDL专注于数据库、表、索引等结构的创建、修改和删除。二、DDL基础概念1. 数据库操作CREATE DATABASE:用于创建新的数据库。ALTER DATABASE:用于修改数据库的属性。DROP DATABASE:用于删除数据库。2. 表操作CREATE TABLE:用于创建新的表。ALTER TABLE:用于修改表的结构,如添加、删除或修改列。DROP TABLE:用于删除表。3. 索引操作CREATE INDEX:用于创建索引,以加快查询速度。DROP INDEX:用于删除索引。三、DDL语法结构我们将通过一些具体的代码示例来展示DDL语言的语法结构。1. 创建数据库CREATE DATABASE dbname;2. 创建表CREATE TABLE tablename ( column1 datatype, column2 datatype, column3 datatype, .... );3. 创建索引CREATE INDEX indexname ON tablename (column1, column2, ...);四、DDL实际应用案例案例一:创建一个电商数据库步骤一:创建数据库首先,我们需要创建一个名为"ecommerce"的数据库。可以使用以下DDL命令:CREATE DATABASE ecommerce;步骤二:创建表接下来,我们需要在"ecommerce"数据库中创建一些表,如"customers"、"products"和"orders"。以下是创建"customers"表的示例代码:CREATE TABLE customers ( customer_id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), email VARCHAR(100), phone_number VARCHAR(20) );案例二:在订单表中添加新列并创建索引步骤一:修改表结构假设我们需要在"orders"表中添加一个新的列"order_date",可以使用以下DDL命令:ALTER TABLE orders ADD COLUMN order_date DATE;步骤二:创建索引以提高查询性能。我们可以使用以下DDL命令在"order_date"列上创建索引:```sql 创建一个关于订单日期的索引,以提高基于日期的查询性能。可以使用以下DDL命令:sql CREATE INDEX idx_order_date ON orders (order_date); 五、DDL的重要性与实践建议 5. DDL的重要性与实践建议 DDL是数据库结构管理的核心,正确的使用和实践可以带来以下好处: - 数据库结构的标准化和规范化,确保数据的准确性和一致性。 - 通过合理的索引设计,提高查询性能,优化数据库性能。 - 使数据库结构适应业务需求的变化和发展。在实践使用DDL时,以下是一些建议: - 在进行任何结构性修改之前,务必备份数据库,以防止数据丢失或破坏。 - 设计表结构时应遵循第三范式(3NF),以减少数据冗余和提高数据完整性。 - 在创建索引时,应根据查询需求和性能瓶颈进行选择,避免过度索引导致写入性能下降。 - 定期审查和优化数据库结构,以适应业务需求和性能要求的变化。 六、总结 本文详细探讨了数据库DDL语言的基本概念、语法结构和实际应用案例。通过代码示例和实际场景分析,我们展示了DDL在数据库设计中的重要作用和实践建议。掌握和熟练运用DDL语言对于数据库管理员和开发人员来说都是至关重要的,它可以帮助我们更好地设计和管理数据库结构,以满足业务需求并优化性能。
  • [优秀案例分享] 校运会系统数据库设计
    1、设计要求案例2: 校运动会系统校运动会中有各类比赛,每一比赛类别有类别编号、类别名称和主管属性,每一比赛类别包含很多个比赛项目;每一比赛项目有项目编号、项目名称、比赛时间和级别属性;各个系团队有团队编号、团队名称、领队属性,每一代表团由多名运动员组成,运动员有编号,姓名,年龄,性别等属性;每一名运动员可以参加多个比赛项目,每一比赛项目也有多名运动员参加,运动员参加比赛有成绩属性。2、ER图绘制ddl代码SET foreign_key_checks = 0; drop table if exists competitionType; drop table if exists competition; drop table if exists team; drop table if exists player; drop table if exists results; CREATE TABLE competitionType( typeid int COMMENT '类型编号' AUTO_INCREMENT, type_name varchar(40) COMMENT '类型名称', manager varchar(40) COMMENT '主管名称', PRIMARY KEY (typeid) ); CREATE TABLE competition( cid int COMMENT '比赛编号' AUTO_INCREMENT, gender int COMMENT '比赛性别,1表示男,0表示女' DEFAULT 1, cname varchar(40) COMMENT '比赛名称', ctime DATETIME COMMENT '比赛时间', typeid int COMMENT '比赛类别编号', PRIMARY KEY (cid), FOREIGN KEY (typeid) REFERENCES competitionType(typeid) on delete set null ); CREATE TABLE team( tid int COMMENT '团队编号' AUTO_INCREMENT, tname varchar(40) COMMENT '团队名称', leader varchar(40) COMMENT '领队名称', PRIMARY KEY (tid) ); CREATE TABLE player( pid int COMMENT '运动员编号' AUTO_INCREMENT, pname varchar(40) COMMENT '姓名', age int COMMENT '年龄', gender int COMMENT '性别,1表示男,0表示女' DEFAULT 1, grade int COMMENT '年级级别', tid int COMMENT '所属团队编号', PRIMARY KEY (pid), FOREIGN KEY (tid) REFERENCES team(tid) on delete set null ); CREATE TABLE results( pid int COMMENT '运动员编号', cid int COMMENT '比赛编号', score int COMMENT '成绩', PRIMARY KEY (pid, cid), FOREIGN KEY (pid) REFERENCES player(pid), FOREIGN KEY (cid) REFERENCES competition(cid) ); SET foreign_key_checks = 1;3、数据字典在华为云gaussdb数据库中,在执行了上述ddl代码之后,使用“库管理”->“数据字典”->“导出PDF”,即可获得可视化的数据结构以检查数据定义的正确性 以下为本次设计导出的结果4、业务需求实现sql设计及其效果展示获取所有团体总成绩,并按总成绩排列展示delimiter $$ drop procedure if exists teamInfo; create procedure teamInfo() begin select tname as 院系名称, ifnull(sum(score),0) as 总分 from team team left join (select * from player natural join results) as pr on pr.tid = team.tid group by team.tid ORDER BY sum(score) desc; end; $$ delimiter;展示所有比赛项目的所有参赛人员及其参赛成绩delimiter $$ drop view if exists competitionInfo; create view competitionInfo as with compe(cid, cname2) as ( select cid, CONCAT(CASE gender when 1 then "男子" else "女子" END ,cname) as cname2 from competition) select cname2 as 项目名称, pname as 运动员, score as 成绩 from results natural join compe natural join player order by cname2 desc, score desc; $$ delimiter;男子只能参加男子比赛,女子只能参加女子比赛delimiter $$ drop trigger if exists results_insert_before_trigger; create trigger results_insert_before_trigger BEFORE INSERT ON results for each row BEGIN declare pgender int; declare cgender int; select gender into pgender from player where new.pid = pid; select gender into cgender from competition where new.cid = cid; if (cgender <> pgender) then insert into mytable values(0); end if; end; $$ delimiter;1是男性运动员,5是男子比赛,4是女子比赛,3是比赛成绩,未参加的可以设为0,可以看到只有男性运动员参加男子比赛才能成功报名,否则无法插入
  • [专题汇总] 11月技术干货一篇写尽合集20篇
    技术干货一篇写尽合集20篇,本次给大家带来了CodeArts板块技术干货合集,设计Mysql Oracle Git 容器 运维的相关知识,希望可以给大家带来帮助  1.Oracle表索引查看常见的方法总结【转】 https://bbs.huaweicloud.com/forum/thread-0297136732000017003-1-1.html  2.Oracle数据表保留一条重复数据简单方法【转】 https://bbs.huaweicloud.com/forum/thread-0205136731850117002-1-1.html  3.Oracle导入导出dmp文件具体示例【转】 https://bbs.huaweicloud.com/forum/thread-0205136731270640001-1-1.html  4.看看CodeArts snap如何解释毕昇JDK如何进行快速反序列化 https://bbs.huaweicloud.com/forum/thread-0266136724985168025-1-1.html  5.从0到1学会MySQL单表查询【转】 https://bbs.huaweicloud.com/forum/thread-02105136720816984026-1-1.html  6.MySQL日期格式以及日期函数举例详解【转】 https://bbs.huaweicloud.com/forum/thread-0266136720702857023-1-1.html  7.MySQL主从同步延迟原因与解决方案【转】 https://bbs.huaweicloud.com/forum/thread-0257136720588871021-1-1.html  8.Docker安装mysql配置大小写不敏感挂载数据卷存储操作步骤【转】 https://bbs.huaweicloud.com/forum/thread-0290136720478298028-1-1.html  9.MySQL中的空格处理方法【转】 https://bbs.huaweicloud.com/forum/thread-02127136720383727033-1-1.html  10.MySQL中的SHOW FULL PROCESSLIST命令实现【转】 https://bbs.huaweicloud.com/forum/thread-02105136720261863025-1-1.html  11.SQL多行值合并一行字符串逗号分隔【转】 https://bbs.huaweicloud.com/forum/thread-0257136720162189020-1-1.html  12.SQL server常见的数据类型转换整理大全【转】 https://bbs.huaweicloud.com/forum/thread-0248136720112853029-1-1.html  13.SQL Server数据库游标的基本操作指南【转】 https://bbs.huaweicloud.com/forum/thread-0260136720025043021-1-1.html  14.SQL Server基础教程之游标(Cursor)【转】 https://bbs.huaweicloud.com/forum/thread-0266136719975532022-1-1.html  15.SQL去除字符串空格的ltrim()和rtrim()函数的实现【转】 https://bbs.huaweicloud.com/forum/thread-02127136719876232032-1-1.html  16.高性能负载均衡-分类和算法 https://bbs.huaweicloud.com/forum/thread-0248136637937517018-1-1.html  17.45 个 Git 经典操作场景,专治不会合代码【转】 https://bbs.huaweicloud.com/forum/thread-0248136629791027014-1-1.html  18.运维必备的17个技巧【转】 https://bbs.huaweicloud.com/forum/thread-0266136629427452015-1-1.html  19.没有Kubernetes怎么玩Dapr?【转】 https://bbs.huaweicloud.com/forum/thread-0257136629178535007-1-1.html  20.容器技术的发展历程【转】 https://bbs.huaweicloud.com/forum/thread-0229136628923618017-1-1.html
  • [技术干货] 从0到1学会MySQL单表查询【转】
    1.查询表中若干列例如:查询全体学生的学号和姓名12select sno,snamefrom student;(1)查询全部列(例如:查询全体学生的信息)方法一:在select关键字后面列出所有列名代码如下👇🏻12select  sno,sname,ssex,sage,sdeptfrom student;方法二:将<目标列表表达式>指定为*代码如下👇🏻12select *from student;(2)查询经过计算的值select子句中的<目标列表达式>不仅可以为表中的属性列,也可以是表达式例如:查询全体学生的姓名及其出生年份代码如下👇🏻12select sname,2023-sagefrom student;(3)使用列别名改变查询结果的列标题(AS可以省略)代码如下👇🏻123SELECT Sname AS NAME,'Year of Birth:' AS BIRTH,        2014-Sage AS BIRTHDAY,LOWER(Sdept)  AS DEPARTMENT    FROM Student;2.查询表中若干元组(1)消除取值重复的行如果没有指定DISTINCT关键字,则缺省为ALL例如:(查询选修了课程的学生学号)未指定DISTINCT关键字代码如下👇🏻123456SELECT snoFROM sc;/*SELECT ALL snoFROM sc;*/指定DISTINCT关键字代码如下👇🏻12SELECT DISTINCT snoFROM sc;(2)比较大小例如:查询计算机科学系全体学生的名单代码如下👇🏻123SELECT snameFROM studentWHERE sdept='cs';例如:所有年龄在20岁以下的学生姓名和年龄代码如下👇🏻123SELECT sname,sageFROM studentWHERE sage<20;
总条数:1045 到第
上滑加载中