赞
踩
目前数据库可分为关系型数据库和非关系型数据库(NoSQL)两类,在了解两类数据库之前,先回顾一下数据库四类数据模型
数据模型是一个描述数据、数据联系、数据语义以及一致性约束的概念工具集合,提供了一种描述物理层、逻辑层以及视图层数据库设计的方式。可被划分为四类:
基于 现实世界由一组称为实体的基本对象以及这些对象间的联系构成 这一认识
可看作 E-R模型+封装、方法(函数)和对象标识等扩展概念
允许相同类型的数据项含有不同的属性集,一般使用可扩展标记语言XML表示
基于关系模型,即由多张能互相联接的二维行列表组成的数据库,
当前主流的关系型数据库有Oracle、DB2、PostgreSQL、Microsoft SQL Server、Microsoft Access、MySQL、浪潮K-DB等
多数商用关系数据库系统使用SQL语言
关系数据库由表(table)的集合构成,每个表都有唯一的名字,用关系指代;
表中的每一行代表一组值之间的联系,即一个n元组(n-tuple),而每一列对应一个属性(attribute);
即一个表(关系)是多个元组的集合,而每个元组都具有固定的属性
对于关系的每个属性,都存在一个允许取值集合,称为域(domain)
在一个关系中,唯一标识一个元组的一个/多个属性的集合,称为超码(superkey),最小超码被称为候选码(candidate key),被设计者选中、主要用来在一个关系中区分不同元组的候选码被称为主码(primary key)
SQL(结构化查询语言)是关系型数据库最为常用/标准的查询语言,包括数据定义语言(DDL)、数据操纵语言(DML)、完整性、视图定义、事务控制、嵌入式SQL、动态SQL、授权几个部分。(详情不予介绍)
SQL各种实现可能在一些细节上有所不同,或者只支持整个语言的一个子集,大多数实现还支持一些非标准特征。
最流行的关系型数据库管理系统之一,被认为是WEB应用方面最好的关系数据库管理系统应用软件。
在PHP中,通过 mysql_connect() 函数连接数据库
mysql_connect(server,user,pwd,newlink,clientflag);
参数 | 描述 |
---|---|
server | 可选,规定要连接的服务器,可包括端口号,默认为 “localhost:3306”。 |
user | 可选,规定登录所使用的用户名,默认值为拥有服务器进程的用户的名称。 |
pwd | 可选,规定登录所用的密码,默认是为""。 |
newlink | 可选,默认情况下如果用同样的参数第二次调用 mysql_connect(),将不会建立新连接,而将返回已经打开的连接标识,参数 new_link 会改变此行为并使 mysql_connect() 总是打开新的连接,甚至当 mysql_connect() 曾在前面被用同样的参数调用过。 |
clientflag | 可选,client_flags 参数可以是以下常量的组合: MYSQL_CLIENT_SSL 使用 SSL 加密 MYSQL_CLIENT_COMPRESS 使用压缩协议 MYSQL_CLIENT_IGNORE_SPACE 允许函数名后的间隔 MYSQL_CLIENT_INTERACTIVE 允许关闭连接之前的交互超时非活动时间 |
成功则返回一个MySQL连接标识,失败则返回FALSE
代码示例
<?php
$con = mysql_connect("localhost","mysql_user","mysql_pwd");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
// operation code 一般使用
mysql_close($con);
?>
其他函数
mysql_pconnect(server,user,pwd,clientflag) //打开一个到MySQL服务器的持久连接(优先返回已打开的持久连接;mysql_close() 不会关闭该连接)
mysql_query(query,connection) //执行MySQL查询语句query(不以分号结束),connection可选,默认上一个打开连接
mysql_select_db(database,connection) //设置活动数据库database,connection可选,默认上一个打开连接
mysql_close(link_identifier) //关闭非持久连接
可使用JDBC(Java DataBase Connectivity,java数据库连接)进行连接,JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
Java连接MySQL需要驱动包,解压后得到jar库文件,然后在对应项目中导入该库文件。
示例代码如下(数据库RUNOOB、表websites、属性id/name/url)
package com.runoob.test; import java.sql.*; public class MySQLDemo { // JDBC 驱动名及数据库 URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB"; // 数据库的用户名与密码,需要根据自己的设置 static final String USER = "root"; static final String PASS = "123456"; public static void main(String[] args) { Connection conn = null; Statement stmt = null; try{ // 注册 JDBC 驱动(加载驱动) Class.forName("com.mysql.jdbc.Driver"); // 打开链接(连接数据库) System.out.println("连接数据库..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); // 执行查询 System.out.println(" 实例化Statement对象..."); stmt = conn.createStatement(); String sql; sql = "SELECT id, name, url FROM websites"; // ResultSet类,用来存放获取的结果集 ResultSet rs = stmt.executeQuery(sql); // 展开结果集数据库 while(rs.next()){ // 通过字段检索 int id = rs.getInt("id"); String name = rs.getString("name"); String url = rs.getString("url"); // 输出数据 System.out.print("ID: " + id); System.out.print(", 站点名称: " + name); System.out.print(", 站点 URL: " + url); System.out.print("\n"); } // 完成后关闭 rs.close(); stmt.close(); conn.close(); }catch(SQLException se){ // 处理 JDBC 错误 se.printStackTrace(); }catch(Exception e){ // 处理 Class.forName 错误 e.printStackTrace(); }finally{ // 关闭资源 try{ if(stmt!=null) stmt.close(); }catch(SQLException se2){ }// 什么都不做 try{ if(conn!=null) conn.close(); }catch(SQLException se){ se.printStackTrace(); } } System.out.println("Goodbye!"); } }
SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),是真正的客户机/服务器体系结构,具有图形化用户界面、丰富的编程接口工具、支持Web技术且提供数据仓库功能,SQL Server 2000之后还支持XML扩展标记语言、分布式分区视图、Web分析等特性,相比于MySQL,SQL Server界面友好、操作更容易、与其他数据库(Access、FoxPro、Excel等)有良好接口。
以wampserver(不支持sqlserver连接)+sqlserver为例
驱动版本 | PHP版本 |
---|---|
3.2 | 5.6、5.5和5.4 |
3.1 | 5.5和5.4 |
3.0 | 5.4 |
extension=php_pdo_sqlsrv_55_ts.dll
extension=php_sqlsrv_55_ts.dll
相关函数
sqlsrv_connect( string $serverName [, array $connectionInfo])
返回一个PHP连接资源或false
示例代码1
<?php
$conn = sqlsrv_connect('localhost', array('Database' => 'test', 'UID' => 'sa' , 'PWD' => 'PS0001!'));
var_dump(sqlsrv_errors());
示例代码2
<?php
$serverName = "localhost"; //数据库服务器地址
$uid = "sa"; //数据库用户名
$pwd = "1234"; //数据库密码
$connectionInfo = array("UID"=>$uid, "PWD"=>$pwd, "Database"=>"test");
$conn = sqlsrv_connect($serverName, $connectionInfo);
if( $conn == false)
{
echo "连接失败!";
var_dump(sqlsrv_errors());
exit;
}else{
echo "链接成功";
}
packagepkg; importjava.sql.*; public class Main { Connection con; Statement st; publicstatic void main(String [] args) { StringdriverName=”com.microsoft.sqlserv er.jdbc.SQLServerDriver”; StringdbURL=”jdbc:sqlserver://localhost:1433;DatabaseName=XXX”; //数据库名 (url自定) String userName=”XXX”; //用户名 String userPwd=”XXX”; //密码 String sql=“XXX”; //SQL语句 try { Class.forName(driverName); //jdk版本6.0以上可以省略这句话 con=DriverManager.getConnection(dbURL,userName,userPwd); st=con.createStatement(); st.executeUpdate(sql); }catch(Exception e) { e.printStackTrace(); } } }
详见从零开始的java连接sqlserver数据库教程 By saiofo
非关系型数据库,又被称为NoSQL(Not Only SQL ),意为不仅仅是SQL( Structured QueryLanguage,结构化查询语言)。
NoSQL描述的是大量结构化数据存储方法的集合,其产生就是为了解决(超)大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
NoSQL具有扩展简单、高并发、高稳定性、成本低廉等优势但同时也存在暂不支持SQL、成熟度低、数据完整性难以保证等不足之处。
根据结构化方法以及应用场合的不同,主要可以将NoSQL分为以下四类:
面向检索的列式存储(Column-Oriented),采用列式存储结构,同于关系型数据库的行式结构,这种结构会让很多统计聚合操作更简单方便,使系统具有较高的可扩展性。
这类数据库还可以适应海量数据的增加以及数据结构的变化,这个特点与云计算所需的相关需求是相符合的,比如GoogleAppengine的BigTable以及相同设计理念的Hadoop子系统HaBase就是这类的典型代表。
需要特别指出的是,Big Table特别适用于MapReduce处理,这对于云计算的发展有很高的适应性。
面向高性能并发读/写的缓存存储(Key-Value),其结构类似于数据结构中的Hash表,每个Key分别对应一个Value,能够提供非常快的查询速度、大数据存放量和高并发操作,适合通过主键对数据进行查询和修改等操作。
Key-Value数据库的主要特点是具有极高的并发读/写性能,非常适合作为缓存系统使用,但数据无结构化,通常只被当作字符串或者二进制数据。
Key-Value数据库的代表有MemcacheDB、BerkeleyDB、Redis、Flare
面向海量数据访问的文档存储(Document-Oriented),这类存储的结构与Key-Value非常相似,也是每个Key分别对应一个Value,但是这个Value主要以JSON(JavaScriptObjectNotations)或者XML等格式的文档来进行存储。
这种存储方式可以很方便地被面向对象的语言所使用。这类数据库可在海量的数据中快速查询数据,通常用于Web应用,典型代表为MongoDB、CouchDB等
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。
可利用图结构相关算法(最短路径寻址、N度关系查栈等)但很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。
适合社交网络、推荐系统等应用场景
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案
需要事先安装mongodb php驱动 附录:PHP7 MongDB
连接数据库,代码示例
<?php
$m = new MongoClient(); // 以url作为参数,默认为mongodb://localhost:27017
$db = $m->test; // 获取名称为 "test" 的数据库
?>
$collection = $db->createCollection("runoob"); //创建集合 $document = array( "title" => "MongoDB", "description" => "database", "likes" => 100, "url" => "http://www.runoob.com/mongodb/", "by", "XXX" ); $collection->insert($document); //插入文档 $cursor = $collection->find(); foreach ($cursor as $document) { // 迭代显示文档标题 echo $document["title"] . "\n"; } $collection->update(array("title"=>"MongoDB"), array('$set'=>array("title"=>"MongoDB Update"))); // 更新文档 $collection->remove(array("title"=>"MongoDB Update"), array("justOne" => true)); // 删除文档
无需用户名和密码
import com.mongodb.MongoClient; import com.mongodb.client.MongoDatabase; public class MongoDBJDBC{ public static void main( String args[] ){ try{ MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); // 连接到 mongodb 服务 MongoDatabase mongoDatabase = mongoClient.getDatabase("mycol"); // 连接到/选择数据库(不存在则自动创建) System.out.println("Connect to database successfully"); }catch(Exception e){ System.err.println( e.getClass().getName() + ": " + e.getMessage() ); } } }
需要用户名、密码验证
import java.util.ArrayList; import java.util.List; import com.mongodb.MongoClient; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; import com.mongodb.client.MongoDatabase; public class MongoDBJDBC { public static void main(String[] args){ try { //连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址 ServerAddress serverAddress = new ServerAddress("localhost",27017); // 服务器地址 和 端口 List<ServerAddress> addrs = new ArrayList<ServerAddress>(); addrs.add(serverAddress); MongoCredential credential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray()); //用户名 数据库名称 密码 List<MongoCredential> credentials = new ArrayList<MongoCredential>(); credentials.add(credential); MongoClient mongoClient = new MongoClient(addrs,credentials); //通过连接认证获取MongoDB连接 MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName"); //连接到/选择数据库 System.out.println("Connect to database successfully"); } catch (Exception e) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); } } }
附录:详细介绍及其他操作
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。