操作mysql數據庫總結,MySQL數據庫筆記

本文目錄一覽:

Yii2框架操作數據庫的方法分析【以mysql為例】

本文實例講述了Yii2框架操作數據庫的方法。分享給大家供大家參考,具體如下:

準備數據庫

DROP

TABLE

IF

EXISTS

`pre_user`;

CREATE

TABLE

`pre_user`(

`id`

int(11)

AUTO_INCREMENT

PRIMARY

KEY,

`username`

varchar(255)

NOT

NULL,

`password`

varchar(32)

NOT

NULL

DEFAULT

”,

`password_hash`

varchar(255)

NOT

NULL

DEFAULT

”,

`email`

varchar(255)

NOT

NULL

DEFAULT

”,

`status`

smallint(6)

NOT

NULL

DEFAULT

10,

`created_at`

smallint(6)

NOT

NULL

DEFAULT

0,

`updated_at`

smallint(6)

NOT

NULL

DEFAULT

)ENGINE=InnoDB

DEFAULT

CHARSET=utf8mb4;

配置連接

config\db.php

?php

return

[

‘class’

=

‘yii\db\Connection’,

‘dsn’

=

‘mysql:host=localhost;dbname=yii2’,

‘username’

=

‘root’,

‘password’

=

‘root’,

‘charset’

=

‘utf8mb4’,

‘tablePrefix’

=

‘pre_’

];

查看數據庫連接是否成功

控制器里打印:

var_dump(\Yii::$app-db);

怎麼執行SQL語句?

增刪改

//

接收表單的數據

$username

=

‘jack’;

$sql

=

“INSERT

INTO

{{%user}}

(username,status)

VALUES

(:username,:status)”;

//

返回受影響行數

$row

=

\Yii::$app-db-createCommand($sql,[‘username’=$username,’status’=8])-execute();

//

獲取自增ID

echo

\Yii::$app-db-getLastInsertID();

查詢

$sql

=

“SELECT

*

FROM

{{%user}}

WHERE

id:id”;

//

查詢結果是一個二維數組

$userArr

=

\Yii::$app-db-createCommand($sql,[‘id’=1])-queryAll();

//

如果要查詢一個

$user

=

\Yii::$app-db-createCommand($sql,[‘id’=1])-queryOne();

//

如果要返回單值

//

例如

select

count(*)語句

$count

=

\Yii::$app-db-createCommand($sql,[‘id’=1])-queryScalar();

echo

$count;

更多關於Yii相關內容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結》、《php優秀開發框架總結》、《smarty模板入門基礎教程》、《php面向對象程序設計入門教程》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家基於Yii框架的PHP程序設計有所幫助。

您可能感興趣的文章:Yii2.0高級框架數據庫增刪改查的一些操作Yii2——使用數據庫操作匯總(增刪查改、事務)Yii2數據庫操作常用方法小結Yii2框架實現數據庫常用操作總結Yii2實現跨mysql數據庫關聯查詢排序功能代碼Yii+MYSQL鎖表防止並發情況下重複數據的方法Yii

連接、修改

MySQL

數據庫及phpunit

測試連接Yii實現MySQL多數據庫和讀寫分離實例分析Yii操作數據庫實現動態獲取表名的方法Yii操作數據庫的3種方法

關於php操作mysql執行數據庫查詢的一些常用操作匯總

php操作mysql步驟:

1.$connect=mysql_connect(‘localhost’,’root’,’123456′)

or

die(‘數據庫連接失敗。’mysql_error());鏈接mysql。

2.mysql_select_db(‘database’,$connect)選擇鏈接的數據庫。

3.mysql_query(‘Set

names

gb2312′);$sql

=

“select

*

from

blog_article”;準備要查詢的數據。

4.$datas

=

mysql_query($sql);執行sql查詢。

5.$data

=

mysql_fetch_assoc($datas)得到查詢到的緩存在內存中的一條數據。

6.print_r($data);

相同點:三個函數都是返回數據庫中查詢到的一行數據(說的再清楚點就是一條數據)。

不同點:mysql_fetch_assoc()用的是數據庫中相應的字段名作為的key值(也就是數組下標)

如:filed[‘id’]=1;

mysql_fetch_row()用的是自動生成的數字(從0開始依次生成)作為的key值(也就是數組下標)

如:filed[0]=1;

mysql_fetch_array()用的是自動生成的數字(從0開始依次生成)作為的key值(也就是數組下標),而且它還同時生成數據庫中相應的字段名作為的key值(也就是數組下標)

如:

filed[0]=1,filed[‘id’]=1;也就是說,mysql_fetch_array()將mysql_fetch_assoc()和mysql_fetch_row()查詢到的結果合為了一體了。

mysql_fetch_object()與mysql_fetch_assoc()差不多。只是mysql_fetch_assoc()返回的是數組。mysql_fetch_object()返回的是object對象。

mysql_insert_id() 取得上一步

INSERT

操作產生的

ID。

mysql_result()

函數返回結果集中一個字段的值。

mysql_num_fields()

函數返回結果集中字段的數目。

mysql_affected_rows();返回前一次

MySQL

操作所影響的記錄行數。

mysql_num_rows(mysql_query($sql))獲得結果集中行的數目。

mysql_pconnect()

函數打開一個到

MySQL

服務器的持久連接。

mysql_pconnect()

mysql_connect()

非常相似,但有兩個主要區別:

1.

當連接的時候本函數將先嘗試尋找一個在同一個主機上用同樣的用戶名和密碼已經打開的(持久)連接,如果找到,則返回此連接標識而不打開新連接。

2.

其次,當腳本執行完畢後到

SQL

服務器的連接不會被關閉,此連接將保持打開以備以後使用(mysql_close()

不會關閉由

mysql_pconnect()

建立的連接)。

mysql_data_seek(mysql_query($sql),8);獲得結果集中的第8條數據。(mysql_num_rows(mysql_query($sql))和mysql_data_seek(mysql_query($sql),8)在mysql_unbuffered_query($sql)不可以使用。)

mysql_unbuffered_query($sql)和mysql_query($sql)效果差不多,但是

mysql_unbuffered_query($sql)不緩存。mysql_query($sql)會緩存查詢的結果。

mysql_close();關閉mysql的最近的鏈接。

mysql_field_flags(mysql_query($sql),6)返回第六個字段的表屬性輸出如:not_null

primary_key

auto_increment

mysql_fetch_lengths(mysql_query($sql))返回該條數據的所有字段的每個字段的長度。返回的是一個數字組成的數組。

mysql_field_name(mysql_query($sql),3)返回第三個字段的字段名。

mysql_field_table(mysql_query($sql),0)返回指定字段所在的表名。

mysql_free_result(mysql_query($sql))

函數釋放結果內存。

mysql_get_client_info()

函數返回

MySQL

客戶端信息。

mysql_get_host_info()

取得

MySQL

主機信息。

關於mysql數據庫操作

1.

create

database

school;//創建數據庫

2.

show

databases;

//查看數據庫

3.

use

school;

//使用創建的數據庫

4.

create

table

students

(

s_no

int

,name

varchar(20),gender

varchar(10),birthday

datetime,image

blob

,address

varchar(50),

c_no

int,primary

key

(s_no,c_no)

);

//建students表

5.

create

table

classes(c_no

int,name

varchar(20)

,

class_adviser

varchar(20)

,foreign

key(c_no)

REFERENCES

students(c_no));

//建classes表

6.

insert

into

students(s_no,name,gender,birthday,image,address,c_no)

values(1,’Sally’,’FM’,’1987-1-2′,null,’aaaaa’,1);

7.

insert

into

students(s_no,name,gender,birthday,image,address,c_no)

values(2,’Nicholas’,’M’,’1985-8-8′,Null,’bbbbb’,1);

8.

insert

into

students(s_no,name,gender,birthday,image,address,c_no)

values(3,’Jason’,’M’,’1988-5-19′,Null,’ccccc’,2);

9.

insert

into

students(s_no,name,gender,birthday,image,address,c_no)

values(4,’Jamile’,’M’,’1979-2-5′,Null,’ddddd’,2);

10.

insert

into

classes

(c_no,name,class_adviser)

values

(1,’Class1′,’Mike’);

11.

insert

into

classes

(c_no,name,class_adviser)

values

(2,’Class2′,’Andy’);

12.

select

a.*

from

students

a,

classes

b

where

a.c_no

in

(select

b.c_no

from

classes

b

where

b.class_adviser

=

‘Mike’)

and

a.c_no

=

b.c_no;

//查數據

或者

select

students.s_no,

students.name,

students.gender,

students.birthday,

students.image,

students.address,

students.c_no

from

students,

classes

where

students.c_no

in

(select

c_no

from

classes

where

class_adviser

=

‘Mike’)

and

students.c_no

=

classes.c_no;

盧旭

MySQL數據庫設置遠程訪問權限方法小結

MySQL基礎知識第一期,如何遠程訪問MySQL數據庫設置權限方法總結,討論訪問單個數據庫,全部數據庫,指定用戶訪問,設置訪問密碼,指定訪問主機。

1,設置訪問單個數據庫權限

複製代碼

代碼如下:

mysqlgrant

all

privileges

on

test.*

to

‘root’@’%’;

說明:設置用戶名為root,密碼為空,可訪問數據庫test

2,設置訪問全部數據庫權限

複製代碼

代碼如下:

mysqlgrant

all

privileges

on

*.*

to

‘root’@’%’;

說明:設置用戶名為root,密碼為空,可訪問所有數據庫*

3,設置指定用戶名訪問權限

複製代碼

代碼如下:

mysqlgrant

all

privileges

on

*.*

to

‘liuhui’@’%’;

說明:設置指定用戶名為liuhui,密碼為空,可訪問所有數據庫*

4,設置密碼訪問權限

複製代碼

代碼如下:

mysqlgrant

all

privileges

on

*.*

to

‘liuhui’@’%’

IDENTIFIED

BY

‘liuhui’;

說明:設置指定用戶名為liuhui,密碼為liuhui,可訪問所有數據庫*

5,設置指定可訪問主機權限

複製代碼

代碼如下:

mysqlgrant

all

privileges

on

*.*

to

‘liuhui’@’10.2.1.11’;

說明:設置指定用戶名為liuhui,可訪問所有數據庫*,只有10.2.1.11這台機器有權限訪問

還可以設置指定訪問某個數據庫下的某個數據表,請繼續關注MySQL基礎知識系列。

深入理解MySQL數據庫各種鎖(總結)

MyISAM和InnoDB存儲引擎使用的鎖:

封鎖粒度小:

由於InnoDB存儲引擎支持的是行級別的鎖,因此意向鎖(因為意向鎖是表鎖)其實不會阻塞除全表掃以外的任何請求。故表級意向鎖與行級鎖的兼容性如下所示

參考

參考

行鎖的三種算法:

這條語句阻止其他事務插入10和20之間的數字,無論這個數字是否存在。 間隙可以跨越0個,單個或多個索引值。

共享鎖:

排他鎖:

樂觀鎖:總是假設最好的情況,每次去拿數據的時候都認為別人不會修改(天真), 操作數據時不會上鎖 ,但是 更新時會判斷在此期間有沒有別的事務更新這個數據,若被更新過,則失敗重試 ;適用於讀多寫少的場景。

樂觀鎖的實現方式 有:

關閉自動提交後,我們需要手動開啟事務。

上述就實現了悲觀鎖,悲觀鎖就是悲觀主義者,它會認為我們在事務A中操作數據1的時候,一定會有事務B來修改數據1,所以,在第2步我們將數據查詢出來後直接加上排它鎖(X)鎖,防止別的事務來修改事務1,直到我們commit後,才釋放了排它鎖。

MySQL數據庫的索引的操作知多少

MySQL索引類型包括:

(1)普通索引

這是最基本的索引,它沒有任何限制。它有以下幾種創建方式:

◆創建索引

CREATE INDEX indexName ON mytable(username(length)); 如果是CHAR,VARCHAR類型,length可以小於字段實際長度;如果是BLOB和TEXT類型,必須指定 length,下同。

◆修改表結構

ALTER mytable ADD INDEX [indexName] ON (username(length))

◆創建表的時候直接指定

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) ); 刪除索引的語法:

DROP INDEX [indexName] ON mytable;

(2)唯一索引

與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種創建方式:

◆創建索引

CREATE UNIQUE INDEX indexName ON mytable(username(length))

◆修改表結構

ALTER mytable ADD UNIQUE [indexName] ON (username(length))

◆創建表的時候直接指定

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );

(3)主鍵索引

它是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時創建主鍵索引:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) ); 當然也可以用 ALTER 命令。記住:一個表只能有一個主鍵。

(4)組合索引

為了形象地對比單列索引和組合索引,為表添加多個字段:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT NOT NULL ); 為了進一步榨取MySQL的效率,就要考慮建立組合索引。就是將 name, city, age建到一個索引里:

ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age); 建表時,usernname長度為 16,這裡用 10。這是因為一般情況下名字的長度不會超過10,這樣會加速索引查詢速度,還會減少索引文件的大小,提高INSERT的更新速度。

如果分別在 usernname,city,age上建立單列索引,讓該表有3個單列索引,查詢時和上述的組合索引效率也會大不一樣,遠遠低於我們的組合索引。雖然此時有了三個索引,但MySQL只能用到其中的那個它認為似乎是最有效率的單列索引。

建立這樣的組合索引,其實是相當於分別建立了下面三組組合索引:

usernname,city,age usernname,city usernname 為什麼沒有 city,age這樣的組合索引呢?這是因為MySQL組合索引“最左前綴”的結果。簡單的理解就是只從最左面的開始組合。並不是只要包含這三列的查詢都會用到該組合索引,下面的幾個SQL就會用到這個組合索引:

SELECT * FROM mytable WHREE username=”admin” AND city=”鄭州” SELECT * FROM mytable WHREE username=”admin” 而下面幾個則不會用到:

SELECT * FROM mytable WHREE age=20 AND city=”鄭州” SELECT * FROM mytable WHREE city=”鄭州”

(5)建立索引的時機

一般來說,在WHERE和JOIN中出現的列需要建立索引,但也不完全如此,因為MySQL只對,=,=,,=,BETWEEN,IN,以及某些時候的LIKE才會使用索引。例如:

SELECT t.Name FROM mytable t LEFT JOIN mytable m ON t.Name=m.username WHERE m.age=20 AND m.city=’鄭州’ 此時就需要對city和age建立索引,由於mytable表的userame也出現在了JOIN子句中,也有對它建立索引的必要。

剛才提到只有某些時候的LIKE才需建立索引。因為在以通配符%和_開頭作查詢時,MySQL不會使用索引。例如下句會使用索引:

SELECT * FROM mytable WHERE username like’admin%’ 而下句就不會使用:

SELECT * FROM mytable WHEREt Name like’%admin’ 因此,在使用LIKE時應注意以上的區別。

(6)索引的不足之處

上面都在說使用索引的好處,但過多的使用索引將會造成濫用。因此索引也會有它的缺點:

◆雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對錶進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要保存數據,還要保存一下索引文件。

◆建立索引會佔用磁盤空間的索引文件。一般情況這個問題不太嚴重,但如果你在一個大表上創建了多種組合索引,索引文件的會膨脹很快。

索引只是提高效率的一個因素,如果你的MySQL有大數據量的表,就需要花時間研究建立最優秀的索引,或優化查詢語句。

(7)使用索引的注意事項

使用索引時,有以下一些技巧和注意事項:

◆索引不會包含有NULL值的列

只要列中包含有NULL值都將不會被包含在索引中,複合索引中只要有一列含有NULL值,那麼這一列對於此複合索引就是無效的。所以我們在數據庫設計時不要讓字段的默認值為NULL。

◆使用短索引

對串列進行索引,如果可能應該指定一個前綴長度。例如,如果有一個CHAR(255)的列,如果在前10個或20個字符內,多數值是惟一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁盤空間和I/O操作。

◆索引列排序

MySQL查詢只使用一個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此數據庫默認排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列創建複合索引。

◆like語句操作

一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是一個問題。like “%aaa%” 不會使用索引而like “aaa%”可以使用索引。

◆不要在列上進行運算

select * from users where YEAR(adddate)2007; 將在每個行上進行運算,這將導致索引失效而進行全表掃描,因此我們可以改成

select * from users where adddate‘2007-01-01’;

◆不使用NOT IN和操作

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/295209.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-26 17:15
下一篇 2024-12-26 17:15

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python棧操作用法介紹

    如果你是一位Python開發工程師,那麼你必須掌握Python中的棧操作。在Python中,棧是一個容器,提供後進先出(LIFO)的原則。這篇文章將通過多個方面詳細地闡述Pytho…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • Python磁盤操作全方位解析

    本篇文章將從多個方面對Python磁盤操作進行詳細闡述,包括文件讀寫、文件夾創建、刪除、文件搜索與遍歷、文件重命名、移動、複製、文件權限修改等常用操作。 一、文件讀寫操作 文件讀寫…

    編程 2025-04-29
  • Python代碼實現迴文數最少操作次數

    本文將介紹如何使用Python解決一道經典的迴文數問題:給定一個數n,按照一定規則對它進行若干次操作,使得n成為迴文數,求最少的操作次數。 一、問題分析 首先,我們需要了解迴文數的…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29

發表回復

登錄後才能評論