当前位置:文档之家› 功能强大的MySQL数据库操作类.

功能强大的MySQL数据库操作类.

功能强大的MySQL数据库操作类.
功能强大的MySQL数据库操作类.

功能强大的MySQL数据库操作类

主要功能有:MySQL常用操作、分页、导入与导出SQL文件、获取IP、MySQL错误提示等,相关的图片、css和js都已经放在附件里面了,自己下载研究吧!

PHP代码:

header('Content-Type:text/html; charset=utf-8');

basename($_SERVER['PHP_SELF'])=='mysql.inc.php'&&header('Location:http://'.$_SERVER['HTTP_H OST']); //禁止直接访问本页

/**

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※【文件名】: mysql.inc.php

【作用】: mysql数据库操作类

【作者】: Riyan

【版本】: version 2.0

【修改日期】: 2010/02/11

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

**/

class mysql{

private $host; // 数据库主机

private $user; // 数据库用户名

private $pass; // 数据库密码

private $data; // 数据库名

private $conn; // 数据库连接标识

private $sql; // sql语句

private $code; // 数据库编码,GBK,UTF8,GB2312

private $result; // 执行query命令的结果数据集

private $errLog=true; // 是否开启错误日志,默认开启

private $showErr=true; // 显示所有错误,具有安全隐患,默认开启

private $pageNo=1; // 当前页

private $pageAll=1; // 总页数

private $rsAll=0; // 总记录

private $pageSize=10; // 每页显示记录条数

/******************************************************************

-- 函数名:__construct($host,$user,$pass,$data,$code,$conn)

-- 作用:构造函数

-- 参数:$host 数据库主机地址(必填)

$user 数据库用户名(必填)

$pass 数据库密码(必填)

$data 数据库名(必填)

$conn 数据库连接标识(必填)

$code 数据库编码(必填)

-- 返回值:无

-- 实例:无

*******************************************************************/

public function __construct($host,$user,$pass,$data,$code='utf8',$conn='conn'){

$this->host=$host;

$this->user=$user;

$this->pass=$pass;

$this->data=$data;

$this->conn=$conn;

$this->code=$code;

$this->connect();

}

public function __get($name){return $this->$name;}

public function __set($name,$value){$this->$name=$value;}

// 数据库连接

private function connect(){

if ($this->conn=='pconn') $this->conn=mysql_pconnect($this->host,$this->user,$this->pass); // 永久链接

else $this->conn=mysql_connect($this->host,$this->user,$this->pass); // 临时链接

if (!$this->conn) $this->show_error('无法连接服务器');

$this->select_db($this->data);

$this->query('SET NAMES '.$this->code);

$this->query("SET CHARACTER_SET_CLIENT='{$this->code}'");

$this->query("SET CHARACTER_SET_RESULTS='{$this->code}'");

}

// 数据库选择

public function select_db($data){

$result=mysql_select_db($data,$this->conn);

if (!$result) $this->show_error('无法连接数据库'.$data);

return $result;

/******************************************************************

-- 函数名:get_info($num)

-- 作用:取得MySQL 服务器信息

-- 参数:$num 信息值(选填)

-- 返回值:字符串

-- 实例:无

*******************************************************************/

public function get_info($num){

switch ($num){

case 1:

return mysql_get_server_info(); // 取得MySQL 服务器信息 break;

case 2:

return mysql_get_host_info(); // 取得MySQL 主机信息

break;

case 3:

return mysql_get_proto_info(); // 取得MySQL 协议信息

break;

default:

return mysql_get_client_info(); // 取得MySQL 客户端信息 }

}

/******************************************************************

-- 函数名:query($sql)

-- 作用:数据库执行语句,可执行查询添加修改删除等任何sql语句 -- 参数:$sql sql语句(必填)

-- 返回值:布尔

-- 实例:无

*******************************************************************/

public function query($sql){

if (empty($sql)) $this->show_error('SQL语句为空');

$this->sql=preg_replace('/ {2,}/',' ',trim($sql));

$this->result=mysql_query($this->sql,$this->conn);

if (!$this->result) $this->show_error('SQL语句有误',true);

return $this->result;

}

/******************************************************************

-- 函数名:create_db($data)

-- 作用:创建添加新的数据库

-- 参数:$data 数据库名称(必填)

-- 返回值:字符串

-- 实例:无

*******************************************************************/

public function create_database($data=''){$this->query("CREATE DATABASE {$data}");}

// 查询服务器所有数据库

public function show_database(){

$this->query('SHOW DATABASES');

$db=array();

while ($row=$this->fetch_array()) $db[]=$row['Database'];

return $db;

}

// 查询数据库下所有的表

public function show_tables($data=''){

if (!empty($data)) $db=' FROM '.$data;

$this->query('SHOW TABLES'.$data);

$tables=array();

while ($row=$this->fetch_row()) $tables[]=$row[0];

return $tables;

}

/******************************************************************

-- 函数名:copy_tables($tb1,$tb2,$where)

-- 作用:复制表

-- 参数:$tb1 新表名(必填)

$tb2 待复制表的表名(必填)

$Condition 复制条件(选填)

-- 返回值:布尔

-- 实例:无

*******************************************************************/

public function copy_tables($tb1,$tb2,$Condition=''){$this->query("SELECT * INTO `{$tb1}` FROM `{$tb2}` {$Condition}");}

/******************************************************************

-- 函数名:Get($Table,$Fileds,$Condition,$Rows)

-- 作用:查询数据

-- 参数:$Table 表名(必填)

$Fileds 字段名,默认为所有(选填)

$Condition 查询条件(选填)

$Rows 待查询记录条数,为0表示不限制(选填)

-- 返回值:布尔

-- 实例:$DB->Get('mydb','user,password','order by id desc',10)

*******************************************************************/

public function Get($Table,$Fileds='*',$Condition='',$Rows=0){

if (!$Fileds) $Fileds='*';

if ($Rows>0) $Condition.=" LIMIT 0,{$Rows}";

$sql="SELECT {$Fileds} FROM `{$Table}` {$Condition}";

return $this->query($sql);

}

// 只查询一条记录

public function GetRs($Table,$Fileds='*',$Condition=''){

if (!$Fileds) $Fileds='*';

$this->query("SELECT {$Fileds} FROM `{$Table}` {$Condition} LIMIT 0,1");

return $this->fetch_array();

}

/******************************************************************

-- 函数名:Add($Table,$Data)

-- 作用:添加数据

-- 参数:$Table 表名(必填)

$Data 待添加数据,可以为数组(必填)

-- 返回值:布尔

-- 实例:$DB->Add('mydb',array('user'=>'admin','password'=>'123456','age'=>'18') 数组类型 $DB->Add('mydb','user=admin,password=123456,age=18') 字符串类型

*******************************************************************/

public function Add($Table,$Data){

if (!is_array($Data)){

$arr=explode(',',$Data);

$Data=array();

foreach ($arr as $val){

list($key,$val)=explode('=',$val);

if (!$val) $val='';

$Data[$key]=$val;

}

}

$Fileds='`'.implode('`,`',array_keys($Data)).'`';

$Value="'".implode("','",array_values($Data))."'";

return $this->query("INSERT INTO `{$Table}` ({$Fileds}) VALUES ({$Value})");

}

/******************************************************************

-- 函数名:Set($Table,$Data,$Condition,$unQuot)

-- 作用:更改数据

-- 参数:$Table 表名(必填)

$Data 待更改数据,可以为数组(必填)

$Condition 更改条件(选填)

$unQuot 不需要加引号的字段,用于字段的加减运算等情况,多个字段用,分隔或者写入一个数组(选填)

-- 返回值:布尔

-- 实例:$DB->Set('mydb',array('user'=>'admin','password'=>'123456','WHERE id=1') 数组类型

$DB->Set('mydb',"user='admin',password='123456'",'WHERE id=1') 字符串类型

*******************************************************************/

public function Set($Table,$Data,$Condition='',$unQuot=''){

if (is_array($Data)){

if (!is_array($unQuot)) $unQuot=explode(',',$unQuot);

foreach ($Data as $key=>$val){

$arr[]=$key.'='.(in_array($key,$unQuot)?$val:"'$val'");

}

$Value=implode(',',$arr);

}else $Value=$Data;

return $this->query("UPDATE `{$Table}` SET {$Value} {$Condition}");

}

/******************************************************************

-- 函数名:Del($Table,$Condition)

-- 作用:删除数据

-- 参数:$Table 表名(必填)

$Condition 删除条件(选填)

-- 返回值:布尔

-- 实例:$DB->Del('mydb','id=1')

*******************************************************************/

public function Del($Table,$Condition=''){return $this->query("DELETE FROM `{$Table}`".($Condition?" WHERE {$Condition}":''));}

// 取得结果数据

public function result($result=''){

if (empty($result)) $result=$this->result;

if ($result==null) $this->show_error('未获取到查询结果',true);

return mysql_result($result);

}

/******************************************************************

-- 函数名:fetch_array($Table,$Condition)

-- 作用:根据从结果集取得的行生成关联数组

-- 参数:$result 结果集(选填)

$type 数组类型,可以接受以下值:MYSQL_ASSOC,MYSQL_NUM 和MYSQL_BOTH(选填) -- 返回值:布尔

-- 实例:$DB->Del('mydb','id=1')

*******************************************************************/

public function fetch_array($result='',$type=MYSQL_BOTH){

if (!$result) $this->show_error('未获取到查询结果',true);

return mysql_fetch_array($result,$type);

}

// 获取关联数组,使用$row['字段名']

public function fetch_assoc($result=''){

if (empty($result)) $result=$this->result;

if (!$result) $this->show_error('未获取到查询结果',true);

return mysql_fetch_assoc($result);

}

// 获取数字索引数组,使用$row[0],$row[1],$row[2]

public function fetch_row($result=''){

if (empty($result)) $result=$this->result;

if (!$result) $this->show_error('未获取到查询结果',true);

return mysql_fetch_row($result);

}

// 获取对象数组,使用$row->content

public function fetch_obj($result=''){

if (empty($result)) $result=$this->result;

if (!$result) $this->show_error('未获取到查询结果',true);

return mysql_fetch_object($result);

}

// 取得上一步INSERT 操作产生的ID

public function insert_id(){return mysql_insert_id();}

// 指向确定的一条数据记录

public function data_seek($id){

if ($id>0) $id=$id-1;

if (!mysql_data_seek($this->result,$id)) $this->show_error('指定的数据为空'); return $this->result;

}

/******************************************************************

函数名:num_fields($result)

作用:查询字段数量

参数:$Table 数据库表名(必填)

返回值:字符串

实例:$DB->num_fields("mydb")

*******************************************************************/

public function num_fields($result=''){

if (!$result) $this->show_error('未获取到查询结果',true);

return mysql_num_fields($result);

}

// 根据select查询结果计算结果集条数

public function num_rows($result=''){

if (empty($result)) $result=$this->result;

$rows=mysql_num_rows($result);

if ($result==null){

$rows=0;

$this->show_error('未获取到查询结果',true);

}

return $rows>0?$rows:0;

}

// 根据insert,update,delete执行结果取得影响行数

public function affected_rows(){return mysql_affected_rows();}

// 获取地址栏参数

public function getQuery($unset=''){ //$unset表示不需要获取的参数,多个参数请用,分隔(例如:getQuery('page,sort'))

if (!empty($unset)){

$arr=explode(',',$unset);

foreach ($arr as $val) unset($_GET[$val]);

}

foreach ($_GET as $key=>$val) $list[]=$key.'='.urlencode($val);

return is_array($list)?implode('&',$list):'';

}

/******************************************************************

函数名:getPage($Table,$Fileds,$Condition,$pageSize)

作用:获取分页信息

参数:$Table 表名(必填)

$Fileds 字段名,默认所有字段(选填)

$Condition 查询条件(选填)

$pageSize 每页显示记录条数,默认10条(选填)

返回值:字符串

实例:无

*******************************************************************/

public function getPage($Table,$Fileds='*',$Condition='',$pageSize=10){

if (intval($pageSize)>0){$this->pageSize=intval($pageSize);}

if (isset($_GET['page']) && intval($_GET['page'])){$this->pageNo=intval($_GET['page']);}

if (empty($Fileds)){$Fileds='*';}

$sql="SELECT * FROM `{$Table}` {$Condition}";

$this->query($sql);

$this->rsAll=$this->num_rows();

if ($this->rsAll>0){

$this->pageAll=ceil($this->rsAll/$this->pageSize);

if ($this->pageNo<1){$this->pageNo=1;}

if ($this->pageNo>$this->pageAll){$this->pageNo=$this->pageAll;}

$sql="SELECT {$Fileds} FROM `{$Table}` {$Condition}".$this->limit(true);

$this->query($sql);

}

return $this->rsAll;

}

// 构造分页limit语句,和getPage()函数搭配使用

public function limit($str=false){

$n=($this->pageNo-1)*$this->pageSize;

return $str?' LIMIT '.$n.','.$this->pageSize:$n;

}

// 显示分页,必须和getPage()函数搭配使用

public function showPage($number=true){

$pageBar='';

if ($this->pageAll>1){

$pageBar.='

'.chr(10);

}

echo $pageBar;

}

// 获得客户端真实的IP地址

public function getip(){

if ($_SERVER['HTTP_X_FORWARDED_FOR']) return $_SERVER['HTTP_X_FORWARDED_FOR'];

elseif ($_SERVER['HTTP_CLIENT_IP']) return $_SERVER['HTTP_CLIENT_IP'];

elseif ($_SERVER['REMOTE_ADDR']) return $_SERVER['REMOTE_ADDR'];

elseif (getenv('HTTP_X_FORWARDED_FOR')) return getenv('HTTP_X_FORWARDED_FOR');

elseif (getenv('HTTP_CLIENT_IP')) return getenv('HTTP_CLIENT_IP');

elseif (getenv('REMOTE_ADDR')) return getenv('REMOTE_ADDR');

else return '';

}

/******************************************************************

-- 函数名:show_error($message,$sql)

-- 作用:输出显示错误信息

-- 参数:$msg 错误信息(必填)

$sql 显示错误的SQL语句,在SQL语句错误时使用(选填)

-- 返回值:字符串

-- 实例:无

*******************************************************************/

public function show_error($msg='',$sql=false){

$err='['.mysql_errno().']'.mysql_error();

if ($sql) $sql='SQL语句:'.$this->sql;

if ($this->errLog){

$dirs='error/'; //设置错误日志保存目录

$fileName=date('Y-m-d').'.log';

$filePath=$dirs.$fileName;

if (!is_dir($dirs)){

$dirs=explode('/',$dirs);

$temp='';

foreach($dirs as $dir){

$temp.=$dir.'/';

if (!is_dir($temp)){

mkdir($temp,0777) or die('__无法建立目录'.$temp.',自动取消记录错误信息');

}

}

$filePath=$temp.$fileName;

}

$text="错误事件:".$msg."\r\n错误原因:".$err."\r\n".($sql?$sql."\r\n":'')."客户端IP:".$this->getip()."\r\n记录时间:".date('Y-m-d H:i:s')."\r\n\r\n";

$log='错误日志:__'.(error_log($text,3,$filePath)?'此错误信息已被自动记录到日志'.$fileName:'写入错误信息到日志失败');

}

if ($this->showErr){

echo '

错误信息提示

';

exit();

}

}

/******************************************************************

-- 函数名:drop($table)

-- 作用:删除表(请慎用,无法恢复)

-- 参数:$table 要删除的表名,默认为所有(选填)

-- 返回值:无

-- 实例:$DB->drop('mydb')

*******************************************************************/

public function drop($table){

if ($table){

$this->query("DROP TABLE IF EXISTS `{$table}`");

}else{

$rst=$this->query('SHOW TABLES');

while ($row=$this->fetch_array()){

$this->query("DROP TABLE IF EXISTS `{$row[0]}`");

}

}

}

/******************************************************************

-- 函数名:makeSql($table)

-- 作用:从数据表读取信息并生成SQL语句

-- 参数:$table 待读取的表名(必填)

-- 返回值:字符串

-- 实例:无

*******************************************************************/

public function makeSql($table){

$result=$this->query("SHOW CREATE TABLE `{$table}`");

$row=$this->fetch_row($result);

$sqlStr='';

if ($row){

$sqlStr.="-- ---------------------------------------------------------------\r\n"; $sqlStr.="-- Table structure for `{$table}`\r\n";

$sqlStr.="-- ---------------------------------------------------------------\r\n"; $sqlStr.="DROP TABLE IF EXISTS `{$table}`;\r\n{$row[1]};\r\n";

$this->Get($table);

$fields=$this->num_fields();

if ($this->num_rows()>0){

$sqlStr.="\r\n";

$sqlStr.="-- ---------------------------------------------------------------\r\n"; $sqlStr.="-- Records of `{$table}`\r\n";

$sqlStr.="-- ---------------------------------------------------------------\r\n"; while ($row=$this->fetch_row()){

$comma='';

$sqlStr.="INSERT INTO `{$table}` VALUES (";

for($i=0;$i<$fields;$i++){

$sqlStr.=$comma."'".mysql_escape_string($row[$i])."'";

$comma=',';

}

$sqlStr.=");\r\n";

}

}

$sqlStr.="\r\n";

}

return $sqlStr;

}

/******************************************************************

-- 函数名:readSql($filePath)

-- 作用:读取SQL文件并过滤注释

-- 参数:$filePath SQL文件路径(必填)

-- 返回值:字符串/布尔/数组

-- 实例:无

*******************************************************************/

public function readSql($filePath){

if (!file_exists($filePath)) return false;

$sql=file_get_contents($filePath);

if (empty($sql)) return '';

$sql=preg_replace('/(\/\*(.*)\*\/)/s','',$sql); //过滤批量注释

$sql=preg_replace('/(--.*)|[\f\n\r\t\v]*/','',$sql); //过滤单行注释与回车换行符

$sql=preg_replace('/ {2,}/',' ',$sql); //将两个以上的连续空格替换为一个,可以省略这一步

$arr=explode(';',$sql);

$sql=array();

foreach ($arr as $str){

$str=trim($str);

if (!empty($str)) $sql[]=$str;

}

return $sql;

}

/******************************************************************

-- 函数名:saveSql($sqlPath,$table)

-- 作用:将当前数据库信息保存为SQL文件

-- 参数:$sqlPath SQL文件保存路径,如果为空则自动以当前日期为文件名并保存到当前目录(选填) $table 待保存的表名,为空着表示保存所有信息(选填)

-- 返回值:字符串

-- 实例:$DB->saveSql('../mydb.sql');

*******************************************************************/

public function saveSql($sqlPath='',$table=''){

if (empty($table)){

$result=$this->query('SHOW TABLES');

while ($arr=$this->fetch_row($result)){

$str=$this->makeSql($arr[0]);

if (!empty($str)) $sql.=$str;

}

$text="/***************************************************************\r\n";

$text.="-- Database: $this->data\r\n";

$text.="-- Date Created: ".date('Y-m-d H:i:s')."\r\n";

$text.="***************************************************************/\r\n\r\n"; }else{

$text='';

$sql=$this->makeSql($table);

}

if (empty($sql)) return false;

$text.=$sql;

$dir=dirname($sqlPath);

$file=basename($sqlPath);

if (empty($file)) $file=date('YmdHis').'.sql';

$sqlPath=$dir.'/'.$file;

if (!empty($dir)&&!is_dir($dir)){

$path=explode('/',$dir);

$temp='';

foreach ($path as $dir){

$temp.=$dir.'/';

if (!is_dir($temp)){

if (!mkdir($temp,0777)) return false;

}

}

$sqlPath=$temp.$file;

}

$link=fopen($sqlPath,'w+');

if (!is_writable($sqlPath)) return false;

return fwrite($link,$text);

fclose($link);

}

/******************************************************************

-- 函数名:loadSql($filePath)

-- 作用:从SQL文件导入信息到数据库

-- 参数:$filePath SQL文件路径(必填)

-- 返回值:字符串

-- 实例:无

*******************************************************************/

public function loadSql($filePath){

$val=$this->readSql($filePath);

if ($val==false) $this->show_error($filePath.'不存在');

elseif (empty($val)) $this->show_error($filePath.'中无有效数据');

else{

$errList='';

foreach ($val as $sql){

$result=mysql_query($sql);

if (!$result) $errList.='执行语句'.$sql.'失败
';

}

return $errList;

}

return false;

}

// 释放结果集

public function free(){mysql_free_result($this->result);}

// 关闭数据库

public function close(){mysql_close($this->conn);}

// 析构函数,自动关闭数据库,垃圾回收机制

public function __destruct(){

$this->free();

$this->close();

}

}

?>

从本节开始正式介绍各种SQL语句。本节介绍有关数据库级的SQL以及相关操作,查看、建立和删除等操作。 用SHOW显示已有的数据库 句法:SHOW DATABASES [LIKE wild] 如果使用LIKE wild部分,wild字符串可以是一个使用SQL的“%”和“_”通配符的字符串。 功能:SHOW DATABASES列出在MySQL服务器主机上的数据库。 你可以尝试下面举例,观察输出结果,例如: mysql>show databases; +----------+ | Database | +----------+ | first | | mysql | | mytest | | test | | test1 | +----------+ mysql>show databases like ‘my%’; +----------------+ | Database (my%) | +----------------+ | mysql | | mytest | +----------------+

用mysqlshow程序也可以得到已有数据库列表。 用Create Dabase 创建数据库 句法:CREATE DATABASE db_name 功能:CREATE DATABASE用给定的名字创建一个数据库。 如果数据库已经存在,发生一个错误。 在MySQL中的数据库实现成包含对应数据库中表的文件的目录。因为数据库在初始创建时没有任何表,CREATE DATABASE语句只是在MySQL数据目录下面创建一个目录。 例如: mysql>create database myfirst; 然后利用show databases观察效果。 用DROP DATABASE删除数据库 句法:DROP DATABASE [IF EXISTS] db_name 功能:DROP DATABASE删除数据库中的所有表和数据库。要小心地使用这个命令! DROP DATABASE返回从数据库目录被删除的文件的数目。通常,这3倍于表的数量,因为每张表对应于一个“.MYD”文件、一个“.MYI”文件和一个“.frm”文件。 在MySQL 3.22或以后版本中,你可以使用关键词IF EXISTS阻止一个错误的发生,如果数据库不存在。 使用mysqladmin工具创建和删除 在命令行环境下可以使用mysqladmin创建和删除数据库。 创建数据库: shell> mysqladmin create db_name 删除数据库: shell> mysqladmin drop db_name 如果出现下面的错误:

专业:移动通信科目:MySQL数据库 一、单项选择题 1.以下聚合函数求数据总和的是( ) A.MAX B.SUM C.COUNT D.AVG 答案:B 2.可以用( )来声明游标 A.CREATE CURSOR B.ALTER CURSOR C.SET CURSOR D.DECLARE CURSOR 答案:D 3.SELECT语句的完整语法较复杂,但至少包括的部分是( ) A.仅SELECT B.SELECT,FROM C.SELECT,GROUP D.SELECT,INTO 答案:B 4.SQL语句中的条件用以下哪一项来表达( ) A.THEN B.WHILE C.WHERE D.IF 答案:C 5.使用CREATE TABLE语句的( )子句,在创建基本表时可以启用全文本搜索A.FULLTEXT B.ENGINE C.FROM D.WHRER 答案:A 6.以下能够删除一列的是( ) A.alter table emp remove addcolumn B.alter table emp drop column addcolumn C.alter table emp delete column addcolumn D.alter table emp delete addcolumn 答案:B 7.若要撤销数据库中已经存在的表S,可用()。 A.DELETE TABLE S B.DELETE S C.DROP S D.DROP TABLE S 答案:D

8.查找表结构用以下哪一项( ) A.FIND B.SELETE C.ALTER D.DESC 答案:D 9.要得到最后一句SELECT查询到的总行数,可以使用的函数是( ) A.FOUND_ROWS B.LAST_ROWS C.ROW_COUNT D.LAST_INSERT_ID 答案:A 10.在视图上不能完成的操作是( ) A.查询 B.在视图上定义新的视图 C.更新视图 D.在视图上定义新的表 答案:D 11.UNIQUE惟一索引的作用是( ) A.保证各行在该索引上的值都不得重复 B.保证各行在该索引上的值不得为NULL C.保证参加惟一索引的各列,不得再参加其他的索引 D.保证惟一索引不能被删除 答案:A 12.用于将事务处理写到数据库的命令是( ) A.insert B.rollback C.commit D.savepoint 答案:C 13.查找条件为:姓名不是NULL的记录( ) A.WHERE NAME ! NULL B.WHERE NAME NOT NULL C.WHERE NAME IS NOT NULL D.WHERE NAME!=NULL 答案:C 14.主键的建立有( )种方法 A.一 B.四 C.二 D.三 答案:D 15.在视图上不能完成的操作是( ) A.更新视图数据

Mysql数据库学习心得(1) 由于工作中需要使用mysql,笔者通过网上学习,动手实践,终于从一个"数据库菜鸟"变成了能熟练操作mysql的"准大虾"了,:)。现将学习心得整理如下。 MySQL是完全网络化的跨平台关系型数据库系统,一个真正的多用户、多线程SQL数据库服务器,同时是具有客户机/服务器体系结构的分布式数据库管理系统。它具有功能强、使 用简便、管理方便、运行速度快、安全可靠性强等优点,用户可利用许多语言编写访问MySQL数据库的程序,对于中、小型应用系统是非常理想的。除了支持标准的ANSI SQL语句,更重要的是,它还支持多种平台,而在Unix系统上该软件支持多线程运行方式,从而能获得相当好的性能。对于不使用Unix的用户,它可以在Windows NT系统上以系统服务方式运行,或者在Windows 95/98系统上以普通进程方式运行。而在Unix/Linux系统上,MySQL支持多线程运行方式,从而能获得相当好的性能,而且它是属于开放源代码软。 MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成,MySQL的执行性能非常高,运行速度非常快,并非常容易使用,是一个非常棒的数据库。MySQL的官方发音是"My Ess Que Ell"(不是MY-SEQUEL )。 一.获得MySQL 首先必须下载MySQL。Mysql的官方网站是:,在中国的镜像是:或者:,可以下载MySQL的稳定版本截止到笔者发稿为止)。其版本名称是,不但免费而且没有所谓的"30天使用期限"。 二.MySQL的安装 (一)在Win98/Winnt下的安装 到一个目录,运行Setup程序,会提示整个安装的过程。它默认安装到c:mysql下,如果要安装到其它目录下还有改动一些东西,作为初学者,可以先不管,以默认的目录安装。好了,安装后,进入c:mysql in 目录下,运行文件在Win98下直接运行,正常情况下,没有什么提示信息。 1。将下载后的文件解压解压到一个临时目录。 2。点击安装到c:mysql(默认)。 3。将拷贝到c:,把文件中的#basedir=d:/mysql/改为basedir=c:mysql。 4。进入msdos,到目录c:mysql in。 5。输入mysqld-shareware -install,此为启动Mysql数据库服务。

下面是C语言连接mysql数据库简单例子: 编译方式: gcc -I /usr/local/mysql/include/ -L /usr/local/mysql/lib/ -l mysqlclient select.c -o select 源码: #include #include #include #include "/usr/local/mysql/include/mysql.h" int main() { MYSQL *conn; MYSQL_RES *res; MYSQL_ROW row; char *server = "192.168.1.99"; char *user = "test"; char *password = "test_passwd"; char *database = "count"; double tvalue1 = 0.93; char st[123]; time_t s; s = time((time_t*)NULL ); sprintf(st, "%d", s); conn = mysql_init(NULL); if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { fprintf(stderr, "%s\n", mysql_error(conn)); exit(1); } char sql[1024]="SELECT * FROM money_change WHERE c_datetime <= "; strcat(sql,st); strcat(sql,"-3000 AND c_datetime > "); strcat(sql,st); strcat(sql,"-5000 AND c_type = 0 UNION ALL SELECT * FROM money_change WHERE

SQL 模块1: 题目: (答题时间15或20分钟) 总计:100分 表1 该表中的超键可以是()(注:写出10个即可)。 该表中的候选键可以是()(注:写出5个即可)。 2、软件系统一般构筑为3层结构:物理层、逻辑层和应用层。数据库系统对应分为3 个模式,请填写图1中的空白框,完成数据库系统结构图。

图1 3、名词解释。 ●数据库 ●数据库表 ●数据库系统 ●数据库管理系统 ●存储过程 答案及评分标准: 题目1: 答案:1)、该表的超键可以是: ●{学号} ●{学号、姓名} ●{学号、性别} ●{学号、年龄} ●{学号、系别}

●{学号、专业} ●{学号、姓名、性别} ●{学号、姓名、年龄} ●{学号、姓名、专业} ●{姓名、性别} ●{姓名、年龄} ●{系别、专业} 2)、该表的候选键可以是: ●{学号} ●{姓名、性别} ●{姓名、年龄} ●{专业} ●{年龄、系别} ●{姓名、专业} ●{姓名、系别} 出题说明:考察学员对表的超键和候选键的理解和实际应用能力。 评分标准分析:1、写了一个超键给2分,写错一个扣4分,此问共20分(此问学员答错了,证明学员对超键的概念不理解。正确写出一个表的超键是对学员最基本 的要求)。 2、写了一个候选键给4分,写错一个扣8分,此问共20分(此问学员答错 了,证明学员对候选键的概念不理解。正确写出一个表的候选键是对学 员最基本的要求)。 特别说明:题目中表的超键和候选键不只答案中列出的几个,有很多,请阅卷教师根据学员答题的具体情况判断正误并给分。 题目2: 答案:完整的数据库系统结构图如图2所示。

图2 出题说明:考察学员对数据库系统结构图的认知。 评分标准分析:外模式A、外模式B、外模式C作为一个框给分,一共5个框,每个框填写正确给4分,错误扣4分,共20分。(此问题考察学员对数据库系统结构图的认知程度,根据回答的内容可以看出学员对关系型数据库的基本结构是否了解。) 题目3: 答案: ●数据库:是数据的集合,是同类实体的集合,它包括数据库表和其他的数据对 象。 ●数据库表:是一个由行和列组成的二维数据对象,用来在关系数据库中存储数 据。 ●数据库系统:是一个实际可运行的软件系统,可以对系统提供的数据进行存储、 维护和应用。 ●数据库管理系统:是一种系统软件,由一个互相关联的数据的集合和一组用以 访问这些数据的程序构成。 ●存储过程:是经过预编译的多条Transact-SQL语句的集合,一个存储过程有 一个名称,并且被作为一个整体执行。 出题说明:考察学员对数据库涉及的基本概念的认识程度。 评分标准分析:每个概念对了给8分,错了扣8分。(学员答错了某个概念,证明学员对该概念不了解。)

超详细mysql left join,right join,inner join用法分析 下面是例子分析 表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 a20050114 5 a20050115 表B记录如下: bID bName 1 2006032401 2 2006032402 3 2006032403 4 2006032404 8 2006032408 创建这两个表SQL语句如下: CREATE TABLE a aID int( 1 ) AUTO_INCREMENT PRIMARY KEY , aNum char( 20 )

) CREATE TABLE b( bID int( 1 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , bName char( 20 ) ) INSERT INTO a VALUES ( 1, ‘a20050111′ ) , ( 2, ‘a20050112′ ) , ( 3, ‘a20050113′ ), ( 4, ‘a20050114′ ) , ( 5, ‘a20050115′ ) ; INSERT INTO b VALUES ( 1, ‘ 2006032401′ ) , ( 2, ’2006032402′ ) , ( 3,’2006032403′ ) , ( 4, ’2006032404′ ) , ( 8, ’2006032408′ ) ; 实验如下: 1.left join(左联接) sql语句如下: SELECT * FROM a

MYSQL数据库基本操作命令 用户名和密码:123456 创建一个名称为mydb1的数据库。 create database mydb1; 查看所有数据库 show databases; 创建一个使用utf-8字符集的mydb2数据库。 create database mydb2 character set utf8; 创建一个使用utf-8字符集,并带校对规则的mydb3数据库。 create database mydb3 character set utf8 collate utf8_general_ci; 显示库的创建信息 show create database mydb3; 删除前面创建的mydb1数据库 drop database mydb1; 查看服务器中的数据库,并把其中某一个库的字符集修改为gb2312; alter database mydb2 character set gb2312; show create database mydb2; 备份库 1、准备库的数据 create database mydb1; use mydb1; create table test ( id int ); insert into test(id) values(1); select * from test; 2、删除库:drop database mydb1; 3、 4.1 创建库:create database mydb1; 4.2 \. test.sql (通过执行脚本文件实现) 5、

创建一个员工表 use mydb1; 进入库 create table employee ( id int, name varchar(20), gender varchar(4), birthday date, entry_date date, job varchar(40), salary double, resume text )character set utf8 collate utf8_general_ci; 查看库中所有表 show tables; 查看表的创建细节 show create table employee; 查看表的结构 desc employee; 在上面员工表的基本上增加一个image列。 alter table employee add image blob; 修改job列,使其长度为60。 alter table employee modify job varchar(60); 删除sex列。 alter table employee drop gender; 表名改为user。 rename table employee to user; 修改表的字符集 alter table user character set gb2312; show create table user; 列名name修改为username alter table user change column name username varchar(20); 使用insert语句向表中插入一个员工的信息。 insert into employee(id,username,birthday,entry_date,job,salary,resume)

公司招聘MySQL DBA面试心得 2013-11-01 10:06:51 我来说两句作者:黄杉 收藏我要投稿公司招聘MySQL DBA面试心得 1 2年MySQL DBA经验 其中许多有水分,一看到简历自我介绍,说公司项目的时候,会写上linux 系统维护,mssql server项目,或者oracle data gard项目,一般如果有这些的话,工作在3年到4年的话,他的2年MySQL DBA管理经验,是有很大的水分的。刚开始我跟领导说,这些不用去面试了,肯定mysql dba经验不足,领导说先面面看看,于是我就面了,结果很多人卡在基础知识这一环节之上,比如: (1)有的卡在复制原理之上 (2)有的卡在binlog的日志格式的种类和分别 (3)有的卡在innodb事务与日志的实现上。 (4)有的卡在innodb与myisam的索引实现方式的理解上面。 ......... 个人觉得如果有过真正的2年mysql专职dba经验,那么肯定会在mysql的基本原理上有所研究,因为很多问题都不得不让你去仔细研究各种细节,而自己研究过的细节肯定会记忆深刻,别人问起一定会说的头头是道,起码一些最基本的关键参数比如Seconds_Behind_Master为60这个值60的准确涵义,面试了10+的mysql dba,没有一个说的准确,有的说不知道忘记了,有的说是差了60秒,有的说是与主上执行时间延后了60秒。 2 对于简历中写有熟悉mysql高可用方案 我一般先问他现在管理的数据库架构是什么,如果他只说出了主从,而没有说任何ha的方案,那么我就可以判断出他没有实际的ha经验。不过这时候也不能就是断定他不懂mysql高可用,也许是没有实际机会去使用,那么我就要问mmm以及mha以及mm+keepalived等的原理实现方式以及它们之间的优势和不足了,一般这种情况下,能说出这个的基本没有。 3 对于简历中写有批量MySQL 数据库服务器的管理经验

jsp+mysql进行简单的增删改查总结 第一步创建一个新的包用于封装学生属性 在新包里面创建新的类存入学生属性 publicclass shuxing { String name; int age; String sex; int id; 右击鼠标选择soure-gennerategettersand setters来封装数据 第二步创建另一个新的包用于主体serlvet的操作 Servlet里面操作: 1.因为doget比dopost拥有更强的保密性,所以把dopost的语句也沿用doget的形式 doPost(request,response);注意删除的时候是不是把}也删除了,会报错。2.将设置请求的编码格式为’UTF-8’防止后面输入学生信息的时候出现乱码,之所以放在前面是怕后面写的话就不可以public公用了。 3.读取后面表中按钮的名称,用一个新的名字来获取随后跳转需要调用的语句 String opeationName = request.getParameter("openration");//取出条件的OPENRATION,看执行哪一种语句 4.查看取出的名称是否为空。 opeationName = opeationName==null?"":opeationName.trim();//取出来看下是不是空,不是空去掉空格 5.用if()else()语句来写调用的程序用前面取出的名字 一:删除方法:opeationName.equals("delete") (1).提取要删除的ID String id=request.getParameter("id"); (2).查看是否为空,为空输出“”if(id==null) { id=""; } (3).try{}catch()语句用于报错 try{ int result = doDelete(id);//调用到doDelete的方法 Listqw = new ArrayList();//创建新的集合用于存放数据 qw = getData();//获取数据 request.setAttribute("qw" ,qw);//缓存范围中设置具体的属性:第一个参数是属性名,字符串类型的数据。,也是以后获取的依据条件,第二个是插入的数据,支持对象属性。 (4)跳转进入最开始的jsp页面即查询语句的JSP界面 二.增加opeationName.equals("add") (1).增加不需要提取什么属性。直接获取在JSP中提交的数据即可,但是要观察是否为空String newname=request.getParameter("name");

MySQL数据库运维 MySQL数据库作为世界上最流行的开源数据库,以简单、易用、开源等特点,收到互联网行业的推崇。随着去IOE运动的如火如荼,MySQL数据库已经深入到传统行业,大有改变行业格局。而与此同时,MySQL数据库规模成倍的增长,如何快速定位问题,解决问题?如何规模化、自动化运维?如何进行优化,提高MySQL数据库的性能?如何架构部署MySQL集群、架构跨IDC的分布式MySQL集群?如何实现MySQL数据库的HA?将在本课程中跟大家分享。 课程大纲: 第1课机器选型、系统规划 机器选型 业务评估--根据业务进行评估,转化为机器资源需求。 SSD vs HDD--熟悉SSD和HDD的架构设计,了解SSD的发展趋势。 成本评估--通过成本评估,选择合适机型。 系统规划 文件系统规划--根据MySQL的特点,规划文件系统,IO调度。 数据库配置--根据IO写入特点,配置MySQL数据库。 第2课安装部署 源码编译--源码编译安装操作处理方法。

功能定制--定制mysql的Server限流,SQL限流,并行复制,ThreadPool功能。 规模化部署--了解打包、配置模板、数据目录等统一管理方法。 版本升级--跨版本升级如何做到安全可靠? 资源池管理--资源管理、实例分配、资源利用率等。 第3课压力测试 TPC-C模型--了解TPC-C模型设计。 测试工具--熟悉常用的数据库测试工具。 基准测试--介绍只读测试、TPCC测试、读写比测试方法。 定制测试--介绍定制sql模型、定制测试工具、流量加速回放等方法。 评估标准--介绍评估测试结果的基本参数标准。 第4课性能优化 参数优化--详细介绍与MySQL数据库息息相关的性能参数和优化方法。 性能优化--详细介绍系统层优化和MySQL功能优化。(NUMA、MALLOC等) 第5课字符集和权限安全 字符集 常见问题--介绍字符集乱码的常见问题以及解决方法。 注意事项--介绍字符集设置的注意事项,以及如何规避。 权限安全

数据库入门[mysql] 1、假设要按照分页(每页显示10条)的形式获取test表中的数据,在MySql数据库中,以下哪条语句是取第2页中的数据?(单选) (难度A) A、select * from test limit 10,10; B、select * from test limit 11,10; C、select * from test limit 10,20; D、select * from test limit 11,20; 2在Mysql数据库中,以下哪条语句用于统计test表中的记录总数?(难度A) A、select sum(*) from test; B、select max(*) from test; C、select avg(*) from test; D、select count(*) from test; E、select min(*) from test; 3、假设在D盘根目录下有一个名为db.sql的文件,以下哪些语句可以利用db.sql恢复数据库test(数据库名已经存在)中的表结构和数据?(难度A) A、在DOS提示符下输入以下命令 mysql -uroot -p1234 testd:/db.sql 4、下列SQL语句中,创建关系表的是?(难度A) A、ALTER B、CREATE C、UPDATE D、INSERT 5、以下那个不是DDL(数据定义语言)保留的关键字?(难度A) A、CREATE B、DELETE C、ALTER D、DROP 6、以下哪个sql语句表示在mysql中创建book表,并添加id字段和title字段?(难度A) A、create table book{ id varchar(32), title varchar(50) }; B、create table book( id varchar2(32), title varchar2(50) );

第一招、mysql服务的启动和停止 net stop mysql net start mysql 第二招、登陆mysql 语法如下:mysql -u用户名-p用户密码 键入命令mysql -uroot -p,回车后提示你输入密码,输入12345,然后回车即可进入到mysql中了,mysql 的提示符是: mysql> 注意,如果是连接到另外的机器上,则需要加入一个参数-h机器IP 第三招、增加新用户 格式:grant 权限on 数据库.* to 用户名@登录主机identified by "密码" 如,增加一个用户user1密码为password1,让其可以在本机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令: grant select,insert,update,delete on *.* to user1@localhost Identified by "password1"; 如果希望该用户能够在任何机器上登陆mysql,则将localhost改为"%"。 如果你不想user1有密码,可以再打一个命令将密码去掉。 grant select,insert,update,delete on mydb.* to user1@localhost identified by ""; 第四招:操作数据库 登录到mysql中,然后在mysql的提示符下运行下列命令,每个命令以分号结束。 1、显示数据库列表。 show databases; 缺省有两个数据库:mysql和test。mysql库存放着mysql的系统和用户权限信息,我们改密码和新增用户,实际上就是对这个库进行操作。 2、显示库中的数据表: use mysql;

1. 什么是索引? 索引是一种数据结构,可以帮助我们快速的进行数据的查找。 2. 索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关,在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引。 3. Hash索引和B+树所有有什么区别或者说优劣呢? 首先要知道Hash索引和B+树索引的底层实现原理: hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据。B+树底层实现是多路平衡查找树。对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据。 那么可以看出他们有以下的不同: ?hash索引进行等值查询更快(一般情况下),但是却无法进行范围查询。 因为在hash索引中经过hash函数建立索引之后,索引的顺序与原顺序无法保持一致,不能支持范围查询。而B+树的的所有节点皆遵循(左节点小于父节点,右节点大于父节点,多叉树也类似),天然支持范围。 ?hash索引不支持使用索引进行排序,原理同上。 ?hash索引不支持模糊查询以及多列索引的最左前缀匹配。原理也是因为hash 函数的不可预测。AAAA和AAAAB的索引没有相关性。 ?hash索引任何时候都避免不了回表查询数据,而B+树在符合某些条件(聚簇索引,覆盖索引等)的时候可以只通过索引完成查询。 ?hash索引虽然在等值查询上较快,但是不稳定。性能不可预测,当某个键值存在大量重复的时候,发生hash碰撞,此时效率可能极差。而B+树的查询效率比较稳定,对于所有的查询都是从根节点到叶子节点,且树的高度较低。 因此,在大多数情况下,直接选择B+树索引可以获得稳定且较好的查询速度。而不需要使用hash索引。 4.上面提到了B+树在满足聚簇索引和覆盖索引的时候不需要回表查询数据, 什么是聚簇索引? 在B+树的索引中,叶子节点可能存储了当前的key值,也可能存储了当前的key值以及整行的数据,这就是聚簇索引和非聚簇索引。在InnoDB中,只有主键索引是聚簇索引,如果没有主键,则挑选一个唯一键建立聚簇索引。 如果没有唯一键,则隐式的生成一个键来建立聚簇索引。 当查询使用聚簇索引时,在对应的叶子节点,可以获取到整行数据,因此不用再次进行回表查询。 5.非聚簇索引一定会回表查询吗? 不一定,这涉及到查询语句所要求的字段是否全部命中了索引,如果全部命中了索引,那么就不必再进行回表查询。

mysql多表操作与练习 数据库备份与恢复 ◆数据库备份 ◆数据库恢复 多表操作 ◆多表设计 ◆外键介绍与创建 ◆多表查询介绍 ◆多表查询-内连接 ◆多表查询-外连接 ◆多表查询-子查询 SQL练习 【内容:数据库备份与恢复】 数据库备份 数据库的备份是指将数据库转换成对应的sql文件。数据库导出sql脚本的命令如下: ●mysqldump –u用户名–p密码数据库名>生成的脚本文件路径; 以上备份数据库的命令中需要用户名和密码,即表明该命令要在用户没有登录的情况下使用数据库恢复 数据库的恢复指的是使用备份产生的sql文件恢复数据库,即将sql文件中的sql语句执行就可以恢复数据库内容。因为数据库备份只是备份了数据库内容,所以备份产生的sql文件中没有创建数据库的sql语句,在恢复数据库之前需要自己动手创建数据库。 ●在数据库外恢复 mysql -u root -p 数据库名< 文件路径 注意:要求数据库必须先创建出来. ●.在数据库内恢复 source SQL脚本路径:使用这种方式恢复数据,首先要登录数据库 【重点总结】 备份 Mysqldump –u root –p abc mydb>c:/mydb.sql 恢复 1.mysql –u root –p mydb

【内容:多表操作】 多表设计 当我们要完成一个软件系统时,需要把系统中的实体抽取出来,形成概念模型。例如部门、员工都是系统中的实体。概念模型中的实体最终会成为Java中的类、数据库中的表。今天我们需要了解的概念模型包括以下两个: ●对象模型:针对java中的实体类,例如我们之前学习的domain层中的User类等; ●关系模型:对应数据库中的表。 在java中有以下三个关系描述: ●is a:例如猫是动物,表示继承关系; ●has a:例如人有两只手,表示的是类与成员的关系; ●use a:表示类与方法之间的关系; 我们今天主要关注的是第二个关系:类与成员的关系。这种关联关系可以分为如下三种: ●一对一关联:例如身份证与人就是一对一的关系,一个人只有一个身份证,一个身份证 号只属于一个人。 ●一对多关联:例如用户与订单,一个用户可以拥有多个订单,多个订单可以属于同一个 用户,这是一个很明显的一对多关联。 ●多对多关联:例如商品与订单,一个订单中可以包含多个商品,而一个商品也可以存在 于多个订单中,这就是一个多对多关联。 概念模型在java中对应这实体类,在实体类中使用成员变量完成关联关系,而且一般都是双向关联,以下是java中实体类与成员之间的关联关系,如下所示: 一对一关联 //身份证类一的一方 public class IDCard { private Person person; //身份证关联人类一对一 } //人类一的一方 public class Person { private IDCard idcard; //人类关联身份证类一对一 } 一对多关联 //用户一的一方 public class User { private List orders; //用户可以有多个订单,在用户中关联订单} //订单多的一方 public class Order { private User user; //多个订单可以属于一个用户,在订单中关联用户} 多对多关联 // 订单多的一方 public class Order { private List products; //订单中可以包含多个商品,订单关联商品

MySQL之终端:管理数据库的基本操作 MySQL有很多的可视化管理工具,比如“mysql-workbench”和 “sequel-pro-”。现在我写MySQL的终端命令操作的文章,是想强化一下自己对于MySQL的理解,总会比使用图形化的理解透彻,因为我本来就比较喜欢写代码。同时写出来这些文章,是想要给大家当个参考,希望也能对大家有所帮助,有所提升,这就是我为什么要写终端操作MySQL的文章了。 注意:MySQL数据库命令不区分大小写。但在MAC的终端,如果你想使用tab自动补全命令,那么你就必须使用大写,这样MAC的终端才会帮你补全命令,否则你按N遍tab都不会有响应。 1、数据库(database)管理 1.1 create 创建数据库 1.2 show 查看所有数据库 1.3 alter 修改数据库 1.4 use 使用数据库 1.5 查看当前使用的数据库 1.6 drop 删除数据库 2、数据表(table)管理 2.1 create 创建表 2.2 show 显示表 2.3 desc 查看表结构 2.4 alter 修改表结构(增、删、改) 2.4.1 insert 在表中添加列(字段) 2.4.2 alter 修改表(列)字段 2.4.3 delete 删除表(列)字段 2.4.4 rename 重命名表名

2.5 create 利用已有数据创建新表 3、数据的操作及管理 3.1 增加数据(增) 3.2 删除数据(删) 3.3 修改数据(改) 3.4 查询数据(查) 4、管理视图 1、数据库(database )管理 1.1 create 创建数据库 1 c reate database firstDB; 1.2 show 查看所有数据库 1 2 3 4 5 6 7 8 9 10 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | firstDB | | mysql | | performance_schema | +--------------------+ 4 rows in set (0.00 sec) 1.3 alter 修改数据库 alter 命令修改数据库编码: 默认创建的数据库默认不支持中文字符,如果我们需要它支持中文字符,则将它的编码设置为utf8格式: 1 2 mysql> ALTER DATABASE testDB CHARACTER SET UTF8; Query OK, 1 row affected (0.00 sec) 1.4 use 使用数据库

面试笔试常考的mysql 数据库操作group by 分类:数据库2014-08-06 16:38 773人阅读评论(0) 收藏举报面试数据库mysql IT 面试中,数据库的相关问题基本上属于必考问题,而其中关于sql 语句也是经常考察的一个重要知识点。 下面介绍下sql语句中一个比较重要的操作group by,他的重要行一方面体现在他的理解困难度,一方面体现应用中的长见性。 首先,给出一个studnet学生表: [sql]view plaincopyprint? 1.CREATE TABLE `student` ( 2. `id` int(11) NOT NULL AUTO_INCREMENT, 3. `name` varchar(30) DEFAULT NULL, 4. `sex` tinyint(1) DEFAULT'0', 5. `score` int(10) NOT NULL, 6. `dept` varchar(10) DEFAULT NULL, 7.PRIMARY KEY (`id`) 8.) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8

添加一些测试数据: [sql]view plaincopyprint? 1.mysql> select * from student where id<10; 2.+----+------+------+-------+---------+ 3.| id | name | sex | score | dept | 4.+----+------+------+-------+---------+ 5.| 1 | a | 1 | 90 | dev | 6.| 2 | b | 1 | 90 | dev | 7.| 3 | b | 0 | 88 | design | 8.| 4 | c | 0 | 60 | sales | 9.| 5 | c | 0 | 89 | sales | 10.| 6 | d | 1 | 100 | product | 11.+----+------+------+-------+---------+ 给出需求,写出sql: 给出各个部门最高学生的分数。

实验二 MySQL数据库操作实验 实验目的: 1、掌握MySQL数据库的安装方法 2、掌握MySQL数据库的使用 3、熟悉数据库管理工具的使用 实验要求: 1、利用MySQL命令创建数据库和相应的数据库表,并能向数据库表中插入数据 记录和相应的数据库操作。 2、利用Navicat for MySQL建数据库和相应的数据库表,并能向数据库表中插 入数据记录和相应的数据库操作。 3、保存和导入数据库 4、编程查询显示数据库表中的所有记录,可以选择以下添加的任意一个数据库 表的记录。 实验容: 1、安装MySQL数据库 安装MySQL可以参照文档“MySQL 5 安装.doc”,安装MySQL并进行配置,安装成功后,即可操作管理数据库。 方法一: 从开始菜单→MySQL→MySQL Server5.0→MySQL Command Line Client,打开控制台界面,提示输入密码,密码输入成功后,登录MySQL数据库,如下图2.1所示。

图2.1 登录MySQL 服务器 方法二:将MySQL的安装路径下的bin目录添加到环境变量path中,打开控制台命令,输入mysql –uroot –p,在提示符下输入密码,登录MySQL服务器,如下图2.2所示。 图2.2 登录MySQL服务器 2、安装Navicat for MySQL Navicat for MySQL 是一款强大的MySQL数据库管理和开发工具,Navicat 使用很好的GUI,可以使用户采用一种安全和更容易的方式创建、组织、存取和共享信息。 安装Navicat_for_MySQL_10.1.7,安装向导启动界面如下图2.3所示。

本试题卷分第I卷(选择题、填空题)。第Ⅱ卷(简答题、编程题)、第Ⅲ卷(系统设计题)和第Ⅳ卷(数据库题)。运维开发工程师只须完成第Ⅰ卷、第Ⅱ卷、第Ⅲ卷;数据库管理员只须完成第Ⅰ卷、第Ⅱ卷、第Ⅳ卷。注意,请将答案写在答题卡上,本试卷上答题无效。考试结束后,将本答题卡与试卷一并交回,只交答题卡试卷无效。 (笔试时间120分钟) 第I卷(必做) 一、单选题(每题1分,共32分) (略) 二、填空题(每题3分,共18分) 1.串行通信的传输制式分为、半双工、单工。 2.信号量的取值范围为[-3,5]的时候,代表着个进程在竞争着个资源。 3.设栈S和队列Q的初始状态为空,元素E1、E2、E3、E4、E5和E6依次通过栈S,一个元素出栈后即进入队列若6个元素出队列的顺序是E2、E4、E3、E6、E5和E1,则栈S的容量至少应该是。 4.为了保证连接的可靠建立,TCP使用了次握手机制。 5.Linux中,增加一个用户的命令式。 6.寄存器、、、外存、网络存储组成了常见的计算机存储系统。 第Ⅱ卷(必做) 三、简答题(10分) 简述操作系统中线程死锁产生的原理及其形成的必要条件,如何避免死锁。 四、编程题(10分) 值范围[0,1000]。 注意,不要使用库函数。 第Ⅳ卷(运维开发工程师选做,数据库管理员必做) 六、DBA单选题(每题2分,共10分) 1.以下哪种方式不可以用来删除一个表中的数据() A.delete B. drop C. flush D. truncate 2.MySQL5.0默认支持以下哪种主从同步的方式() A.语句同步 B. 行同步 C. 增量同步 D. 以上都是 3.以下那款数据库产品为知名的非关系型数据库() A.Membase B. PostgreSQL C. MySQL D. Oracle 4.以下关于MySQL的视图相关的描述中,哪一种是错误的() A.视图是一个虚拟的表,但其和真实的表一样,包含一系列的带有名称的列 B.支持给视图添加索引 C.视图可以从一个已有的视图中导出 D.不支持物化视图 5.以下关于innodb存储引擎的说法,错误的是() A.Innodb是MySQL中支持事务的存储引擎 B. Innodb当中的主键索引和数据时分开存放的

相关主题
文本预览
相关文档 最新文档