如果我的行具有varchar
以下值:“ [1,2,3]
”,如果我需要该值包含数字之一(2 或 3),我该如何选择整行?
我有一张这样的表:
+------+-----------+
|caseID|groupVarian|
+------+-----------+
|1 |A,B,C,D,E |
+------+-----------+
|2 |A,B,N,O,P |
+------+-----------+
|3 |A,B,N,O,P |
+------+-----------+
|4 |A,B,C,D,F |
+------+-----------+
|5 |A,B,C,D,E |
+------+-----------+
Run Code Online (Sandbox Code Playgroud)
我想获得一个新列nameVarian
,以便相同的groupVarian
值具有相同的排名nameVarian
(例如:v1、v2 等)。但是,nameVarian
分配给特定对象的值groupVarian
应按照 的顺序caseID
(按照它们出现在表中的顺序)。
输出应该是这样的:
+------+-----------+----------+
|caseID|groupVarian|namevarian
+------+-----------+----------+
|1 |A,B,C,D,E |v1 |
+------+-----------+----------+
|2 |A,B,N,O,P |v2 |
+------+-----------+----------+
|3 |A,B,N,O,P |v2 |
+------+-----------+----------+
|4 |A,B,C,D,F |v3 |
+------+-----------+----------+
|5 |A,B,C,D,E |v1 |
+------+-----------+----------+
Run Code Online (Sandbox Code Playgroud) 我有一个需要 MySql 5.6 的自定义应用程序。我能够使用本教程在 ubuntu 20.04 上安装 MySql 5.7:https : //askubuntu.com/a/1232993
如何在 ubuntu 20.04 上安装 MySql 5.6?
因为上面的教程只适用于MySql 5.7,我在网上没有找到任何可行的解决方案。
MySql 5.6 可以在 Ubuntu 20.04 上运行吗?我应该将操作系统降级到 Ubuntu 18.04 吗?
我一直能够使用mariadb-dump
CLI 转储远程数据库。从今天开始,突然出现以下错误
mysqldump: Couldn't execute
'select column_name, extra, generation_expression, data_type
from information_schema.columns
where table_schema=database()
and table_name='<my-table>'':
Unknown column 'generation_expression' in 'field list' (1054)
Run Code Online (Sandbox Code Playgroud)
我检查了服务器信息架构,确实generation_expression
缺少该列。它存在于我打算转储到的本地测试服务器上。mariadb-dump 版本为 Ver 10.19 Distrib 10.11.2-MariaDB,适用于 Linux (x86_64),服务器版本为 MySQL 5.6。
我在互联网或 stackoverflow 上找不到任何相关问题。我查了一下,好像generation_expression
是5.7版本才引入的。我无法将服务器升级到 5.7。我希望这不是必需的,转储工具以前一直工作得很好。我正在考虑完全重新安装 mariadb,但这需要花费大量时间和精力,并且可能无法解决问题。
编辑:我刚刚重新安装了数据库服务器并清理了所有数据(首先备份),但仍然遇到相同的错误。
我在 Windows 7 上运行 MySQL 5.6(64 位)。我正在 32 位 Windows 7 上测试最近从 MySQL 5.0 升级的数据库。(我还复制了 my.ini,做了一些更改)
我发现建立连接需要很长时间(大约 1 秒)。作为示例,我创建了一个非常简单的 SQL 脚本:
select 1 as n;
Run Code Online (Sandbox Code Playgroud)
然后我在批处理文件中运行了 10 次,花了 10 秒才能完成:
mysql -h localhost -u root -D myschema 0< myscript.sql
Run Code Online (Sandbox Code Playgroud)
(是的,这里没有密码,这是一个仅监听127.0.0.1的测试DB)
有人知道为什么这么慢吗?(参见下面的 my.ini)
[client]
port=3306
[mysql]
default-character-set=latin1
[mysqld]
port=3306
bind-address=127.0.0.1
basedir="C:/Program Files/MySQL/mysql-5.6.10-winx64/"
datadir=C:/DATA
character-set-server=latin1
default-storage-engine=myisam
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=100
query_cache_size=0
table_open_cache=256
tmp_table_size=18M
thread_cache_size=8
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=35M
key_buffer_size=25M
read_buffer_size=64K
read_rnd_buffer_size=256K
sort_buffer_size=256K
innodb_additional_mem_pool_size=2M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=47M
innodb_log_file_size=24M
innodb_thread_concurrency=8
log-bin=c:/data/mysql/binarylog
max_binlog_size=1024M
enable-named-pipe
slow_query_log=
expire_logs_days=90
Run Code Online (Sandbox Code Playgroud) 我目前有一个主服务器,并希望添加另一个主服务器进行故障转移.
在主服务器上,我已将以下内容添加到"my.ini"
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
log_bin=mysql-bin
log_error=mysql-bin.err
binlog_do_db=1
binlog_do_db=2
binlog_do_db=3
binlog_do_db=4
Run Code Online (Sandbox Code Playgroud)
添加后:
master-host = [IP]
master-user = [usernameslaveuser]
master-password = [password]
master-connect-retry = 30
Run Code Online (Sandbox Code Playgroud)
mysql服务器不再启动...所以我决定先让辅助服务器正常工作.
问题2:在新服务器上,我从主数据库的"data"/ mysql目录复制了我的用户文件.我还用MySQL工作台导入了所有数据库.
然后我把它添加到"my.ini":
server-id=2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2
master-host = [IP]
master-user = [usernameslaveuser]
master-password = [password]
master-connect-retry = 30
log_bin=mysql-bin
log_error=mysql-bin.err
binlog_do_db=1
binlog_do_db=2
binlog_do_db=3
binlog_do_db=4
Run Code Online (Sandbox Code Playgroud)
服务器启动正常,所以我决定在主服务器上的复制数据库中添加一个表,但是没有复制到辅助服务器的更改...
我google了一下,发现我必须在mysql命令行中运行一些命令才能使复制工作.但是,当我在辅助服务器上打开它时,它无法启动...在命令提示符下打开它时,它显示mysql.exe:未知变量'server-id = 2"
两台服务器都运行Windows Server 2012 R2并安装了MySQL 5.6.15 64位.有人可以指导我真实的最后一部分设置吗?
我遇到了一个非常奇怪的问题,不明白这一点。
CREATE TABLE test (time TIMESTAMP NOT NULL DEFAULT NOW()) ENGINE=INNODB;
mysql> insert into test (time) values("2011-03-13 01:08:04");
Query OK, 1 row affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
这很好。现在,仅将时间更改 1 小时:
mysql> insert into test (time) values("2011-03-13 02:08:04");
ERROR 1292 (22007): Incorrect datetime value: '2011-03-13 02:08:04' for column 'time' at row 1
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?我随机插入日期时间值并发现许多值无法插入:“2011-03-13 02:08:04”、“2010-03-14 02:04:05”、“2009-03-08 02” :24:52", "2009-03-08 02:48:27", "2011-03-13 02:06:01", "2005-04-03 02:00:44"...
将小时更改为 1 或将年份更改为 1 可以解决问题,但当然不是真正的解决方法。
我目前在 Windows 10 中使用 mysql 服务器 5.6。在使用 mysql 时,不断出现错误,类似于“以下列没有默认值”我在互联网上读到,如果我更改,我可以解决此问题sql_模式。目前设置为
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
Run Code Online (Sandbox Code Playgroud)
我从“mysql server 5.6”文件夹中的“my-default.ini”文件中获取了它。我读到的其他几个答案说,如果您想永久更改 sql_mode,您应该通过“my-default.ini”文件来完成。所以我所做的是,我以管理员身份运行记事本,然后浏览打开“my-default.ini”文件,该文件位于:
c:\programs files (x86)\mysql\mysql server 5.6\my-default.ini
Run Code Online (Sandbox Code Playgroud)
当我打开文件时,我修改了最后一行:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
Run Code Online (Sandbox Code Playgroud)
到
sql_mode=
Run Code Online (Sandbox Code Playgroud)
然后我保存了文件,关闭了它。然后通过使用任务管理器我重新启动了我的sql服务器:
task manager >> services >> mysql56
Run Code Online (Sandbox Code Playgroud)
这是应该永久修改我的sql_mode的整个过程。当我查看“my-default.ini”文件时,最后一行仍然被修改。但是如果我通过命令行登录mysql并使用以下代码查看我的sql_mode:
select @@sql_mode;
Run Code Online (Sandbox Code Playgroud)
我知道我的 sql_mode 是
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Run Code Online (Sandbox Code Playgroud)
我希望所有这些都被(永久)删除,以便我的错误消失。如果我尝试使用以下命令从命令行修改 sql_mode:
set @@global.sql_mode="";
Run Code Online (Sandbox Code Playgroud)
它有效,但是当我重新启动 MySQL 时,一切都恢复到以前的样子。
有人可以告诉我我做错了什么吗?以及是否有其他方法可以解决这个问题。
我想 在 MySQL 5.6 docker 容器中将变量lower_case_table_names设置为 1。
我把变量放在容器中/etc/mysql下的my.cnf文件[mysqld]中。
停止容器后,它没有开始出现此错误:
未知变量lower_case_table_names=1
所以我要问的是还有其他方法可以将此变量设置为 1 吗?
我有一个 MySQL alter 语句
ALTER TABLE `employee`
ADD `employee_name_generator` CHAR(20) GENERATED ALWAYS AS
(COALESCE(concat(`employee_name`), '^')) VIRTUAL;
Run Code Online (Sandbox Code Playgroud)
这是添加employee_name_generator
唯一约束所必需的。这在 MySQL 5.7 以后工作正常。但是我需要它的环境有 MySQL 5.6。MySQL 5.6 有替代品吗?
mysql-5.6 ×10
mysql ×9
sql ×2
64-bit ×1
command-line ×1
connection ×1
database ×1
datetime ×1
docker ×1
dump ×1
linux ×1
mariadb ×1
myisam ×1
replication ×1
sql-mode ×1
timestamp ×1
ubuntu ×1
ubuntu-20.04 ×1