当前位置: 首页 - Database
显示模式: 普通 | 列表

MySQL select in 排序问题

表结构如下:
mysql> select * from test;
+----+-------+
| id | name |
+----+-------+
| 1 | test1 |
| 2 | test2 |
| 3 | test3 |
| 4 | test4 |
| 5 | test5 |
+----+-------+

执行以下SQL:
mysql> select * from test where id in(3,1,5);
+----+-------+
| id | name |
+----+-------+
| 1 | test1 |
| 3 | test3 |
| 5 | test5 |
+----+-------+
3 rows in set (0.00 sec)

这个select在mysql中得结果会自动按照id升序排列,
但是我想执行"select * from test where id in(3,1,5);"的结果按照in中得条件排序,即:3,1,5,

想得到的结果如下:
id name
3 test3
1 test1
5 test5

请问在这样的SQL在Mysql中怎么写?
网上查到sqlserver中可以用order by charindex解决,但是没看到Mysql怎么解决??请高手帮忙,谢

谢!

select * from a order by substring_index('3,1,2',id,1);

试下这个good,ls正解。


order by find_in_set(id,'3,1,5')

谢谢,经测试order by substring_index和order by find_in_set都可以



阅读全文...

标签: 排序 

分类: Database | MySQL  引用: 2  评论: 2  点击: 68

Linux下MySQL configure参数

--prefix=/program/mysql 安装路径

--localstatedir=/var/lib/mysql 数据库文件存放路径

--with-comment=Source

--with-server-suffix=-Community

--with-mysqld-user=mysql

--without-debug

--with-big-tables

--with-charset=gbk utf8

--with-collation=gbk_chinese_ci utf8_unicode_ci

--with-extra-charsets=all

--with-pthread

--enable-static

--enable-thread-safe-client

--with-client-ldflags=-all-static

--with-mysqld-ldflags=-all-static

--enable-assembler

--without-innodb

--without-isam

--without-ndb-debug

--with-unix-socket-path=/home/mysql/tmp/mysql.sock



阅读全文...

标签: Linux  configure 

分类: Database | MySQL  引用: 0  评论: 0  点击: 172

Table 'xxxx' is marked as crashed...

今天VODCMS的管理员反映无法登陆后台,我想可能是Apache或者数据库又出错了。

重启了下Apache,正如所料想的一样,问题依旧。

查看了一下数据库的表,发现有个表出错了,修复不能!

Table Op Msg_type Msg_text
vodcms.vodcms_members optimize Error Table '.\vodcms\vodcms_members' is marked as crash...
vodcms.vodcms_members optimize Error Table 'vodcms_members' is marked as crashed and la...
vodcms.vodcms_members optimize error Corrupt


网上搜了搜,发现这个错误很严重,数据基本上没有了,不管用MySQL提供的修复工具还是PhpMyAdmin都修复不能,查看了下data文件夹,发现少了个*.MYD文件。

所以呢,从新从网上下了个VODCMS5.0将错误的表重新创建,数据重新导入,


要是错误出在其他的重要的数据表上的话问题可就严重了。

记得前些时候BBS的post表也出过错,不过能修复好,要是出现这样的错误可就严重了。


所以以后记得要随时备份数据库。



阅读全文...

标签: crashed 

分类: Database | MySQL  引用: 0  评论: 0  点击: 3

MySQL中把一个查询结果插入到另外一个表中

insert into best_quote( quote_id, product_id, quote_type, quote_price, quote_amount, quote_time, company_id )
select quote_id, product_id, quote_type, quote_price, quote_amount, quote_time, company_id
from quote
where product_id = 4
and quote_type = 1;


阅读全文...

标签: mysql  insert  select 

分类: Database | MySQL  引用: 0  评论: 0  点击: 38

Duplicate entry '' for key 1 的错误解决

今天学校BBS抽风,刚Apache出了小问题解决了,没过几分钟又出问题了,这下是无法回帖。

用httpwatcher看看了,发现是数据库出错了,出现了 Duplicate entry 'xxxxxxxxxx' for key 1的错误,网上搜了搜,确定是表索引数据结构坏掉了,应该修复一下,使用MYSQL自带的myisamchk工具,MYSQL带的工具都很多并且比较实用,不过都是字符界面的。





问题解决了。



阅读全文...
分类: Database | MySQL  引用: 0  评论: 0  点击: 13

MySQL外键(foreign key)的用法

在MySQL中MyISAM和InnoDB存储引擎都支持外键(foreign key),但是MyISAM只能支持语法,却不能实际使用。下面通过例子记录下InnoDB中外键的使用方法:

创建主表:
mysql> create table parent(id int not null,primary key(id)) engine=innodb;
Query OK, 0 rows affected (0.04 sec)
创建从表:
mysql> create table child(id int,parent_id int,foreign key (parent_id) references parent(id) on delete cascade) engine=innodb;
Query OK, 0 rows affected (0.04 sec)


插入主表测试数据:
mysql> insert into parent values(1),(2),(3);
Query OK, 3 rows affected (0.03 sec)
Records: 3 Duplicates: 0 Warnings: 0
插入从表测试数据:
mysql> insert into child values(1,1),(1,2),(1,3),(1,4);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test/child`, CONSTRAINT `child_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`id`) ON DELETE CASCADE)

因为4不在主表中,插入时发生了外键约束错误。

只插入前三条:
mysql> insert into child values(1,1),(1,2),(1,3);
Query OK, 3 rows affected (0.03 sec)
Records: 3 Duplicates: 0 Warnings: 0
成功!


删除主表记录,从表也将同时删除相应记录:
mysql> delete from parent where id=1;
Query OK, 1 row affected (0.03 sec)


阅读全文...

标签: 外键 

分类: Database | MySQL  引用: 0  评论: 0  点击: 16

企业应用开发中的数据库设计模式

一、引言
现代的企业开发中,越来越多地引入了多层架构设计模式,即使是小型的企业信息系统也逐渐向多层架构发展,以满足系统的可伸缩性以及可维护性。目前企业开发的平台占主导地位的是 J2EE 和 .NET 两大平台,本文并不是去对比两大平台的优缺点,以免引发宗教式的争论,而是在两大平台的基础上探讨如何进行数据库的设计,将设计模式引入到数据库设计中,以期达到良好的、可管理、可伸缩的数据库设计。
传统的数据库设计理论,更加关注的是数据库设计范式,这是数据库设计必须要遵守的规则:
第一范式(1NF): 在关系模式R中的每一个具体关系r中,如果每个属性值都是不可再分的最小数据单位,则称R是属于第一范式的关系。
第二范式(2NF): 如果关系模式R(U,F)中的所有非主属性都完全依赖于任意一个候选关键字,则称 R是属于第二范式的。
第三范式(3NF): 如果关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递信赖,则称 R是属于第三范式的。
一般认为设计数据库时能够达到第三范式即可,这也是大部分数据库原理课程所要求的数据库设计结果。但现代关系数据库管理系统中,除了支持数据库中的数据查询、更改、插入和删除外,更有强大的企业级功能支持,像存储过程、触发器和分布式查询处理,无疑,我们的数据库设计如果只满足几个范式的话,充其量只是完成了数据的存取要求,而无法和企业程序良好的结合。在设计企业应用中,数据库是企业应用中最重要的一层,是企业应用的信息起点和终点。如何将业务逻辑在数据库系统设计中正确、良好的表达,不仅涉及到系统实现的不同方式,也涉及到企业应用的成功与否。
 


阅读全文...

标签: 数据库设计  企业  模式  应用  开发 

分类: Database | Related  引用: 0  评论: 0  点击: 9

MySQL视图简介

一. 视图概述

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。

视图是存储在数据库中的查询的SQL 语句,它主要出于两种原因:安全原因, 视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原因是可使复杂的查询易于理解和使用。


  视图:查看图形或文档的方式。


  视图是从一个或多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。和表一样,视图也是包括几个被定义的数据列和多个数据行,但就本质而言这些数据列和数据行来源于其所引用的表。


  所以视图不是真实存在的基础表而是一张虚表,视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。


阅读全文...

标签: MySQL  视图 

分类: Database | MySQL  引用: 0  评论: 0  点击: 6

update的多表更新

在开发中,数据库来回换,而有些关键性的语法又各不相同,这是一件让开发人员很头痛的事情.本文总结了Update语句更新多表时在SQL Server,Oracle,MySQL三种数据库中的用法.我也试了SQLite数据库,都没成功,不知是不支持多表更新还是咋的. 在本例中: 我们要用表gdqlpj中的gqdltks,bztks字段数据去更新landleveldata中的同字段名的数据,条件是当landleveldata 中的GEO_Code字段值与gdqlpj中的lxqdm字段值相等时进行更新.

SQL Server语法:UPDATE { table_name WITH ( < table_hint_limited > [ ...n ] ) | view_name | rowset_function_limited } SET { column_name = { expression | DEFAULT | NULL } | @variable = expression | @variable = column = expression } [ ,...n ] { { [ FROM { < table_source > } [ ,...n ] ] [ WHERE < search_condition > ] } | [ WHERE CURRENT OF { { [ GLOBAL ] cursor_name } | cursor_variable_name } ] } [ OPTION ( < query_hint > [ ,...n ] ) ]

SQL Server示例: update a set a.gqdltks=b.gqdltks,a.bztks=b.bztks from landleveldata a,gdqlpj b where a.GEO_Code=b.lxqdm




Oracle语法: UPDATE updatedtable SET (col_name1[,col_name2...])= (SELECT col_name1,[,col_name2...] FROM srctable [WHERE where_definition])
 
Oracel 示例: update landleveldata a set (a.gqdltks, a.bztks)= (select b.gqdltks, b.bztks from gdqlpj b where a.GEO_Code=b.lxqdm)
 


阅读全文...
分类: Database | Related  引用: 0  评论: 0  点击: 23

mysql_query函数只能执行一条SQL语句

        这里做一下笔记,这说明MYSQL+PHP的安全性很高的。
 
###The reason that multiple queries are not supported is to help prevent exploits.###
 
For example, the user could enter something like:
 
  "; DELETE * FROM users;
 
in the name field of a form, which would erase everything in the table when the query is executed.
By allowing mysql_query to support only single commands, this hole is closed.



Modified At 2008-06-08 13:20:46


阅读全文...

标签: SQL注入  函数用法  PHP安全 

分类: Database | MySQL  引用: 1  评论: 1  点击: 245