mysql使用小记
最近用mysql写了几个复杂的语句,感觉在关系很复杂的时候先理清关系再选择用的查询方法是很重要的,因为同一个需求可能用不同的方法来查出来,但是复杂度,性能都不一样。
下面说一下能实现复杂查询的一些一般方法:
一.with语法(首先说明,好像Mysql不支持这个语法,但是sqlserver是支持的),即with tableA as select .... from table B。相当于在数据库中建立了一个临时表。其实我喜欢这种语法,因为看起来像是面向对象的,结构清晰。
二.建立临时表,即create temporary table{...},其他类似了,但是网上说这种方法开销很大,建议考虑性能的应用慎用。
三.嵌套查询,即select a,b from (select a* as a, b* as b from A*) as A...,这是很常用的方法,也很好用,性能应该也不错。
四.各种连接,即select a ,b,c from A inner join B inner join C, 这种结构上倒是也很清晰,但是最大的缺点就是冗余数据太多,增加系统负担,因为表中的列你都给连接过来了,而实际上是根本用不了这么多的(可能只需要每个表中特定的几列),这样造成连接后的表太庞大了,性能应该很差 。 所以在你确定冗余数据不多时,可以用这种方法。
自己的心得,可能也不完全。其实真正用的时候是几种方法结合起来更好,比如
select a,b from (select a* as a from A*) as A inner join (select b* as b from B*) as B on A.some=B.some where a='hello';
相关文档:
废话不说了,直接进入主题,C# ODBC访问MySQL数据库:
1.安装Microsoft ODBC.net:我安装的是mysql-connector-odbc-3.51.22-win32.msi
2.安装MDAC 2.7或者更高版本:我安装的是mdac_typ.exe 2.7简体中文版
3.安装MySQL的ODBC驱动程序:我安装的是 odbc_net.msi
4.管理工具 -> 数据源ODBC –>配置DSN… ......
1. 初始化一个连接句柄
MYSQL *mysql_init(MYSQL *);
正确:返回一个指向新分配的链接句柄结构的指针
错误:NULL
注:该函数的传入参数通常为NULL即可。
2. 建立物理连接
MYSQL *mysql_real_connect(MYSQL *connect ......
解决hibernate+mysql出现的隔天连接超时问题
出现错误:SQL Error: 0, SQLState: 08S01
Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Software caused connection abort: socket write error
STACKTRACE:
java.net.SocketExcepti ......
php和java通用sql语句法
SELECT max(id) from table
该方法在多线程等情况下可能会造成不正确。
java三种方法
1、根据ps的getGeneratedKeys
PreparedStatement ps = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS); //红色是关键
ps.executeUpdate(); //执行后
ResultSet rs = ps.getGeneratedKeys ......
今天遇到数据库的一个问题,就是每当从主表中删除一个主键id时,由于与他相关联的表中有相关的字段数据,所以无法删除。查了一大堆资料,发现我建表关联用的是on Restrict.可能问题就出在这里吧。
外键约束对子表的含义:
如果在父表中找不到候选键,则不允许在子表上进行insert/update
外键约束 ......