mysql数据库语句,查询语句,不包含敏感词的sql语句,怎么写?

MySQL,是一个关系型数据库管理系统,由瑞典MySQL
AB公司开发,目前属于Oracle公司。关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。
一、MySQL的概要:
1、可以处理拥有上千万条记录的大型数据
2、支持常见的SQL语句规范
3、可移植性强,安装简单小巧
4、良好的运行效率,有丰富信息的网络支持
5、调试、管理、优化简单(相对其它大型数据库)
二、访问MySQL的几种途径
MySQL默认使用的是3306端口。
1、使用MySQL的官方工具访问:MySQL Administrator tool
2、使用第三方工具访问:Mysqlexec、mysql连接器
3、使用web的方式访问:phpMyAdmin(最常见)(在wamp中有这个选项)
比较:使用客户端工具操作效率高,安全性高;使用WEB方式简单方便,不受限制。
三、数据库中常用字段类型
整数型:TINYINT、SMALLINT、INT、BGINT
小数型:FLOAT、DOUBLE、DECIMAL(M,D)
字符型:CHAR、VARCHAR
日期型:DATETIME、DATE、TIMESTAMP
备注型:TINYTEXT、TEXT、LONGTEXT
四、创建一个简单的数据库
创建一个数据库命令:CREATE TABLE '表名'
删除一个数据库命令:DROP TABLE '表名'
修改一个字段名称:RENAME TABLE '原字段' TO ‘新字段’;
删除一个字段:ALTER TABLE '表名' DROP '原字段'
插入一个字段:ALTER TABLE '表名' ADD '新字段'...AFTER '原字段'
CREATE TABLE {
‘id'&&int(10) NOT NULL auto_
'uid' varchar(10) NOT NULL default '0';
'regdate' date NOT NULL;
'remark' text NULL;
PRIMARY KEY('id')
NOT NULL的意思值变量不能为空。代码第一行的auto_increment的意思是自动累加,第二行的default '0'的意思是变量的初始值。每个语句用逗号分隔开。PRIMARY KEY是主键的意思,主键是表中的一个或多个字段,它的值用于惟一地标识表中的某一条记录。在两个表的关系中,主关键字用来在一个表中引用来自于另一个表中的特定记录。主关键字是一种唯一关键字,表定义的一部分。一个表不能有多个主关键字,并且主关键字的列不能包含空值。主关键字是可选的,并且可在
CREATE TABLE 或 ALTER TABLE 语句中定义。
五、数据库中的常用SQL语句
1、SELECT查询语句和条件语句
SELECT '查询字段' FROM '表名' WHERE 条件
查询字段:可用通配符:*(使用全部字段)、字段名、字段别名(多个字段时,用逗号将字段名分隔开。
表名:数据库.表名、表名
常用条件:=等于、&&不等于、in包含、not in不包含、like匹配、BETWEEN在范围、not BETWEEN不在范围、&、&
条件运算:and、or、()
2、排序,分组,指针查询,计算
分组语句:group by 字段(通过字段内容分组,如果有order时,语句的最后在order之前)
排序语句:order by 字段,字段 ASC/DESC(根据字段来排序,如果有limit语句时,语句的最后在limit之前,ASC是正序排序,DESC是倒序排序,默认的是正序排序)
指针查询:limit初始值,结束值(语句最后)
几个函数:
COUNT(*) 统计函数
MAX(*) 最大值函数
MIN(*) 最小值函数
AVG(*) 平均值函数
SUM(*) 累计值函数
3、insert 插入语句
insert into 表名 (字段...,...)values(值...,...)
insert into 表名values(值...,...)
插入时要考虑字段类型避免插入后出现缺值,乱码现象。
4、更新语句
UPDATE 表名 SET 字段 = 值 WHERE 条件 limit(条件可省略)
5、删除语句
DELETE FROM 表名 WHERE 条件 limit(条件可省略)
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:42581次
积分:1299
积分:1299
排名:第12949名
原创:88篇
转载:32篇
(1)(6)(7)(20)(4)(2)(9)(8)(6)(9)(2)(5)(4)(1)(21)(12)(3)本文欢迎转载,转载请注明:转载自IT168: []
企业级官方微信
IT精英高峰论坛
正在努力加载文档,请稍等…
点击或扫描下载
点击或扫描下载您现在的位置:&&>>&&>>&&>>&&>>&正文
在MySQL数据库中使用C执行SQL语句
  与PostgreSQL相似,可使用许多不同的语言来访问MySQL,包括C、、和Perl。从Professional Linux Programming中第5章有关MySQL的下列章节中,Neil Matthew和Richard Stones使用详尽的MySQL C接口向我们介绍了如何在MySQL数据库中执行SQL语句。他们将讨论返回数据的语句,例如INSERT以及不返回数据的语句,例如UPDATE和DELETE。然后,他们将编写从数据库检索数据的简单程序。    执行SQL语句    现在,我们已经有了一个连接,并且知道如何处理错误,是时候讨论使用我们的数据库来作一些实际工作了。执行所有类型的SQL的主关键字是mysql_query:    int mysql_query(MYSQL *connection, const char *query)    正如您所见,它非常简单。它取一个指向连接结构的指针和包含要执行的SQL的文本字符串;与命令行工具不同,将不使用结束分号。成功之后,返回0。在需要包含二进制数据的特殊情况下,可以使用相关的函数,mysql_real_query。虽然出于本章的目的,我们仅需要讨论mysql_query。    不返回数据的SQL语句    我们将先讨论UPDATE、DELETE和INSERT语句。因为它们不返回数据,所以更易于使用。    这里我们将介绍的另一个重要函数是检查受影响的行数的函数:    my_ulonglong mysql_affected_rows(MYSQL *connection);    可能关于这一函数的最显而易见的事就是其非同寻常的返回结果。由于可移植性原因,这是一个特殊的无符号类型。为了在printf中使用,建议将其强制转换成使用%lu格式规范的无符号长整数。这个函数返回受以前的UPDATE、INSERT或DELETE查询影响的行数,这些查询是使用mysql_query执行的。    通常对于mysql_函数,返回码0表示没有行受影响;正数表示实际结果,通常是受影响的行数。    如前所述,当使用mysql_affected_rows时可能出现未期望的结果。让我们先讨论受INSERT语句影响的行数,它将按预期进行操作。将下列代码添加到程序 connect2.c 中,并且称其为insert1.c:    #include  #include  #include "mysql.h"  int main(int argc, char *argv[]) {  MYSQL my_        mysql_init(&my_connection);  if (mysql_real_connect(&my_connection, "localhost",  "rick", "bar", "rick", 0, NULL, 0)) {  printf("Connection success\n");    res = mysql_query(&my_connection,  "INSERT INTO children(fname,age),  VALUES('Ann',3)");  if (!res) {  printf("Inserted %lu rows\n",  (unsigned long)mysql_affected_rows(&my_connection));  } else {  fprintf(stderr, "Insert error %d: s\n",mysql_errno ,  (&my_connection),  mysql_error(&my_connection));  }  mysql_close(&my_connection);  } else {  fprintf(stderr, "Connection failed\n");  if (mysql_errno(&my_connection)) {  fprintf(stderr, "Connection error %d: %s\n",  mysql_errno(&my_connection),  mysql_error(&my_connection));  }  }  return EXIT_SUCCESS;  }    正如预期,插入的行数为1。    现在,我们更改代码,所以 'insert' 部分被替换成:    mysql_errno(&my_connection), mysql_error(&my_connection));  }  }    res = mysql_query(&my_connection, "UPDATE children SET AGE = 4    WHERE fname = 'Ann'");    if (!res) {  printf("Updated %lu rows\n",    (unsigned long)mysql_affected_rows(&my_connection));  } else {    fprintf(stderr, "Update error %d: %s\n",  mysql_errno(&my_connection),  mysql_error(&my_connection));  }    现在假设子表中有的数据,如下:    childno fname age  1  2    3    4    5    6    7    8    9    10    11  Jenny  Andrew    Gavin    Duncan    Emma    Alex    Adrian    Ann    Ann    Ann    Ann  14  10    4    2    0    11    5    3    4    3    4    如果我们执行update1,希望报告的受影响行数为4,但是实际上程序报告2,因为它仅必须更改2行,虽然WHERE子句标识了4行。如果想让mysql_affected_rows报告的结果为4这可能是熟悉其它数据库的人所期望的),则需要记住将CLIENT_FOUND_ROWS标志传递到mysql_real_connect,在 update2.c中的程序如下:    if (mysql_real_connect(&my_connection, "localhost",  "rick", "bar", "rick", 0, NULL, CLIENT_FOUND_ROWS)) {    如果我们在数据库中复位数据,然后运行带有这种修改的程序,则它报告的行数为4。    函数mysql_affected_rows还有最后一个奇怪之处,它发生在从数据库中删除数据时。如果使用WHERE子句,则mysql_affected_rows将按预期返回删除行数。但是,如果没有WHERE子句,则删除所有行,报告受影响的行数却为0。这是因为由于效率原因优化删除整个表。这种行为不受CLIENT_FOUND_ROWS选项标志的影响。    返回数据的语句    现在是时候讨论SQL的最普遍用法了,从数据库检索数据的SELECT语句。    MySQL 还支持返回结果的SHOW、DESCRIBE和EXPLAIN SQL语句,但是这里不考虑它们。按惯例,手册中包含这些语句的说明。    您将会从PostgreSQL章记起,可以从PQexec中的SQL SELECT 语句检索数据,这里马上获取所有数据,或者使用游标从数据库中逐行检索数据,以便搞定大数据。    由于完全相同的原因,MySQL的检索方法几乎完全相同,虽然它实际上不用游标的形式描述逐行检索。但是,它提供了缩小这两种方法间差异的API,如果需要,它通常使两种方法的互换更加容易。    通常,从MySQL数据库中检索数据有4个阶段:    发出查询    检索数据    处理数据    执行所需的任何整理    象以前一样,我们使用mysql_query发出查询。数据检索是使用mysql_store_result或mysql_use_result完成的,这取决于想如何检索数据,随后使用mysql_fetch_row调用序列来处理数据。最后,必须调用mysql_free_result以允许MySQL执行任何所需的整理。    全部立即数据检索的函数    可以从SELECT语句(或其他返回数据的语句)中检索完所有数据,在单一调用中,使用mysql_store_result:    MYSQL_RES *mysql_store_result(MYSQL *connection);    必须在mysql_query检索数据后才能调用这个函数,以在结果集中该数据。这个函数从中检索所有数据并立即将它在客户机中。它返回一个指向以前我们从未遇到过的结构(结果集结构)的指针。如果语句失败,则返回NULL。    使用等价的PostgreSQL时,应该知道返回NULL意味着已经发生了错误,并且这与未检索到数据的情况不同。即使,返回值不是NULL,也不意味着当前有数据要处理。    如果未返回NULL,则可以调用mysql_num_rows并且检索实际返回的行数,它当然可能是0。    my_ulonglong mysql_num_rows(MYSQL_RES *result);    它从mysql_store_result取得返回的结果结构,并且在该结果集中返回行数,行数可能为0。如果mysql_store_result成功,则mysql_num_rows也总是成功的。    这种mysql_store_result和mysql_num_rows的组合是检索数据的一种简便并且直接的方法。一旦mysql_store_result成功返回,则所有查询数据都已经存储在客户机上并且我们知道可以从结果结构中检索它,而不用担心会发生数据库或网络错误,因为对于程序所有数据都是本地的。还可以立即发现返回的行数,它可以使编码更简便。如前所述,它将所有结果立即地发送回客户机。对于大结果集,它可能耗费大量的、网络和客户机资源。由于这些原因,使用更大的数据集时,最好仅检索需要的数据。不久,我们将讨论如何使用mysql_use_result函数来完成该操作。    一旦检索了数据,则可以使用mysql_fetch_row来检索它,并且使用mysql_data_seek、mysql_row_seek、mysql_row_tell操作结果集。在开始检索数据阶段之前,让我们先讨论一下这些函数。    MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);    这个函数采用从存储结果中获取的结果结构,并且从中检索单一行,在行结构中返回分配给您的数据。当没有更多数据或者发生错误时,返回NULL。稍后,我们将回来处理这一行中的数据。    void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);    这个函数允许您进入结果集,设置将由下一个获取操作返回的行。offset是行号,它必须在从0到结果集中的行数减 1 的范围内。传递0将导致在下一次调用mysql_fetch_row时返回第一行。    MYSQL_ROW_OFFEST mysql_row_tell(MYSQL_RES *res
【责编:admin】
?&[]?&[]?&[]?&[]?&[]?&[]?&[]?&[]?&[]?&[]
相关产品和培训
 友情推荐链接
 专题推荐
 ? ? ? ? ? ? ? ? ? ?
 今日更新
?&?&?&?&?&?&?&?&?&?&
 认证培训
 频道精选
 Windows频道导航
                      新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
空间积分0 信誉积分100 UID8490758阅读权限70积分6608帖子精华可用积分6606 专家积分60 在线时间513 小时注册时间最后登录
富足长乐, 积分 6608, 距离下一级还需 1392 积分
帖子主题精华可用积分6606 专家积分60 在线时间513 小时注册时间最后登录
论坛徽章:0
原文参见:
数据库中一共有30个表名类似,结构相同的表,从message_0 到 message_30,字段略为:
messageid int(9) PRI auto_increment
userid int(11)
content text
每个表中都有可能有userid=10000的记录,为了查询所有记录用到union语句,第一次拼出一个sql为:
select * from message_0 where userid=10000 union all select * from message_1 where userid=10000 union all select * from message_2 where userid=10000;
应用到union all,这个跟union区别就是不会去除重复数据,后面的类似添加:
union all select * from message_(数字序列) where senduserid=10000
拼出一个0-30之间超长无比的大sql,记录都可以查询出。现在又有个新问题,如果按照messageid排序呢。重新修改如下:
select * from(select * from message_0 where userid=10000 order by messageid desc) as tmp_0 union all select * from (select * from message_1 where userid=10000 order by messageid desc) as tmp_1 union all select * from (select * from message_2 where userid=10000 order by messageid desc) as tmp_2;
重点就是用as一个表名select * from (select * from table order by id desc) as tmpname,类似添加:
union all select * from (select * from message_(数字序列) where userid=10000 order by messageid desc) as tmp_(数字序列)
现在发现所有记录都可以按照messageid倒序排列了,OK!
这样的语法在MySQL里查询速度竟然还不慢,还可以这样查询。
最后贴出sql全文。绝对是我写的最长的sql语句了。无语,这绝对不是我想这样的。
select * from(select * from message_0 where userid=10000 order by messageid desc) as tmp_0 union all select * from (select * from message_1 where userid=10000 order by messageid desc) as tmp_1 union all select * from (select * from message_2 where userid=10000 order by messageid desc) as tmp_2 union all select * from (select * from message_3 where userid=10000 order by messageid desc) as tmp_3 union all select * from (select * from message_4 where userid=10000 order by messageid desc) as tmp_4 union all select * from (select * from message_5 where userid=10000 order by messageid desc) as tmp_5 union all select * from (select * from message_6 where userid=10000 order by messageid desc) as tmp_6 union all select * from (select * from message_7 where userid=10000 order by messageid desc) as tmp_7 union all select * from (select * from message_8 where userid=10000 order by messageid desc) as tmp_8 union all select * from (select * from message_9 where userid=10000 order by messageid desc) as tmp_9 union all select * from (select * from message_10 where userid=10000 order by messageid desc) as tmp_10 union all select * from (select * from message_11 where userid=10000 order by messageid desc) as tmp_11 union all select * from (select * from message_12 where userid=10000 order by messageid desc) as tmp_12 union all select * from (select * from message_13 where userid=10000 order by messageid desc) as tmp_13 union all select * from (select * from message_14 where userid=10000 order by messageid desc) as tmp_14 union all select * from (select * from message_15 where userid=10000 order by messageid desc) as tmp_15 union all select * from (select * from message_16 where userid=10000 order by messageid desc) as tmp_16 union all select * from (select * from message_17 where userid=10000 order by messageid desc) as tmp_17 union all select * from (select * from message_18 where userid=10000 order by messageid desc) as tmp_18 union all select * from (select * from message_19 where userid=10000 order by messageid desc) as tmp_19 union all select * from (select * from message_20 where userid=10000 order by messageid desc) as tmp_20 union all select * from (select * from message_21 where userid=10000 order by messageid desc) as tmp_21 union all select * from (select * from message_22 where userid=10000 order by messageid desc) as tmp_22 union all select * from (select * from message_23 where userid=10000 order by messageid desc) as tmp_23 union all select * from (select * from message_24 where userid=10000 order by messageid desc) as tmp_24 union all select * from (select * from message_25 where userid=10000 order by messageid desc) as tmp_25 union all select * from (select * from message_26 where userid=10000 order by messageid desc) as tmp_26 union all select * from (select * from message_27 where userid=10000 order by messageid desc) as tmp_27 union all select * from (select * from message_28 where userid=10000 order by messageid desc) as tmp_28 union all select * from (select * from message_29 where userid=10000 order by messageid desc) as tmp_29 union all select * from (select * from message_30 where userid=10000 order by messageid desc) as tmp_30;
用户名改成smallfish_xy拉!
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
空间积分34 信誉积分994 UID4293阅读权限100积分8586帖子精华可用积分8588 专家积分175 在线时间6363 小时注册时间最后登录
帖子主题精华可用积分8588 专家积分175 在线时间6363 小时注册时间最后登录
认证徽章论坛徽章:5
sql语句追求短而不是长
空间积分0 信誉积分100 UID8490758阅读权限70积分6608帖子精华可用积分6606 专家积分60 在线时间513 小时注册时间最后登录
富足长乐, 积分 6608, 距离下一级还需 1392 积分
帖子主题精华可用积分6606 专家积分60 在线时间513 小时注册时间最后登录
论坛徽章:0
原帖由 ruochen 于
11:57 发表
sql语句追求短而不是长
只是为了显示下mysql还能这般用,没别的意思。
用户名改成smallfish_xy拉!
空间积分0 信誉积分103 UID772339阅读权限20积分681帖子精华可用积分681 专家积分0 在线时间678 小时注册时间最后登录
丰衣足食, 积分 681, 距离下一级还需 319 积分
帖子主题精华可用积分681 专家积分0 在线时间678 小时注册时间最后登录
论坛徽章:0
谁他妈写程序写成这样我直接第一个开了他.
空间积分0 信誉积分100 UID7380356阅读权限30积分1032帖子精华可用积分1032 专家积分20 在线时间4327 小时注册时间最后登录
家境小康, 积分 1032, 距离下一级还需 968 积分
帖子主题精华可用积分1032 专家积分20 在线时间4327 小时注册时间最后登录
论坛徽章:0
谁他妈写程序写成这样我直接第一个开了他.
不要这样气愤啊!
总是要给人改过自新的机会的
空间积分0 信誉积分100 UID8490758阅读权限70积分6608帖子精华可用积分6606 专家积分60 在线时间513 小时注册时间最后登录
富足长乐, 积分 6608, 距离下一级还需 1392 积分
帖子主题精华可用积分6606 专家积分60 在线时间513 小时注册时间最后登录
论坛徽章:0
原帖由 jinmiaobis 于
13:18 发表
谁他妈写程序写成这样我直接第一个开了他.
哈哈,不是我想写这么长,是设计的太过强悍。
这么搓的语句mysql竟然也能跑出来,很佩服。
用户名改成smallfish_xy拉!
空间积分0 信誉积分80 UID阅读权限20积分722帖子精华可用积分722 专家积分0 在线时间340 小时注册时间最后登录
丰衣足食, 积分 722, 距离下一级还需 278 积分
帖子主题精华可用积分722 专家积分0 在线时间340 小时注册时间最后登录
论坛徽章:0
原帖由 jinmiaobis 于
13:18 发表
谁他妈写程序写成这样我直接第一个开了他.
谁写这么长我发配他到清朝给老太太缠裹脚布去。
空间积分346 信誉积分1231 UID阅读权限100积分10548帖子精华可用积分10550 专家积分50 在线时间2116 小时注册时间最后登录
帖子主题精华可用积分10550 专家积分50 在线时间2116 小时注册时间最后登录
认证徽章论坛徽章:13
ms sql 的最多好像可以包含 255 个select子查询,MYSQL当然也不能输啦
空间积分0 信誉积分136 UID42810阅读权限10积分168帖子精华可用积分168 专家积分0 在线时间7 小时注册时间最后登录
白手起家, 积分 168, 距离下一级还需 32 积分
帖子主题精华可用积分168 专家积分0 在线时间7 小时注册时间最后登录
论坛徽章:0
4和5执行这类还是有区别的哟。需要特别注意一下
-----------------------------
学习学习在学习...不懂不懂真不懂!!
---------------------------
空间积分804 信誉积分114 UID706071阅读权限50积分2562帖子精华可用积分2562 专家积分428 在线时间354 小时注册时间最后登录
小富即安, 积分 2562, 距离下一级还需 2438 积分
帖子主题精华可用积分2562 专家积分428 在线时间354 小时注册时间最后登录
论坛徽章:0
如果效率真的不低倒也无所谓,不过我看楼主的那句肯定有隐患。
且不说里面有若干无意义的select。
先对messageid排序再union,最后得到的结果并不一定是真正排好序的结果,完全可以把排序放在union后。
另外,sql字符串是有长度限制的,当sql字符串长度超过你系统的设定值,执行就会出错。
另外现在的mysql有内置表分区功能,不必再去费神自己再搞一套了吧。
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处

我要回帖

更多关于 文献综述怎么写 的文章

 

随机推荐