我在数据库表中有 120 万条记录(它也使用索引列)
我想删除旧的 100 万条记录。我尝试使用 PhpMyadmin 执行此操作,但需要更多时间。
DELETE FROM `table` WHERE `id` < 1000000
Run Code Online (Sandbox Code Playgroud)
有什么办法可以快速做到吗?
我还有一个问题:如果我在命令行中使用 SSH 客户端执行此操作,速度会很快吗?
我完全没有想法,所以也许其他人可以回答我的问题。我们有一个来自 Percona 的高流量 MySQL 5.5 服务器。该应用程序是在 PHP 中并始终写入 master。我们同时有 4 个奴隶,我们只能从中读取。基本上它是标准的主从配置。上周发生在所有从站上的复制都被破坏了,所以我检查了数据库有什么问题。我发现的基本上是我的问题,这怎么会发生:其中一个表中的唯一键列(不是主键)在 2 行中具有相同的值。我试图找出这种情况是否发生过一次以上,但没有。它只发生过一次,但我会理解为什么或如何发生这种情况。为了更好地理解这里是我们数据库中的一些真实数据:
show create table registeredUsers;
| registeredUsers | CREATE TABLE `registeredUsers` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`userId` varchar(32) NOT NULL,
`client` varchar(200) NOT NULL,
`osVersion` varchar(10) NOT NULL,
`deviceGroup` varchar(50) NOT NULL,
`registrationDate` datetime NOT NULL,
`lastAction` datetime NOT NULL,
`cultureLanguage` varchar(2) NOT NULL,
`cultureRegion` varchar(2) NOT NULL,
`cultureCode` varchar(5) NOT NULL DEFAULT 'de-de',
`lastPush` datetime DEFAULT NULL,
`pushToken` mediumtext,
`permaToken` varchar(74) DEFAULT NULL,
`accessCount` int(11) …Run Code Online (Sandbox Code Playgroud) 我正在制作测试应用程序,用户将在输入框中输入他们选择的查询,并且应用程序必须对它们进行比较,如果它们与“正确答案”查询相同。
\n“正确答案”查询在数据库中,可比选择由用户输入。
\n我读过有关 EXCEPT 和 INTERSECT 的内容,但它们在 MySQL 中不存在。
\n\n\n应用程序中的问题:
\n正确答案-
\nSELECT FIRSTNAME, LASTNAME, DATEOFBIRTH \nFROM PERSON \nJOIN STUDENTS ON PERSONID=STUDENTID\nWHERE GENDER=\xe2\x80\x99F\xe2\x80\x99 AND FIRSTNAME=\xe2\x80\x99YANA\xe2\x80\x99 AND LASTNAME<>\xe2\x80\x99TAYLOR\xe2\x80\x99\nRun Code Online (Sandbox Code Playgroud)\n我想检查返回的结果是否相同。错误的答案是 MySQLquery,例如使用别名列:
\nSELECT FIRSTNAME as first_name, LASTNAME as last_name, DATEOFBIRTH as date_of_birth ....\nRun Code Online (Sandbox Code Playgroud)\n甚至类似的语句(如果它返回更多结果):
\nWHERE GENDER=\xe2\x80\x99F\xe2\x80\x99 AND FIRSTNAME LIKE \'%YANA%\' AND LASTNAME<>\'TAYLOR\'\nRun Code Online (Sandbox Code Playgroud)\n我的问题是如何比较两个查询之间的结果:
\n在附录 A:PostgreSQL 错误代码中,它说:
对于某些类型的错误,服务器会报告与错误关联的数据库对象(表、表列、数据类型或约束)的名称;例如,导致 unique_violation 错误的唯一约束的名称。此类名称在错误报告消息的单独字段中提供,以便应用程序无需尝试从消息的可能本地化的人类可读文本中提取它们。
大胆强调我的。我有下表:
CREATE TABLE recipes (
id SERIAL,
title TEXT UNIQUE NOT NULL,
description TEXT NOT NULL,
instructions TEXT NOT NULL,
image BYTEA,
CONSTRAINT recipes_pk PRIMARY KEY(id),
CONSTRAINT title_unique UNIQUE(title)
);
Run Code Online (Sandbox Code Playgroud)
当我尝试插入具有重复标题的新行时,我在 pgAdmin3 中收到以下错误消息:
ERROR: duplicate key value violates unique constraint "title_unique"
DETAIL: Key (title)=(mytitle) already exists.
Run Code Online (Sandbox Code Playgroud)
或者,使用 PHP:
["errorInfo"]=>
array(3) {
[0]=>
string(5) "23505"
[1]=>
int(7)
[2]=>
string(117) "ERROR: duplicate key value violates unique constraint "title_unique"
DETAIL: Key (title)=(mytitle) already exists." …Run Code Online (Sandbox Code Playgroud) 我在 Windows 10 上使用 Datastax PHP Cassandra 驱动程序和 Cassandra 2.2.5。这是一个单节点集群,密钥空间复制
{
'class': 'SimpleStrategy',
'replication_factor': 1
}
Run Code Online (Sandbox Code Playgroud)
这是我要插入的表:
CREATE TABLE MyDocuments (
"label" varchar,
"fileName" varchar,
"blob" blob,
"createdTime" bigint,
"lastUpdateTime" bigint,
PRIMARY KEY("label", "fileName")
);
Run Code Online (Sandbox Code Playgroud)
当我尝试插入一个包含 16419KB 大 blob 的行时,它给了我这个错误消息Operation timed out - received only 0 responses.
根本没有插入该行。
插入一行 16379KB 的 blob 工作正常。
日志文件不显示任何内容。当操作失败时,Datastax / Cassandra 文件夹中的任何日志文件都不会附加任何内容。
经过几个小时的谷歌搜索,我仍然不知道为什么会发生这种情况。我曾尝试在设置 ( ) 中增加write_request_timeout_in_msto ,但没有帮助。20000cassandra.yaml
有谁知道为什么当大小超过 ~16MB 时,写入似乎会以这种方式失败?
更新:
我将 Cassandra 更新到 v3.7,同样的观察,但错误消息现在显示Operation failed - received 0 …
我正在用 PHP 编写一个简单的 API,并使用 MySQL 作为 Web 应用程序的数据库。我打算CREATE TABLE IF NOT EXIST在每个 API 调用中放入所有表。
我预计会有 5-6 张桌子。
我尝试这样做的原因很简单:我不需要运行任何额外的脚本来初始化应用程序 - 它会在第一次运行时自动执行。
作为一个缺点,我预计这会减慢 API 操作的速度。然而,我尝试记录 API 调用,但仍然是 2-3 毫秒(在我的例子中,如果有 CREATE TABLE 或没有 CREATE TABLE,我没有注意到任何差异)。
有什么想法吗?
我对 PostgreSQL 和 PostGIS 有一些问题。
在使用特殊光栅文件上的一些坐标运行以下查询后,我收到错误。
直到上周,它都运行良好。
查询是:
select (ST_ValueCount(ST_Union(ST_Clip(r.rast,r.geom,true),1,'area_sum'))).* from (select * ,(SELECT (ST_SetSRID(ST_GeomFromGeoJSON('{ "type": "Polygon", "coordinates": [[[47.48034200000001,39.13347600000003],[47.49611600000003,39.114525000000015],[47.510418000000016,39.10534899999999],[47.52599799999996,39.08644900000013],[47.54254200000014,39.05803700000013],[47.53256200000004,39.0290940000001],[47.52131200000002,39.00986000000012],[47.49699400000003,38.99015700000001],[47.498607000000106,38.97137000000009],[47.52537600000005,38.96289400000006],[47.52689400000003,38.94405700000004],[47.54134800000014,38.92563300000012],[47.529907000000094,38.906041000000016],[47.519521,38.87627100000009],[47.521041000000025,38.85683000000006],[47.54817600000001,38.83865400000002],[47.58924400000001,38.80162500000006],[47.59110200000009,38.762773000000095],......]]}'), 4326)))as geom from public.layer where filename in ( 'myrasterfile.tif') ) as r where ST_Intersects(r.rast,r.geom))
Run Code Online (Sandbox Code Playgroud)
错误是:
Run Code Online (Sandbox Code Playgroud)SQLSTATE[08006] [7] FATAL: the database system is in recovery mode
为什么我的 PostgreSQL 实例在此查询过程中进入恢复模式?
我应该怎么办?
我是一名 DB 和 SQL 初学者。我正在构建一个包含一些 SQL 查询的基本 PHP 应用程序。在我所有的搜索和学习中,每个示例都通过首先登录来访问数据库。这是有道理的,但在 PHP 中,您必须将这些凭据直接放在 PHP 文件中,如下所示:
$mysqli = new mysqli("localhost","user","password","db");
Run Code Online (Sandbox Code Playgroud)
这看起来有风险。例如,我知道一些服务器故障会显示 php 文件的文本而不是执行。
这是为了让初学者容易上手而展示的东西吗?如果是的话,更好的方法是什么?或者说这就是标准并且真的没什么可担心的?为什么它不是安全漏洞?
我的表结构:
+-----------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user | varchar(100) | NO | | NULL | |
| uniq_name | varchar(100) | NO | | NULL | |
| info_name | varchar(100) | NO | | NULL | |
| delay_time | int(11) | NO | | NULL | |
| track_time | timestamp | NO | …Run Code Online (Sandbox Code Playgroud) 我使用 PHP 5.4.3,我想使用普通的面向对象编程 (OOP) 方式远程连接到 MySQL 数据库(为了简洁起见,DB)(PHP 脚本驻留在与 DB 不同的服务器上):
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
Run Code Online (Sandbox Code Playgroud)
我收到错误:
警告:mysqli::mysqli():服务器请求客户端未知的身份验证方法 [mysql_old_password] 连接错误 (2054) 服务器请求客户端未知的身份验证方法
我找到了这个和这个,但它们似乎没有帮助。我使用 PHP 5.2.9,一切正常,但降级 PHP 版本对我来说不是一个解决方案。
我还必须提到,我没有对数据库设置的完全访问权限,因为客户端没有给我这种访问权限。我告诉他向 Hostgator 请求更新的密码格式支持,但他们回答说他们不能做任何超出我预期的事情。我从另一台远程服务器做了一项新的努力,现在我得到了:
连接错误 (1045) 用户“用户”@“主机”的访问被拒绝(使用密码:YES)
使用 PHP 5.3.9。由于远程服务器的 PHP 脚本,数据库似乎没有“让我进入”,但使用 Oracle 的 Workbench 一切正常。
谢谢你的时间。
php ×10
mysql ×7
phpmyadmin ×2
postgresql ×2
cassandra ×1
date-format ×1
delete ×1
duplication ×1
innodb ×1
mysql-5.5 ×1
percona ×1
performance ×1
postgis ×1
security ×1