Tag: 数据库

何时使用MyISAM和InnoDB?

MyISAM的devise思想是,你的数据库被查询得远远超过它的更新,因此它执行非常快的读取操作。 如果您的读写(插入|更新)比率小于15%,则最好使用MyISAM。 InnoDB使用行级locking,提交,回滚和崩溃恢复function来保护用户数据。 它支持事务和容错 MyISAM和InnobDB之间的上述差异是否正确? 如果MYISAM和InnobDB有任何其他限制,请指导。 我应该何时使用MyiSAM或Innodb? 谢谢!

3NF和BCNF之间的区别(必须能够解释为一个8岁)

我读过报价: 数据取决于密钥[1NF],整个密钥[2NF],只有密钥[3NF] 。 但是,我无法理解3.5NF或BCNF。 这是我明白的: BCNF比3NF严格 表格中任何FD的左侧必须是超级键(或至less一个候选键) 那么为什么有些3NF表格不在BCNF呢? 我的意思是,3NF的引用明确地说“只有关键”,这意味着所有属性完全依赖主键。 主键毕竟是一个候选键,直到被选为我们的主键。 如果到目前为止我的理解有任何问题,请纠正我,并感谢您提供的任何帮助。

在数据库中保存枚举的方法

我想知道将枚举保存到数据库中的最佳方法是什么。 我知道有name()和valueOf()方法,使其成为一个string回来。 但有没有其他(灵活的)选项来存储这些值? 有一个聪明的方法,使他们成为唯一的数字( ordinal()是不安全的使用)? 任何意见和build议将是有益的:) 更新: 感谢所有真棒和快速的答案! 正如我怀疑的那样。 但是要注意“工具包”; 这是一个方法。 问题是,我将不得不添加相同的方法与我创build的每个枚举types。 这是很多重复的代码,目前,Java不支持任何解决scheme(你不能让枚举扩展其他类)。 但是,谢谢你的所有答案!

SQLiteOpenHelper onUpgrade()混淆Android

我正在做我的第一个应用程序与数据库,我有一点点了解onUpgrade函数的麻烦。 我的数据库有一个表和一个项目和一个最喜欢的列,以便用户可以collections一个项目。 我看到的大多数实现只是删除表并重build它,但我不想这样做。 我想能够添加更多的项目到表中。 当应用程序通过android marketplace升级时,数据库是否知道它的版本号? 所以,我可以增加代码中的版本号,然后将其导出到市场,当用户第一次启动升级版本时,onUpgrade将被调用? 如果是这样的话,我的onUpgrade会简单地从文件中拉出来,并添加数据库项目。这是一个标准的做事方式,或者有更好的方式来处理这在Android中。 我正在尽可能保持标准。 谢谢

Oracle(旧?)join – 转换的工具/脚本?

我一直在移植oracleselect,而且我已经遇到了很多像这样的查询: SELECT e.last_name, d.department_name FROM employees e, departments d WHERE e.department_id(+) = d.department_id; …和: SELECT last_name, d.department_id FROM employees e, departments d WHERE e.department_id = d.department_id(+); 有没有任何指南/教程转换(+)语法的所有变种? 甚至叫什么语法(所以我可以谷歌冲)? 更好 ..是否有一个工具/脚本,将为我做这个转换(首选免费)? 某种优化器? 我有大约500这些查询端口.. 这个标准什么时候被淘汰? 任何信息表示赞赏。

mySQL – 使用三个表中的数据和列创build一个新表

我正在尝试创build一个新的表,它将包含三个现有表中的选定数据。 现有的三个表格设置如下,我期望的结果是在底部: people id last_name first_name email 1 Smith Fred Fred@.. 2 Jones Tom Tom@.. 3 Doe Jane Jane@.. taxonomy id taxonomy 1 age 2 gender 3 height details id person_id detail_id content 1 1 1 36 2 1 2 M 3 1 3 5'10" 4 2 1 29 5 2 2 M 6 2 […]

IMMUTABLE,STABLE和VOLATILE关键字如何影响函数的行为?

我们写了一个函数get_timestamp()定义为 CREATE OR REPLACE FUNCTION get_timestamp() RETURNS integer AS $$ SELECT (FLOOR(EXTRACT(EPOCH FROM clock_timestamp()) * 10) – 13885344000)::int; $$ LANGUAGE SQL; 这用于INSERT和UPDATE在数据库logging的创build和修改字段中input或编辑一个值。 但是,我们发现当连续添加或更新logging时,它将返回相同的值。 在检查pgAdmin III中的函数时,我们注意到在运行SQL来构build函数时,在LANGUAGE SQL语句之后注入了关键字IMMUTABLE。 该文档指出,默认是VOLATILE(如果没有这些出现,VOLATILE是默认假设),所以我不知道为什么注入IMMUTABLE,但是,将其更改为STABLE已解决重复值的问题。 注: 正如在接受的答案中所述,IMMUTABLE不会被pgAdmin或Postgres添加到函数中,而且必须在开发过程中添加。 我猜测发生了什么是这个函数正在被评估和结果被caching优化,因为它被标记为IMMUTABLE指示Postgres引擎返回值不应该改变给定相同(空)参数列表。 但是,如果不在触发器中使用,则直接在INSERT语句中使用时,函数将在返回相同的值之前返回一个不同的值FIVE次。 这是由于一些优化algorithm,如“如果一个IMMUTABLE函数在会话中多使用5次,caching未来调用结果”? 任何关于如何在Postgres函数中使用这些关键字的澄清,将不胜感激。 对于我们来说,STABLE是正确的select,因为我们在触发器中使用了这个函数,或者还有更多要考虑的地方,例如文档说: (对于希望查询由当前命令修改的行的AFTER触发器是不合适的。) 但我为什么不清楚。

@GeneratedValue在MySQL上的多态抽象超类

在使用Hibernate和MySQL的Spring MVC应用程序中,我有一个抽象超类BaseEntity ,它pipe理模型中所有其他实体的ID的值。 id字段使用@GeneratedValue 。 每当我的代码尝试保存任何扩展BaseEntity的子类时,都遇到问题。 问题出现在@GeneratedValue的GenerationType的select上。 在我的代码中BaseEntity一个子类试图保存到底层MySQL数据库的每一个地方,我得到以下错误: ERROR SqlExceptionHelper – Table 'docbd.hibernate_sequences' doesn't exist 我已经阅读了许多关于这个在谷歌上的post,但是他们要么处理其他数据库(不是MySQL),要么处理抽象的超类。 我不能通过使用GenerationType.IDENTITY来解决问题,因为我正在使用抽象超类来pipe理模型中所有实体的id字段。 同样,我不能使用GenerationType.SEQUENCE因为MySQL不支持序列。 那么我该如何解决这个问题呢? 这里是BaseEntity.java的代码: @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public abstract class BaseEntity { @Id @GeneratedValue(strategy = GenerationType.TABLE) protected Integer id; public void setId(Integer id) {this.id = id;} public Integer getId() {return id;} public boolean isNew() {return (this.id == null);} […]

插入数据到表(mysqli插入)

我一直在看这个代码一会儿,我看不出问题在哪里。 我一直在阅读整个StackOverflow,仍然无法看到我的错误在哪里。 <?php mysqli_connect("localhost","root","","web_table"); mysql_select_db("web_table") or die(mysql_error()); if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } echo "<p> Connection Successful!" mysqli_query('INSERT INTO web_formitem (ID, formID, caption, key, sortorder, type, enabled, mandatory, data) VALUES (105, 7, Tip izdelka (6), producttype_6, 42, 5, 1, 0, 0)'); echo "<p>Insert successfull"; ?> 错误是在13行,这就是mysqli_query('insert…我试图帮助自己http://www.w3schools.com/php/php_mysql_insert.asp,但它没有帮助我很多。

对一组列的NOT NULL约束

我在Postgres中有一个表,它的email列目前有一个NOT NULL约束。 该表还具有可选的phone列。 我希望系统接受一些没有emaillogging,但只有当这些logging有NOT NULL phone 。 换句话说,我需要一个NOT NULL数据库约束,以便CREATE或UPDATE查询在没有任何错误的情况下成功,如果其中一个或两个email或phone字段都存在。 进一步扩展上述内容,是否有可能在Postgres中指定一组列名,其中一个或多个应该为NOT NULL ,以便成功更新或创buildlogging?