标签: innodb

在MySQL中使用自动增量定义复合键

场景:

我有一个引用两个外键的表,并且对于这些外键的每个唯一组合,都有自己的auto_increment列.我需要实现一个复合键,它将使用这三个组合(一个外键和一个auto_increment列,另一个列具有非唯一值)帮助将行标识为唯一

表:

CREATE  TABLE `issue_log` (
`sr_no` INT NOT NULL AUTO_INCREMENT ,
  `app_id` INT NOT NULL ,
  `test_id` INT NOT NULL ,
  `issue_name` VARCHAR(255) NOT NULL ,
primary key (app_id, test_id,sr_no)
);
Run Code Online (Sandbox Code Playgroud)

当然,我的查询必定有问题,因为抛出的错误是:

错误1075:表定义不正确; 只能有一个自动列,必须将其定义为键

我想要实现的目标:

我有一个Application Table(以app_id作为主键),每个Application都有一组要解决的问题,每个Application都有多个测试(所以test_id col)sr_no col应该为唯一的app_id和test_id递增.

即表中的数据应如下所示:

在此输入图像描述

数据库引擎是InnoDB.我希望尽可能简单地实现这一点(即如果可能的话,避免使用触发器/程序 - 这是针对其他问题的类似情况而建议的).

mysql innodb composite-key auto-increment

22
推荐指数
3
解决办法
2万
查看次数

为什么在删除或更新时不使用外键而没有操作

我有一个感兴趣的问题:

我有2代表InnoDb.
table tbl_a有一个主键,命名为a_id;
table上tbl_b有一个主b_id键和一个外键,tbl_a.a_id带有" ON DELETE NO ACTION".

+-------------+---------------+---------------+
|  Table Name |  Primary Key  |  Foreign Key  |
+-------------+---------------+---------------+
|    tbl_a    |     a_id      |               |
|    tbl_b    |     b_id      |     a_id      |
+-------------+---------------+---------------+
Run Code Online (Sandbox Code Playgroud)

为什么我仍然会使用InnoDb和外键,如果我最终没有真正使用外键的魔力呢?
还有一点是使用
和外键
而不是
而没有外键.
如果我只是NO ACTION删除或更新?

我希望你有我的兴趣:)

mysql myisam innodb foreign-keys

21
推荐指数
2
解决办法
4万
查看次数

如何从.ibd文件重新创建MySQL InnoDB表?

假设已从备份磁带还原以下MySQL文件:

  • tablename.frm
  • tablename.ibd

此外,假设MySQL安装正在运行,innodb_file_per_table并且数据库已完全关闭mysqladmin shutdown.

鉴于从恢复的MySQL文件中取出的相同MySQL版本的全新安装,如何将数据from tablename.ibd/ tablename.frm导入到这个新安装中?

mysql innodb disaster-recovery

20
推荐指数
1
解决办法
4万
查看次数

选择锁定共享模式

从dev.mysql上读过这篇文章.

在该页面中是一个例子,当使用select for update并且不要在共享模式中使用lock并且说

在这里,LOCK IN SHARE MODE不是一个好的解决方案,因为如果两个用户同时读取计数器,当它试图更新计数器,至少有一个用户会死锁

但是本页的第一行说

SELECT ... LOCK IN SHARE MODE:读取的行是最新的,**因此,如果它们属于另一个 尚未提交的事务**,则读取将阻塞,直到该事务结束.

有悖论吗?

我的意思是两个用户不同时读取计数器,因为如果它们属于读取阻止的另一个事务,直到该事务结束.

mysql innodb locking

20
推荐指数
2
解决办法
1万
查看次数

Laravel和InnoDB

我正在使用laravel和laravel迁移机制.我创建了表并设置了外键.但表是MyISSAM,因此不会创建外键.我在哪里启用/配置它?(将其更改为InnoDB而不是mysql服务器).

php mysql innodb laravel

20
推荐指数
3
解决办法
2万
查看次数

外键在MySQL中不起作用:为什么我可以插入不在外部列中的值?

我在MySQL中创建了一个表:

CREATE TABLE actions ( A_id int NOT NULL AUTO_INCREMENT,
type ENUM('rate','report','submit','edit','delete') NOT NULL,
Q_id int NOT NULL,
U_id int NOT NULL,
date DATE NOT NULL,
time TIME NOT NULL,
rate tinyint(1),
PRIMARY KEY (A_id),
CONSTRAINT fk_Question FOREIGN KEY (Q_id) REFERENCES questions(P_id),
CONSTRAINT fk_User FOREIGN KEY (U_id) REFERENCES users(P_id));
Run Code Online (Sandbox Code Playgroud)

这创建了我想要的表(虽然"DESCRIBE actions;"命令向我显示外键是MUL类型的键,我不确定这意味着什么).但是,当我尝试输入问题或用户表中不存在的Q_id或U_id时,MySQL仍然允许这些值.

我做错了什么?如何防止带有外键的表接受无效数据?

更新1

如果我添加TYPE=InnoDB到最后,我收到一个错误:

ERROR 1005(HY000):无法创建表'./quotes/actions.frm'(错误号:150)

为什么会这样?

更新2

我被告知使用功能外键强制数据完整性很重要,但InnoDB也不应该与MySQL一起使用.您有什么推荐的吗?

mysql innodb foreign-keys mysql-error-1005

19
推荐指数
3
解决办法
3万
查看次数

我是否应该总是喜欢MySQL InnoDB而不是MyISAM?

有人告诉我InnoDB比MyISAM好多了.所以当我创建一个表时,我是否应该总是尝试使用InnoDB Engine而不是MyISAM?或者两者都有它的巨大好处?

mysql database-design myisam innodb

19
推荐指数
3
解决办法
5167
查看次数

Muzak复制建议和技术

我正在尝试自己的第一个大型数据库项目.我在服务器1上有一个myisam mysql数据库,其中一个php应用程序消耗了大量的各种数据.我在服务器2上有mysql myisam,php应用程序选择并显示数据.

我想在服务器2上复制这些数据.

问题:

  1. 我应该将服务器1 mysql数据库更改为innodb
  2. 你能将server1 innodb复制到server2 myisam吗?
  3. 我将媒体存储为blob,意图使用缓存卸载实时服务器上的压力.我应该使用文件系统存储和rsync.
  4. 其他有经验的人的一般建议?

php mysql replication myisam innodb

19
推荐指数
2
解决办法
167
查看次数

MySQL InnoDB:"FOR UPDATE"和"LOCK IN SHARE MODE"之间的区别

两个锁定读取子句之间的确切区别是什么:

SELECT ... FOR UPDATE
Run Code Online (Sandbox Code Playgroud)

SELECT ... LOCK IN SHARE MODE 
Run Code Online (Sandbox Code Playgroud)

为什么你需要使用一个而不是另一个?

mysql innodb locking transactions acid

19
推荐指数
3
解决办法
5482
查看次数

MySQL:使用FK错误创建表(错误150)

我用MySQL Workbench创建了一个模型,现在正尝试将它安装到mysql服务器上.

使用文件>导出>转发工程师SQL CREATE脚本...它为我输出一个很好的大文件,我要求的所有设置.我切换到MySQL GUI Tools(专门用于查询浏览器)并加载这个脚本(请注意,我将从另一个官方MySQL工具开始).但是,当我尝试实际执行此文件时,我反复得到相同的错误

SQLSTATE [HY000]:常规错误:1005无法创建表'./srs_dev/location.frm'(错误号:150)

"好的",我对自己说,位置表有问题.所以我查看输出文件中的定义.

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

-- -----------------------------------------------------
-- Table `state`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `state` ;

CREATE  TABLE IF NOT EXISTS `state` (
  `state_id` INT NOT NULL AUTO_INCREMENT ,
  `iso_3166_2_code` VARCHAR(2) NOT NULL ,
  `name` VARCHAR(60) NOT NULL ,
  PRIMARY KEY (`state_id`) )
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `brand`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `brand` ; …
Run Code Online (Sandbox Code Playgroud)

mysql innodb foreign-keys mysql-error-1005

18
推荐指数
2
解决办法
4万
查看次数