MySQL 提供了暂时禁用外键检查的能力,从而允许不一致的数据进入数据库。
是否可以逐表、逐行检查整个 MySQL 数据库,以确保满足所有约束?
I'm trying to run the MySQL DBT2 Benchmark Tool, I have unzipped the archive and run the following commands:
./configure --with-mysql
make
make install
mkdir /tmp/dbt
datagen -w 3 -d /tmp/dbt --mysql
scripts/mysql/mysql_load_db.sh --path /tmp/dbt --mysql-path /usr/bin/mysql
scripts/run_mysql.sh --connections 20 --time 300 --warehouses 3
Run Code Online (Sandbox Code Playgroud)
But got the following output:
...
Stage 3. Starting of the test. Duration of the test 300 sec
STARTING DRIVER COMMAND: /root/dbt2-0.37.50.3/src/driver -d 127.0.0.1 -l 300 -wmin 1 -wmax 3 -spread 1 -w 3 -sleep …
Run Code Online (Sandbox Code Playgroud) ALTER TABLE [dbo].[REMINDER_EMAIL] WITH CHECK ADD CONSTRAINT
[FK__REMINDER_EMAIL__FACILITY_ID] FOREIGN KEY ( [FACILITY_ID] )
REFERENCES [dbo].[FACILITY] ( [FACILITY_ID] )
ALTER TABLE [dbo].[REMINDER_EMAIL] CHECK CONSTRAINT [FK__REMINDER_EMAIL__FACILITY_ID]
Run Code Online (Sandbox Code Playgroud) 我有一个脚本来安装 MySQL 5.7 并在Travis CI(运行 Ubuntu 12)上运行测试。
该脚本包含这些行,以非交互模式安装 MySQL,没有密码:
add-apt-repository 'deb http://repo.mysql.com/apt/ubuntu/ precise mysql-5.7-dmr'
apt-get update
echo mysql-community-server mysql-community-server/root-pass password "" | debconf-set-selections
echo mysql-community-server mysql-community-server/re-root-pass password "" | debconf-set-selections
DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold -q -y install mysql-server libmysqlclient-dev
Run Code Online (Sandbox Code Playgroud)
安装运行顺利,使用mysql
命令行实用程序,我可以不用密码连接到服务器:
mysql --user=root -e "SELECT VERSION();"
Run Code Online (Sandbox Code Playgroud)
+-----------+
| VERSION() |
+-----------+
| 5.7.8-rc |
+-----------+
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试使用 PHP PDO进行连接:
new PDO('mysql:host=localhost', 'root', '');
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
SQLSTATE[HY000] [1045] 用户 'root'@'localhost' 的访问被拒绝(使用密码:NO)
我试图允许root
从任何主机连接:
GRANT ALL ON …
Run Code Online (Sandbox Code Playgroud) 我正在设置将外部 MySQL 实例复制到 RDS。
外部 MySQL 实例和 RDS 都运行 MySQL 5.7.10。
我已按照该程序进行操作,但是在转储数据库mysqldump
并将其发送到mysql
连接到 RDS 时,出现以下错误:
第 2081 行的 ERROR 1215 (HY000):无法添加外键约束
SHOW ENGINE InnoDB STATUS
在 RDS 节目中:
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2016-03-25 01:38:56 0x2ad07ddcf700 Error in foreign key constraint of table db/Prospect:
FOREIGN KEY (`restaurantId`) REFERENCES `Restaurant` (`id`),
CONSTRAINT `FK_Prospect_Zone` FOREIGN KEY (`zoneId`) REFERENCES `Zone` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18292 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci:
Cannot resolve table name close to:
(`id`),
CONSTRAINT `FK_Prospect_Zone` FOREIGN …
Run Code Online (Sandbox Code Playgroud) 我想CHECK TABLE
从 MySQL 命令行在我的所有表上运行。
我可以为单个表执行此操作:
mysql> check table Restaurant;
+--------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------------------+-------+----------+----------+
| foodbox.Restaurant | check | status | OK |
+--------------------+-------+----------+----------+
1 row in set (0.02 sec)
Run Code Online (Sandbox Code Playgroud)
是否有等效的命令可以检查当前数据库中的所有表?
假设我有一个表,trx_request
其中包含以下数据
id | confirmed(TIME) | finished(TIME)
-------------------------------------
1 | 12:05:00 | NULL
2 | 13:11:00 | NULL
Run Code Online (Sandbox Code Playgroud)
和另一个trx_updates
使用以下数据调用的表
request(FK) | role(INT) | added(TIME)
------------------------------------------
1 | 1 | 14:02:00
Run Code Online (Sandbox Code Playgroud)
我想制作一个触发器,在将记录插入后trx_updates
,计算该request
字段中有多少记录具有相同的值(例如有多少个“1”)。然后,检查计数是否达到 4(“1”出现 4 次)。当它发生时,它会将 更新trx_requests.finished
为 NOW()。
如何在触发器中创建一个计数语句?或者触发器是要走的路?
mysql ×6
foreign-key ×3
mysql-5.7 ×2
amazon-rds ×1
benchmark ×1
constraint ×1
count ×1
sql-server ×1
trigger ×1