标签: innodb

webhost不支持InnoDB.现在怎么办?

我正在我的笔记本电脑上开发一个小型WAMP Web应用程序,我在其中运行了mySQL实例,并为数据库引擎选择了InnoDB.经过几个星期的开发,我想向公众开放,发现我的网站主机提供的数据库服务器不支持InnoDB,只支持MyISAM.

从我的笔记本电脑上的innoDB架构生成的create-and-populate脚本,当针对实时数据库执行时,可以设法创建单独的TABLES,但后来遇到创建VIEW的问题.MyISAM不支持视图吗?我知道FOREIGN KEYs不是.这就是为什么我选择了InnoDB的原因...我有什么机会让我的innoDB架构设计与myISAM一起工作?

有没有直接的方法将整个架构从一个存储引擎转换到另一个?我应该寻找另一个提供支持innoDB的mysql数据库的Web主机吗?

mysql myisam innodb web-hosting views

3
推荐指数
1
解决办法
2340
查看次数

存储器(HEAP)与读写环境中的InnoDB

我想用MySQL编写实时应用程序.

它需要一个小表(少于10000行),它将在重读(扫描)和写(更新和一些插入/删除)负载下.我说的是每秒10000次更新或选择.这些语句只在少数(少于10个)打开的mysql连接上执行.

该表很小,不包含任何需要存储在磁盘上的数据.所以我问哪个更快:InnoDB或MEMORY(HEAP)?

我的想法是:

  1. 两个引擎都可能直接从内存中提供SELECT,因为即使InnoDB也会缓存整个表.UPDATE怎么样?(的innodb_flush_log_at_trx_commit?)

  2. 我主要担心的是锁定行为:InnoDB行锁与MEMORY表锁.这是否会成为MEMORY实施的瓶颈?

谢谢你的想法!

mysql memory heap innodb locking

3
推荐指数
1
解决办法
2606
查看次数

为什么InnoDB会在没有每次更新的情况下继续增长?

我有一张由厚重的斑点组成的桌子,我想对它进行一些测试.

我知道innodb不会回收已删除的空间,所以我决定通过更新自己的值而不是创建新记录来重用现有记录.

但我注意到,无论是删除并插入新条目,还是在现有ROW上进行更新,InnoDB都在不断增长.

假设我有100行,每个存储500KB的信息,My InnoDB大小为10MB,现在当我在所有行上调用UPDATE(没有插入/不删除)时,innodb每次运行都会增加~8MB.我所做的就是每行存储500KB的数据,几乎没有修改,并且blob的大小是固定的.

我该怎么做才能防止这种情况发生?

我知道优化表,但我不能这样做,因为在常规使用,表将是60-100GB大,运行优化将停止整个服务器.

mysql innodb

3
推荐指数
1
解决办法
1799
查看次数

MySQL默认数据库以及如何使现有的非InnoDB成为InnoDB

我处于项目的开始阶段,到目前为止我一直在使用默认的MySQL数据库.

那么,默认数据库是否有名称?

我的问题是如何在不删除当前表和创建新表的情况下将现有表更改为utf-8和InnoDB.是否有一个alter table来制作表utf-8和InnoDB?

谢谢,亚历克斯

mysql database database-design innodb

3
推荐指数
1
解决办法
677
查看次数

MySQL事务是原子的吗?

我已经读过MySQL(InnoDB)中的事务是原子的,但是当我在5个线程中测试下一个代码时,它们会选择相同的ID:

$db->beginTransaction();

$row = $db->fetchRow("SELECT * FROM atomic WHERE selected = 0 LIMIT 1");

sleep(5);

$db->update("atomic", array('selected' => 1), "id = " . $row['id']);

$db->commit();

echo "Selected row: " . $row['id'];
Run Code Online (Sandbox Code Playgroud)

php mysql myisam innodb transactions

3
推荐指数
1
解决办法
2362
查看次数

PHP - MySQL行级锁定示例

我已经看过许多帖子,解释了Select FOR UPDATE的用法以及如何锁定行,但是我无法找到任何解释当代码尝试读取被锁定的行时发生的情况.

例如.假设我使用以下内容:

$con->autocommit(FALSE);
$ps = $con->prepare( "SELECT 1 FROM event WHERE row_id = 100 FOR UPDATE");
$ps->execute();
...
//do something if lock successful
...
$mysqli->commit();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我如何确定我的锁是否成功?行已被锁定时处理场景的最佳方法是什么?

对不起,如果在某处描述,但我似乎找到的只是"快乐路径"的解释.

php mysql mysqli innodb rowlocking

3
推荐指数
1
解决办法
3123
查看次数

自动递增 - 每年自动重置

MySQL/InnoDB

就我而言,我的收据应按年计算;1/2015、2/2015 ... 556/2015 等等。明年来的时候,柜台应该重新从1开始,收据应该计算为1/2016,2/2016 ...

如何定义将每年重置的 auto_increment 字段?

RCID | RCNO | RCYEAR | ...
=====+======+========+====
 200 |    1 |   2015 |
 201 |    2 |   2015 |
 ... |  ... |   2015 |     
 756 |  556 |   2015 |     <- last receipt in 2015
 757 |    1 |   2016 |     <- yearly counter restarted
Run Code Online (Sandbox Code Playgroud)

注意:RCID 是标准的 PK 自动递增字段。

mysql innodb auto-increment

3
推荐指数
1
解决办法
1712
查看次数

仅使用不同列的条件从同一表中选择相同的数据

我认为最好先向你展示他的查询:

    SELECT 
    Positive.Amount AS PosAmount, 
    Negative.Amount AS NegAmount, 
    booking.Correction
FROM (booking)
LEFT JOIN ( SELECT ID, Amount FROM booking WHERE Amount < 0 ) 
    AS Negative ON booking.ID = Negative.ID
LEFT JOIN ( SELECT ID, Amount FROM booking WHERE Amount > 0 ) 
    AS Positive ON booking.ID = Positive.ID
Run Code Online (Sandbox Code Playgroud)

我想在这里实现的是以下内容.我希望每个预订的金额取决于它在不同列中是正数还是负数.这可能是另一种更便宜的方式吗?我的意思是加入一张桌子本身不是最好的方法,可以吗?

该表看起来像:

在此输入图像描述

而期望的结果是这样的:

在此输入图像描述

提前致谢!

mysql sql database innodb

3
推荐指数
1
解决办法
80
查看次数

mysql:`my.cnf`中的未知变量

我按照这些说明加速将大型本地文件(500+M,10+M行)加载到MySQL中,将配置添加到/etc/mysql/my.cnf:

[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
local-infile=1

# add following code
innodb_doublewrite = 0
innodb_support_xa = 0
Run Code Online (Sandbox Code Playgroud)

但遇到以下问题:

mysql: unknown variable 'innodb_doublewrite=0'
mysql: unknown variable 'innodb_support_xa=0'
Run Code Online (Sandbox Code Playgroud)

PS:MySQL版本

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.27, for debian-linux-gnu (x86_64) using  EditLine wrapper
Run Code Online (Sandbox Code Playgroud)

mysql innodb my.cnf

3
推荐指数
1
解决办法
5679
查看次数

MySQL 8 忽略整数长度

我有一个 MySQL 8.0.19 在 Docker 容器中运行并使用 InnoDB 引擎。我注意到表整数字段长度被忽略了。

无论是运行 CREATE 还是 ALTER 查询,整数数据类型都会出现此问题

CREATE TABLE `test` (
  `id` int DEFAULT NULL,
  `text_field` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `decimal_field` decimal(6,2) DEFAULT NULL,
  `int_field` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

长度在我的 MySQL 客户端 (Navicat) 中显示为 0,但如果使用SHOW FULL COLUMNS FROMtest在控制台中检查也会发生同样的情况;

mysql> SHOW FULL COLUMNS FROM `test`;
+---------------+--------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| Field         | Type         | Collation          | Null | Key | Default | Extra | Privileges                      | Comment |
+---------------+--------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| …
Run Code Online (Sandbox Code Playgroud)

mysql sql innodb mysql-8.0

3
推荐指数
1
解决办法
2454
查看次数