参考:
query方式:https://github.com/yii2-chinesization/yii2-zh-cn/blob/master/guide-zh-CN/db-query-builder.md
Active Record模式 :https://github.com/yii2-chinesization/yii2-zh-cn/blob/master/guide-zh-CN/db-active-record.md
建立数据库链接
class Customer extends ActiveRecord{ // ... public static function getDb() { return /Yii::$app->db2; // 使用名为 "db2" 的应用组件 默认是db }}
声明AR类
namespace app/models;use yii/db/ActiveRecord;class Customer extends ActiveRecord{ /** * @return string 返回该AR类关联的数据表名 */ public static function tableName() { return 'customer'; }}
查询数据
// 取回所有活跃客户(状态为 *active* 的客户)并以他们的 ID 排序:$customers = Customer::find() ->where(['status' => Customer::STATUS_ACTIVE]) //Customer中定义的常量 ->orderBy('id') ->all();// 返回ID为1的客户:$customer = Customer::find() ->where(['id' => 1]) ->one();// 取回活跃客户的数量:$count = Customer::find() ->where(['status' => Customer::STATUS_ACTIVE]) ->count();// 以客户ID索引结果集:$customers = Customer::find()->indexBy('id')->all();// $customers 数组以 ID 为索引// 用原生 SQL 语句检索客户:$sql = 'SELECT * FROM customer';$customers = Customer::findBySql($sql)->all();
有两个快捷方法:findOne
和 findAll()
用来返回一个或者一组ActiveRecord
实例。前者返回第一个匹配到的实例,后者返回所有。 例如:
// 返回 id 为 1 的客户$customer = Customer::findOne(1);// 返回 id 为 1 且状态为 *active* 的客户$customer = Customer::findOne([ 'id' => 1, 'status' => Customer::STATUS_ACTIVE,]);// 返回id为1、2、3的一组客户$customers = Customer::findAll([1, 2, 3]);// 返回所有状态为 "deleted" 的客户$customer = Customer::findAll([ 'status' => Customer::STATUS_DELETED,]);数组形式获取数据
// 以数组而不是对象形式取回客户信息:$customers = Customer::find() ->asArray() ->all();// $customers 的每个元素都是键值对数组批量获取数据
// 一次提取 10 个客户信息foreach (Customer::find()->batch(10) as $customers) { // $customers 是 10 个或更少的客户对象的数组}// 一次提取 10 个客户并一个一个地遍历处理foreach (Customer::find()->each(10) as $customer) { // $customer 是一个 ”Customer“ 对象}// 贪婪加载模式的批处理查询foreach (Customer::find()->with('orders')->each() as $customer) {}例子:
// 插入新客户的记录$customer = new Customer();$customer->name = 'James';$customer->email = 'james@example.com';$customer->save(); // 等同于 $customer->insert();// 更新现有客户记录$customer = Customer::findOne($id);$customer->email = 'james@example.com';$customer->save(); // 等同于 $customer->update();// 删除已有客户记录$customer = Customer::findOne($id);$customer->delete();// 删除多个年龄大于20,性别为男(Male)的客户记录Customer::deleteAll('age > :age AND gender = :gender', [':age' => 20, ':gender' => 'M']);// 所有客户的age(年龄)字段加1:Customer::updateAllCounters(['age' => 1]);
查询关联数据
class Customer extends /yii/db/ActiveRecord{ public function getOrders() { // 客户和订单通过 Order.customer_id -> id 关联建立一对多关系 return $this->hasMany(Order::className(), ['customer_id' => 'id']); }}class Order extends /yii/db/ActiveRecord{ // 订单和客户通过 Customer.id -> customer_id 关联建立一对一关系 public function getCustomer() { return $this->hasOne(Customer::className(), ['id' => 'customer_id']); }}join类型关联查询
// 查找所有订单并以客户 ID 和订单 ID 排序,并贪婪加载 "customer" 表$orders = Order::find()->joinWith('customer')->orderBy('customer.id, order.id')->all();// 查找包括书籍的所有订单,并以 `INNER JOIN` 的连接方式即时加载 "books" 表$orders = Order::find()->innerJoinWith('books')->all();

MySQLhandlesconcurrencyusingamixofrow-levelandtable-levellocking,primarilythroughInnoDB'srow-levellocking.ComparedtootherRDBMS,MySQL'sapproachisefficientformanyusecasesbutmayfacechallengeswithdeadlocksandlacksadvancedfeatureslikePostgreSQL'sSerializa

mySqlHandLestActionSefectefectionalytheinnodbengine,supportingAcidPropertiessimilartopostgresqlesqlandoracle.1)mySqluessRepeTableReadAbereadasTheDefaultIsolationLeleleteLevel,whatcanBeadJustEdToreDtoreDtoreDtoreadCommittedCommittenCommententCommittedForHigh-TrafficsCenarios.2)

最佳實踐包括:1)理解數據結構和MySQL處理方式,2)適當索引,3)避免SELECT*,4)使用合適的JOIN類型,5)謹慎使用子查詢,6)使用EXPLAIN分析查詢,7)考慮查詢對服務器資源的影響,8)定期維護數據庫。這些做法能使MySQL查詢不僅快速,還具備可維護性、可擴展性和資源效率。

MySQLisbetterforspeedandsimplicity,suitableforwebapplications;PostgreSQLexcelsincomplexdatascenarioswithrobustfeatures.MySQLisidealforquickprojectsandread-heavytasks,whilePostgreSQLispreferredforapplicationsrequiringstrictdataintegrityandadvancedSQLf

MySQL通過異步、半同步和組複製三種模式處理數據複製。 1)異步複製性能高但可能丟失數據。 2)半同步複製提高數據安全性但增加延遲。 3)組複製支持多主複製和故障轉移,適用於高可用性需求。

EXPLAIN語句可用於分析和提升SQL查詢性能。 1.執行EXPLAIN語句查看查詢計劃。 2.分析輸出結果,關注訪問類型、索引使用情況和JOIN順序。 3.根據分析結果,創建或調整索引,優化JOIN操作,避免全表掃描,以提升查詢效率。

使用mysqldump進行邏輯備份和MySQLEnterpriseBackup進行熱備份是備份MySQL數據庫的有效方法。 1.使用mysqldump備份數據庫:mysqldump-uroot-pmydatabase>mydatabase_backup.sql。 2.使用MySQLEnterpriseBackup進行熱備份:mysqlbackup--user=root--password=password--backup-dir=/path/to/backupbackup。恢復時,使用相應的命


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver CS6
視覺化網頁開發工具

WebStorm Mac版
好用的JavaScript開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。