Heim Datenbank MySQL-Tutorial Linux应用集成MySQL数据库访问技巧_MySQL

Linux应用集成MySQL数据库访问技巧_MySQL

Jun 01, 2016 pm 02:11 PM
web 应用 技巧 数据库 服务器 脚本 访问 集成

Linux技巧


  本文描述了MySQL,一种利用第三方数据库开发电子贸易和其它复杂、动态网站的有效工具。MySQL 是一种快速、多线程和全功能的 SQL服务器。除了描述MySQL系统的基本体系结构以外,本文还提供了以Tcl和C++编写的简单示例,帮助您开发支持数据库的Web应用。
  
  一个必须存储或访问大量信息的应用程序可以从使用第三方数据库产品中受益匪浅。在对信息的访问必须在程序的多个实例上进行时更是如此。基于Web的应用(包括电子贸易)就是它的良好例证。
  
  为什么使用独立数据库?
  
  Web服务器必须使其处理脚本有办法来存储有关供其以后访问的状态信息。尽管有可能使用比较原始一些的方法--例如转储到文本文件或开发自制的迷你数据库--但只有成熟的数据库应用才能提供更为复杂的Web应用所需的所有服务。因为有一些免费获得的软件包可用于该目的,所以编写定制的特定于应用的数据库引擎并无太大好处。 另外,使用第三方数据库还使Web开发者不必投入到开发和维护数据库的任务中。
  
  MySQL数据库
  
  通过使用脚本语言和编译型系统语言(例如 C),将数据库集成到Linux应用就可能相当容易。可免费获得的MySQL(在GNU Public License下发行)数据库提供了一系列复杂的SQL功能,并易于集成到应用中。MySQL是快速、多线程的,并支持ANSI和ODBC SQL标准。加上第三方软件,MySQL就支持用于事务处理应用的事务安全的表。
  
  注:什么是事务处理?
  
  事务是需要以原子方式执行的对数据库所做的一系列更改。它们要么必须全部执行,要么一个都不执行。 例如,在Web上销售产品时所有必需的数据库更改组成一个事务。
  
  数据库需要同时减去客户帐户余额和产品库存,否则失败并且一个操作都不执行。
  
  无论服务器出于何种原因发生崩溃都不应该引起事务被部分执行。例如帐单多算、产品没有交付,或者库存不实等都有可能是部分完成的事务的结果。
  
  支持事务处理的数据库可以将一组数据库代码封装在一个事务中,在事务执行期间的任何失败会让数据库回滚到事务开始之前的状态。
  
  这是通过维护所有数据库操作的日志,以及其原始状态表的副本来实现的,在失败后下一次重新启动服务器时允许回滚操作。 这种时间和空间上的开销是事务安全数据库系统所必需的一种折衷。
  
  单一MySQL服务器控制着一系列数据库,它们都可以通过服务器以类似方式来访问。 每个数据库实际上都是一组任意数量的表,概念与其它SQL数据库的用户类似。每个表都由带类型的数据列组成。 数据可以是整数、实数值、字符串或其它类型,包括原始二进制流。 表中的每一行都是存储在数据库中的一个记录。
  
  MySQL被设计和构造成客户机/服务器。 服务器mysqld可以在能从因特网访问到的任何机器上运行(最好与Web服务器在同一台或最接近的一台机器上,以确保合理的响应时间)。MySQL客户机使用请求来与MySQL服务器联系,修改或查询服务器所拥有的数据库。 在支持数据库的Web应用程序中,数据库客户机是Web服务器或由Web服务器产生的CGI脚本。 这些客户机可以用高级脚本语言或低级系统语言编写,只要存在这种语言的数据库API即可。在Linux中,大多数脚本语言是以C 实现的,因为存在MySQL C API,所以要将MySQL支持添加到任何现有的脚本语言或工具应该很容易。绝大部分脚本语言已经完成了这一步。
  
  MySQL API
  
  MySQL API可用于各种语言,包括几乎所有编写网站后端所实际使用的语言。 使用这些API,我们可以构建由Web服务器控制的 MySQL客户机。
  
  API(用于数据库访问)以基于连接的模式工作。客户机必须做的第一件事是打开与MySQL服务器的连接。 这包括适当地使用服务器认识的用户名和口令来对连接进行身份认证。建立了连接后,服务器选择要使用的特定数据库。 确定了初始化后,客户机应用程序(就我们来说是服务器方CGI脚本)就能自由地与数据库以两种方式中的一种进行交互:可以运行常规SQL命令,包括添加和删除表,以及向它们添加记录;也可以对返回结果的数据库运行查询。 查询生成一组与查询匹配的记录,然后,客户机可以逐一访问记录,直到查看完所有记录,或者客户机取消暂挂的记录检索。一旦脚本完成了对数据库的操作后,与服务器的连接就被关闭。
  
  要构建集成数据库访问的网站,需要编写CGI脚本来根据数据库状态生成动态结果。Web服务器启动CGI脚本,然后将适当格式化的HTML输出到它们的标准输出流中。Web服务器捕捉到HTML后将它发送回客户机,如同请求是对静态HTML页面进行的那样。 在生成 HTML 的过程中,脚本可以修改数据库,也可以查询并将结果合并到它们的输出中。
  
  作为简单解释上述过程的一个示例,下面的代码(以C和Tcl编写)查询一个包含某公司供销售的产品清单的数据库。 这绝没有使用两种语言MySQL API的所有特性,但提供了快速、简易扩展的示例,可以对数据库内容执行任何SQL命令。 在该例中,脚本显示了低于特定价格的所有产品。 在实践中,用户可能在Web浏览器中输入该价格,然后将它发给服务器。 我们省去了从环境变量中进行读取来确定 HTML 表单值的细节,因为它与不支持数据库的 CGI 脚本中执行的情况没有什么差别。 为清晰起见,我们假设事先设置了特定一些参数(例如要查询的价格)。
  
  以下代码是使用免费获得的Tcl Generic Database Interface以Tcl实现的。这样一种接口的好处在于Tcl是解释型的,可以对代码进行迅速开发和快速修改。
  
  Tcl示例
  
  #This code prints out all products in the database
  # that are below a specified price (assumed to have been determined
  # beforehand, and stored in the variable targetPrice)
  # The output is in HTML table format, appropriate for CGI output
  
  #load the SQL shared object library. the Tcl interpreter could also
  #have been compiled with the library, making this line unnecessary
  load /home/aroetter/tcl-sql/sql.so
  
  #these are well defined beforehand, or they could
  #be passed into the script
  set DBNAME "clientWebSite";
  set TBLNAME "products";
  set DBHOST "backend.company.com"
  set DBUSER "mysqluser"
  set DBPASSWD "abigsecret"
  
  set targetPrice 200;
  
  #connect to the database
  set handle [sql connect $DBHOST $DBUSER $DBPASSWD]
  sql selectdb $handle $DBNAME ;# get test database
  
  #run a query using the specified sql code
  sql query $handle "select * from $TBLNAME where price   
  
  #print out html table header
  puts ""
  puts "
Product Id Description Price (\$)"
  
  #output table rows - each fetchrow retrieves one result
  #from the sql query
  while {[set row [sql fetchrow $handle]] != ""} {
    set prodid [lindex $row 0]
    set descrip [lindex $row 1]
    set price [lindex $row 2]
    puts "
$prodid $descrip $price"
  }
  
  puts "
"
  
  #empty the query result buffer - should already be empty in this case
  sql endquery $handle
  #close the db connection - in practice this same connection
  #is used for multiple queries
  sql disconnect $handle
  
  下面的代码是使用正式MySQL C++ API MySQL++以C++编写的等价脚本。该版本的优势在于它是编译型的,因此比解释语言更快。经常用在特定站点的数据库代码应该以C或C++编写,然后由脚本或直接由Web服务器访问,以改进整体运行时间。
  
  C++示例
  
  #include
  #include
  #include
  
  const char *DBNAME = "clientWebSite";
  const char *DBTABLE = "products";
  const char *DBHOST = "backend.company.com";
  const char *DBUSER = "mysqluser";
  const char *DBPASSWD = "abigsecret":
  
  int main() {
   try {
    //open the database connection and query
    Connection con(DBNAME, DBHOST, DBUSER, DBPASSWD);
    Query query = con.query();
  
    //write valid sql code to the query object
    query   
    //run the query and store the results
    Result res = query.store();
  
    //write out the html table header
    cout \n";
    cout Product Id Description"
   Price ($)"   
    Result::iterator curResult;
   Row row;
  
    //iterate over each result and put it into an html table
    for (curResult = res.begin(); curResult != res.end(); curResult++) {
     row = *curResult;
     cout "         "
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

iOS 18 fügt eine neue Albumfunktion „Wiederhergestellt' hinzu, um verlorene oder beschädigte Fotos wiederherzustellen iOS 18 fügt eine neue Albumfunktion „Wiederhergestellt' hinzu, um verlorene oder beschädigte Fotos wiederherzustellen Jul 18, 2024 am 05:48 AM

Apples neueste Versionen der iOS18-, iPadOS18- und macOS Sequoia-Systeme haben der Fotoanwendung eine wichtige Funktion hinzugefügt, die Benutzern dabei helfen soll, aus verschiedenen Gründen verlorene oder beschädigte Fotos und Videos einfach wiederherzustellen. Mit der neuen Funktion wird im Abschnitt „Extras“ der Fotos-App ein Album mit dem Namen „Wiederhergestellt“ eingeführt, das automatisch angezeigt wird, wenn ein Benutzer Bilder oder Videos auf seinem Gerät hat, die nicht Teil seiner Fotobibliothek sind. Das Aufkommen des Albums „Wiederhergestellt“ bietet eine Lösung für Fotos und Videos, die aufgrund einer Datenbankbeschädigung verloren gehen, die Kameraanwendung nicht korrekt in der Fotobibliothek speichert oder eine Drittanbieteranwendung die Fotobibliothek verwaltet. Benutzer benötigen nur wenige einfache Schritte

Ausführliches Tutorial zum Herstellen einer Datenbankverbindung mit MySQLi in PHP Ausführliches Tutorial zum Herstellen einer Datenbankverbindung mit MySQLi in PHP Jun 04, 2024 pm 01:42 PM

So verwenden Sie MySQLi zum Herstellen einer Datenbankverbindung in PHP: MySQLi-Erweiterung einbinden (require_once) Verbindungsfunktion erstellen (functionconnect_to_db) Verbindungsfunktion aufrufen ($conn=connect_to_db()) Abfrage ausführen ($result=$conn->query()) Schließen Verbindung ( $conn->close())

Umgang mit Datenbankverbindungsfehlern in PHP Umgang mit Datenbankverbindungsfehlern in PHP Jun 05, 2024 pm 02:16 PM

Um Datenbankverbindungsfehler in PHP zu behandeln, können Sie die folgenden Schritte ausführen: Verwenden Sie mysqli_connect_errno(), um den Fehlercode abzurufen. Verwenden Sie mysqli_connect_error(), um die Fehlermeldung abzurufen. Durch die Erfassung und Protokollierung dieser Fehlermeldungen können Datenbankverbindungsprobleme leicht identifiziert und behoben werden, wodurch der reibungslose Betrieb Ihrer Anwendung gewährleistet wird.

Ausgestattet mit Prozessoren der AMD EPYC 4004-Serie bringt ASUS eine Vielzahl von Server- und Workstation-Produkten auf den Markt Ausgestattet mit Prozessoren der AMD EPYC 4004-Serie bringt ASUS eine Vielzahl von Server- und Workstation-Produkten auf den Markt Jul 23, 2024 pm 09:34 PM

Laut Nachrichten dieser Website vom 23. Juli hat ASUS eine Reihe von Produkten auf Server- und Workstation-Ebene auf den Markt gebracht, die mit Prozessoren der AMD EPYC 4004-Serie ausgestattet sind. Hinweis von dieser Website: AMD hat im Mai die AM5-Plattform und die Prozessoren der EPYC 4004-Serie mit Zen4-Architektur auf den Markt gebracht, die bis zu 16-Kern-3DV-Cache-Spezifikationen bieten. ASUSProER100AB6-Server ASUSProER100AB6 ist ein 1U-Rack-Serverprodukt, das mit einem Prozessor der EPYC Xiaolong 4004-Serie ausgestattet ist und für die Anforderungen von IDC sowie kleinen und mittleren Unternehmen geeignet ist. ASUSExpertCenterProET500AB6 Workstation ASUSExpertCenterProET500AB6 ist eine

Wie verbinde ich mich mit Golang mit einer Remote-Datenbank? Wie verbinde ich mich mit Golang mit einer Remote-Datenbank? Jun 01, 2024 pm 08:31 PM

Über das Datenbank-/SQL-Paket der Go-Standardbibliothek können Sie eine Verbindung zu Remote-Datenbanken wie MySQL, PostgreSQL oder SQLite herstellen: Erstellen Sie eine Verbindungszeichenfolge mit Datenbankverbindungsinformationen. Verwenden Sie die Funktion sql.Open(), um eine Datenbankverbindung zu öffnen. Führen Sie Datenbankoperationen wie SQL-Abfragen und Einfügeoperationen durch. Verwenden Sie „defer“, um die Datenbankverbindung zu schließen und Ressourcen freizugeben.

Wie verwende ich Datenbank-Callback-Funktionen in Golang? Wie verwende ich Datenbank-Callback-Funktionen in Golang? Jun 03, 2024 pm 02:20 PM

Durch die Verwendung der Datenbank-Rückruffunktion in Golang kann Folgendes erreicht werden: Ausführen von benutzerdefiniertem Code, nachdem der angegebene Datenbankvorgang abgeschlossen ist. Fügen Sie benutzerdefiniertes Verhalten durch separate Funktionen hinzu, ohne zusätzlichen Code zu schreiben. Rückruffunktionen stehen für Einfüge-, Aktualisierungs-, Lösch- und Abfragevorgänge zur Verfügung. Sie müssen die Funktion sql.Exec, sql.QueryRow oder sql.Query verwenden, um die Rückruffunktion verwenden zu können.

Wie gehe ich mit Datenbankverbindungen und -operationen mit C++ um? Wie gehe ich mit Datenbankverbindungen und -operationen mit C++ um? Jun 01, 2024 pm 07:24 PM

Verwenden Sie die DataAccessObjects (DAO)-Bibliothek in C++, um die Datenbank zu verbinden und zu betreiben, einschließlich der Einrichtung von Datenbankverbindungen, der Ausführung von SQL-Abfragen, dem Einfügen neuer Datensätze und der Aktualisierung vorhandener Datensätze. Die spezifischen Schritte sind: 1. Erforderliche Bibliotheksanweisungen einschließen; 3. Ein Recordset-Objekt erstellen, um SQL-Abfragen auszuführen oder Daten zu bearbeiten; 4. Die Ergebnisse durchlaufen oder Datensätze entsprechend den spezifischen Anforderungen aktualisieren;

Wie speichere ich JSON-Daten in einer Datenbank in Golang? Wie speichere ich JSON-Daten in einer Datenbank in Golang? Jun 06, 2024 am 11:24 AM

JSON-Daten können mithilfe der gjson-Bibliothek oder der json.Unmarshal-Funktion in einer MySQL-Datenbank gespeichert werden. Die gjson-Bibliothek bietet praktische Methoden zum Parsen von JSON-Feldern, und die Funktion json.Unmarshal erfordert einen Zieltypzeiger zum Unmarshalieren von JSON-Daten. Bei beiden Methoden müssen SQL-Anweisungen vorbereitet und Einfügevorgänge ausgeführt werden, um die Daten in der Datenbank beizubehalten.

See all articles