国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

廣告?zhèn)髅焦揪W(wǎng)站網(wǎng)站推廣策劃報(bào)告

廣告?zhèn)髅焦揪W(wǎng)站,網(wǎng)站推廣策劃報(bào)告,如何自己申請(qǐng)商標(biāo)注冊(cè),wordpress更新php版本Linux下MySQL的簡(jiǎn)單使用 導(dǎo)語(yǔ)MySQL安裝與配置 MySQL安裝密碼設(shè)置 MySQL管理 命令 myisamchkmysql其他 常見(jiàn)操作 C語(yǔ)言訪問(wèn)MYSQL 連接例程錯(cuò)誤處理使用SQL 總結(jié)參考文獻(xiàn) 導(dǎo)語(yǔ) 這一章是MySQL的使用,一些常用的MySQL語(yǔ)句屬于本科階段內(nèi)容,然后是C語(yǔ)言和M…
Linux下MySQL的簡(jiǎn)單使用
  • 導(dǎo)語(yǔ)
  • MySQL安裝與配置
    • MySQL安裝
    • 密碼設(shè)置
  • MySQL管理
    • 命令
      • myisamchk
      • mysql
      • 其他
    • 常見(jiàn)操作
  • C語(yǔ)言訪問(wèn)MYSQL
    • 連接例程
    • 錯(cuò)誤處理
    • 使用SQL
  • 總結(jié)
  • 參考文獻(xiàn)

導(dǎo)語(yǔ)

這一章是MySQL的使用,一些常用的MySQL語(yǔ)句屬于本科階段內(nèi)容,然后是C語(yǔ)言和MySQl之間的交互,可以看到C語(yǔ)言已經(jīng)有成熟的和MySQL的接口

MySQL安裝與配置

MySQL安裝

MySQL的安裝很簡(jiǎn)單,只需要執(zhí)行幾個(gè)shell命令就行,需要注意的是,對(duì)于Ubuntu新機(jī)器來(lái)說(shuō)最好不要一開(kāi)始就執(zhí)行sudo apt update,因?yàn)楹芏喟g的依賴(lài)是復(fù)雜且未知的,如果直接全部更新可能會(huì)導(dǎo)致在跟書(shū)上同步實(shí)驗(yàn)時(shí)出問(wèn)題(命令參考了ubuntu 23.10.1 mysql 安裝)

sudo apt install mysql-server -y#這里就安裝好了服務(wù)器
systemctl start mysql#開(kāi)啟mysql服務(wù)
systemctl status mysql#檢查狀態(tài),如果出現(xiàn)mysql>就沒(méi)問(wèn)題sudo mysul -u root mysql#進(jìn)入mysql
ps -el | grep mysqld#可以看mysql是否啟動(dòng)

下面這個(gè)是備選方案,是在新機(jī)器上裝的

sudo apt-get update
sudo apt-get install libmysqlclient-dev
mysql_config --cflags
mysql_config --libs

后兩條命令是檢測(cè)MySQL Connector/C是否安裝完成,由于新版本的MySQL已經(jīng)不支持書(shū)上的寫(xiě)法,所以需要安裝這個(gè)包,正常應(yīng)該顯示如下圖

在這里插入圖片描述

之后直接安裝服務(wù)器即可

sudo apt-get update
sudo apt-get install mysql-server

通過(guò)下面的程序驗(yàn)證安裝是否成功

#include <stdio.h>
#include <mysql/mysql.h>int main() {MYSQL *conn;conn = mysql_init(NULL);if (conn == NULL) {fprintf(stderr, "mysql_init() failed
");return EXIT_FAILURE;}if (mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect() failed: %s
", mysql_error(conn));mysql_close(conn);return EXIT_FAILURE;}printf("Connected to the database successfully!
");mysql_close(conn);return EXIT_SUCCESS;
}

執(zhí)行的命令和結(jié)果如下

gcc -o test_program test_program.c $(mysql_config --cflags) $(mysql_config --libs)

在這里插入圖片描述

密碼設(shè)置

一開(kāi)始的root是沒(méi)有密碼的,可以通過(guò)命令查看各用戶的密碼如下,可以看到root密碼為空

在這里插入圖片描述

這里需要注意的是新版的MySQL和老版的不一樣,新版本的password列改成了authentication_string

可以執(zhí)行命令來(lái)設(shè)置密碼,修改后查看,可以看到root有密碼,但是被MySQL加密過(guò)了,再次登錄時(shí)直接回車(chē)發(fā)現(xiàn)無(wú)法識(shí)別,只有輸入密碼才能識(shí)別用戶

在這里插入圖片描述

這里我們刪除除去root之外的默認(rèn)用戶,并且刪除從localhost以外任何主機(jī)的登錄

在這里插入圖片描述

到此為止,我們有了一個(gè)運(yùn)行的MySQL,該MySQL只有設(shè)定密碼的root通過(guò)本地才能連接,為了方便后續(xù)的操作,這里創(chuàng)建一個(gè)普通用戶rick,它將能用三種方法來(lái)連接MySQL(本地連接,從IP連接,從wiley.com域中任何機(jī)器連接)

首先為rick創(chuàng)建一個(gè)本地登錄,這里書(shū)上給的代碼太老了,已經(jīng)不適配現(xiàn)在的MySQL,更改成了現(xiàn)在版本的,最新的 MySQL 版本中,GRANT 語(yǔ)句不再用于設(shè)置用戶密碼。密碼應(yīng)該通過(guò)單獨(dú)的 CREATE USER 或 SET PASSWORD 語(yǔ)句來(lái)設(shè)置。

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

通過(guò)三種不同的方式設(shè)置了三個(gè)用戶,可以通過(guò)select命令展示,可以看到三種方式都成功了,并且rick的權(quán)利很大

在這里插入圖片描述

MySQL管理

命令

所有命令都接受三個(gè)標(biāo)準(zhǔn)參數(shù)

-u 用于指定用戶(用戶名)
-p 用于提示密碼(如果在命令行中未直接提供)
-h 用于指定主機(jī)(MySQL 服務(wù)器地址)

除了標(biāo)準(zhǔn)參數(shù)之外,每個(gè)命令還有自己的命令選項(xiàng)

myisamchk

通常情況下,myisamchk以創(chuàng)建的mysql用戶運(yùn)行并且工作目錄為數(shù)據(jù)表在的目錄中,常見(jiàn)的命令選項(xiàng)有

-c 檢查表以發(fā)現(xiàn)錯(cuò)誤
-e 執(zhí)行擴(kuò)展檢查
-r 修復(fù)發(fā)現(xiàn)的錯(cuò)誤

mysql

使用mysql可以不經(jīng)過(guò)MySQL的控制臺(tái)完成很多功能,通過(guò)在命令行最后添加數(shù)據(jù)庫(kù)名稱(chēng)作為參數(shù)即可,可以通過(guò) mysql --help | less來(lái)查看所有的命令行選項(xiàng)列表

其他

還有一些其他的命令,如mysqladmin、mysqlbug等,由于MySQL已經(jīng)相對(duì)于書(shū)上更新很多了,所以很多命令已經(jīng)過(guò)時(shí),在此不多贅述

常見(jiàn)操作

書(shū)上提供的常見(jiàn)操作包括grant、revoke以及數(shù)據(jù)類(lèi)型等,這些屬于本科階段SQL的基本內(nèi)容,在此不再贅述,跳過(guò)

C語(yǔ)言訪問(wèn)MYSQL

連接例程

C語(yǔ)言連接MySQL需要先初始化一個(gè)連接句柄結(jié)構(gòu),然后再進(jìn)行實(shí)際的連接,句柄通過(guò)mysql_init函數(shù)初始化,函數(shù)原型具體如下,mysql_init() 函數(shù)通常是在使用 MySQL 客戶端 API 進(jìn)行數(shù)據(jù)庫(kù)編程時(shí)的第一個(gè)步驟。它為連接操作做了準(zhǔn)備,確保在進(jìn)行連接操作之前,連接對(duì)象處于一個(gè)已初始化的狀態(tài)

MYSQL *mysql_init(MYSQL *);
//mysql:一個(gè)指向 MYSQL 結(jié)構(gòu)體的指針。如果該指針為空,
//mysql_init() 將分配一個(gè)新的 MYSQL 結(jié)構(gòu)體并返回它。如果提供了一個(gè)非空指針,它會(huì)用新的數(shù)據(jù)初始化該對(duì)象

真正與數(shù)據(jù)庫(kù)進(jìn)行連接的是mysql_real_connect函數(shù),函數(shù)原型如下

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *dbname, unsigned int port, const char *unix_socket, unsigned long client_flag);
//mysql是初始化之后的句柄

還有例程函數(shù)和關(guān)閉函數(shù),在此不贅述

現(xiàn)在嘗試創(chuàng)立一個(gè)數(shù)據(jù)庫(kù),向其中填入數(shù)據(jù)并通過(guò)C語(yǔ)言訪問(wèn)它

在這里插入圖片描述

逐行輸入對(duì)數(shù)據(jù)庫(kù)的操作比較麻煩,并且容易出錯(cuò),可以把要執(zhí)行的命令單獨(dú)做成文件,然后直接導(dǎo)入執(zhí)行

-- Create the table childrenCREATE TABLE children (childno int(11) NOT NULL auto_increment,fname varchar(30),age int(11),PRIMARY KEY (childno)
);-- Populate the table 'children'INSERT INTO children (childno, fname, age) VALUES (1, 'Jenny', 21);
INSERT INTO children (childno, fname, age) VALUES (2, 'Andrew', 17);
INSERT INTO children (childno, fname, age) VALUES (3, 'Gavin', 8);
INSERT INTO children (childno, fname, age) VALUES (4, 'Duncan', 6);
INSERT INTO children (childno, fname, age) VALUES (5, 'Emma', 4);
INSERT INTO children (childno, fname, age) VALUES (6, 'Alex', 15);
INSERT INTO children (childno, fname, age) VALUES (7, 'Adrian', 9);

在這里插入圖片描述
在這里插入圖片描述

可以看到數(shù)據(jù)都被成功插入了

之后可以通過(guò)上述函數(shù)來(lái)連接數(shù)據(jù)庫(kù),由于系統(tǒng)和包之間的依賴(lài)問(wèn)題以及mysql的版本問(wèn)題,導(dǎo)致這個(gè)程序無(wú)法在舊機(jī)上運(yùn)行,暫時(shí)沒(méi)有找到解決方案,在新機(jī)上可以運(yùn)行,運(yùn)行結(jié)果和程序如下

#include <stdlib.h>
#include <stdio.h>
#include <mysql/mysql.h>  // 包含新版 MySQL Connector/C 的頭文件int main(int argc, char *argv[])
{MYSQL *con;// 初始化 MySQL 連接句柄con = mysql_init(NULL);if (con == NULL) {fprintf(stderr, "mysql_init() failed
");return EXIT_FAILURE;}// 連接數(shù)據(jù)庫(kù)if (mysql_real_connect(con, "localhost", "rick", "111111", "foo", 0, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect() failed
");fprintf(stderr, "Error: %s
", mysql_error(con));mysql_close(con);return EXIT_FAILURE;}// 輸出連接成功狀態(tài)printf("Connected successfully!
");// 關(guān)閉連接mysql_close(con);return EXIT_SUCCESS;
}

在這里插入圖片描述

執(zhí)行的時(shí)候需要添加對(duì)應(yīng)的inlcude路徑和庫(kù)文件路徑

錯(cuò)誤處理

MySQL使用一系列由連接句柄結(jié)構(gòu)報(bào)告的返回碼來(lái)獲取錯(cuò)誤信息,具體的函數(shù)原型如下

unsigned int mysql_errno(MYSQL *connection);
//返回錯(cuò)誤碼
char *mysql_error(MYSQL *connection);
//返回有意義的文本信息

這里是書(shū)上給出的一個(gè)例子以及運(yùn)行結(jié)果,可以看到屏幕上輸出了錯(cuò)誤信息

#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>int main(int argc, char *argv[]) {MYSQL my_connection;mysql_init(&my_connection);if (mysql_real_connect(&my_connection, "localhost", "rick", "I do not know", "foo", 0, NULL, 0)) {printf("Connection success
");mysql_close(&my_connection);} else {fprintf(stderr, "Connection failed
");if (mysql_errno(&my_connection)) {fprintf(stderr, "Connection error %d: %s
",mysql_errno(&my_connection), mysql_error(&my_connection));}}return EXIT_SUCCESS;
}

在這里插入圖片描述

使用SQL

這里直接給出一些C語(yǔ)言執(zhí)行SQL語(yǔ)句的函數(shù)原型和簡(jiǎn)單解釋

int mysql_query(MYSQL *connection, const char *query);
//第一個(gè)是初始化后的句柄,第二個(gè)是sql語(yǔ)句,返回錯(cuò)誤碼
my_ulonglong mysql_affected_rows(MYSQL *connection);
//查詢上一條指令運(yùn)行后影響了多少行

書(shū)上給出了一個(gè)使用AUTO_INCREMENT的代碼實(shí)例,下面是修改后的程序和運(yùn)行結(jié)果,AUTO_INCREMENT對(duì)每次插入的數(shù)據(jù)分配一個(gè)新的id值并進(jìn)行追蹤

#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>#define DB_HOST "localhost"
#define DB_USER "rick"  // 用戶名 'rick'
#define DB_PASS "111111" // 數(shù)據(jù)庫(kù)密碼
#define DB_NAME "foo" // 數(shù)據(jù)庫(kù)名稱(chēng) 'foo'// 錯(cuò)誤處理函數(shù),減少冗余代碼
void handle_error(MYSQL *connection, const char *message) {fprintf(stderr, "%s
Error %d: %s
", message, mysql_errno(connection), mysql_error(connection));mysql_close(connection);exit(EXIT_FAILURE);
}int main(int argc, char *argv[]) {MYSQL my_connection;MYSQL_RES *res_ptr;MYSQL_ROW sqlrow;int res;// 初始化 MySQL 連接對(duì)象mysql_init(&my_connection);// 連接數(shù)據(jù)庫(kù)if (!mysql_real_connect(&my_connection, DB_HOST, DB_USER, DB_PASS, DB_NAME, 0, NULL, 0)) {handle_error(&my_connection, "Connection failed");}printf("Connection success
");// 插入數(shù)據(jù)到表中res = mysql_query(&my_connection, "INSERT INTO children(fname, age) VALUES('Robert', 7)");if (res) {handle_error(&my_connection, "Insert error");} else {printf("Inserted %lu rows
", (unsigned long)mysql_affected_rows(&my_connection));}// 查詢最后插入的數(shù)據(jù)res = mysql_query(&my_connection, "SELECT LAST_INSERT_ID()");if (res) {handle_error(&my_connection, "SELECT error");}// 獲取查詢結(jié)果res_ptr = mysql_use_result(&my_connection);if (res_ptr) {// 迭代結(jié)果集并輸出while ((sqlrow = mysql_fetch_row(res_ptr))) {printf("We inserted childno %s
", sqlrow[0]);}// 釋放結(jié)果集mysql_free_result(res_ptr);} else {fprintf(stderr, "Failed to retrieve result set.
");}// 關(guān)閉連接mysql_close(&my_connection);return EXIT_SUCCESS;
}

可以看到成功插入了一行,并且通過(guò)LAST_INSERT_ID拿到了ID

在這里插入圖片描述

這里附上書(shū)上數(shù)據(jù)對(duì)應(yīng)的插入代碼

-- Create the table childrenCREATE TABLE children (childno INT(11) AUTO_INCREMENT NOT NULL PRIMARY KEY,fname VARCHAR(30),age INT
);-- Populate the table 'children'INSERT INTO children (fname, age) VALUES ('Jenny', 21);
INSERT INTO children (fname, age) VALUES ('Andrew', 17);
INSERT INTO children (fname, age) VALUES ('Gavin', 8);
INSERT INTO children (fname, age) VALUES ('Duncan', 6);
INSERT INTO children (fname, age) VALUES ('Emma', 4);
INSERT INTO children (fname, age) VALUES ('Alex', 15);
INSERT INTO children (fname, age) VALUES ('Adrian', 9);
INSERT INTO children (fname, age) VALUES ('Ann', 3);
INSERT INTO children (fname, age) VALUES ('Ann', 4);
INSERT INTO children (fname, age) VALUES ('Ann', 3);
INSERT INTO children (fname, age) VALUES ('Ann', 4);

除了上述兩個(gè)基本的函數(shù)之外還有一些其他的函數(shù),函數(shù)原型如下

MYSQL_RES *mysql_store_result(MYSQL *connection);
//從返回?cái)?shù)據(jù)的語(yǔ)句中提取所有的數(shù)據(jù),返回一個(gè)指向結(jié)果集的指針
my_ulonglong mysql_num_rows(MYSQL_RES *result);
//統(tǒng)計(jì)返回結(jié)果中的行數(shù)
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
//從結(jié)果集中提取一行,把這一行放在行機(jī)構(gòu)里,每次使用一個(gè)
void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);
//在結(jié)果集中跳轉(zhuǎn),第二個(gè)參數(shù)是行號(hào),設(shè)置下一個(gè)被fetch操作返回的行
MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result);
//返回一個(gè)偏移值,表示結(jié)果集中的當(dāng)前位置(不是行號(hào))
void mysql_free_result(MYSQL_RES *result);
//對(duì)結(jié)果集的操作完成后,需要調(diào)用這個(gè)函數(shù)清理已經(jīng)分配的對(duì)象
MYSQL_RES *mysql_use_result(MYSQL *connection);
//提取一行數(shù)據(jù),返回指向?qū)ο蟮闹羔?#xff0c;不會(huì)緩存
//適合處理大數(shù)據(jù)量的查詢結(jié)果,因?yàn)樗试S逐行讀取而不會(huì)將所有行一次性加載到內(nèi)存中,這樣可以有效減少內(nèi)存的使用
unsigned int mysql_field_count(MYSQL *connection);
//獲取最近一次查詢的結(jié)果集中字段(列)的數(shù)量
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result);
//用于從查詢結(jié)果的字段列表中獲取每個(gè)字段的描述信息,類(lèi)似于字段的元數(shù)據(jù)。
//返回一個(gè)指向 MYSQL_FIELD 結(jié)構(gòu)體的指針,這個(gè)結(jié)構(gòu)體包含了字段的詳細(xì)信息(例如字段名、類(lèi)型等)。

下面是書(shū)上給出的一個(gè)綜合程序(用chatgpt優(yōu)化了),基本上用到了上面的所有函數(shù),還有運(yùn)行結(jié)果和具體的程序解釋

#include <stdlib.h>
#include <stdio.h>
#include <mysql.h>// MySQL 連接對(duì)象和結(jié)果集
MYSQL my_connection;
MYSQL_RES *res_ptr;
MYSQL_ROW sqlrow;// 函數(shù)聲明
void display_header();
void display_row();int main(int argc, char *argv[]) {int res;int first_row = 1;  // 用于確保我們只顯示一次表頭// 初始化 MySQL 連接對(duì)象mysql_init(&my_connection);// 嘗試連接到數(shù)據(jù)庫(kù)if (mysql_real_connect(&my_connection, "localhost", "rick", "111111", "foo", 0, NULL, 0)) {printf("Connection success
");// 執(zhí)行 SQL 查詢,選擇年齡大于 5 的記錄res = mysql_query(&my_connection, "SELECT childno, fname, age FROM children WHERE age > 5");if (res) {// 查詢執(zhí)行失敗,打印錯(cuò)誤信息fprintf(stderr, "SELECT error: %s
", mysql_error(&my_connection));} else {// 使用 mysql_store_result() 獲取結(jié)果集到內(nèi)存res_ptr = mysql_store_result(&my_connection);if (res_ptr) {// 獲取每行的數(shù)據(jù)并顯示while ((sqlrow = mysql_fetch_row(res_ptr))) {if (first_row) {// 首次顯示表頭display_header();first_row = 0;}// 顯示每行數(shù)據(jù)display_row();}// 釋放結(jié)果集資源mysql_free_result(res_ptr);} else {// 獲取結(jié)果集失敗,打印錯(cuò)誤信息fprintf(stderr, "Failed to retrieve result set: %s
", mysql_error(&my_connection));}}// 關(guān)閉數(shù)據(jù)庫(kù)連接mysql_close(&my_connection);} else {// 連接失敗,打印錯(cuò)誤信息fprintf(stderr, "Connection failed
");if (mysql_errno(&my_connection)) {fprintf(stderr, "Connection error %d: %s
",mysql_errno(&my_connection), mysql_error(&my_connection));}}return EXIT_SUCCESS;
}// 顯示表頭,列出字段名稱(chēng)及其相關(guān)屬性
void display_header() {MYSQL_FIELD *field_ptr;//獲得列名printf("Column details:
");while ((field_ptr = mysql_fetch_field(res_ptr)) != NULL) {// 顯示字段的名稱(chēng)printf("	 Name: %s
", field_ptr->name);printf("	 Type: ");// 判斷字段類(lèi)型并顯示if (IS_NUM(field_ptr->type)) {//數(shù)字printf("Numeric field
");} else {switch (field_ptr->type) {//字符串case FIELD_TYPE_VAR_STRING:printf("VARCHAR
");break;case FIELD_TYPE_LONG:printf("LONG
");break;default:printf("Type is %d, check in mysql_com.h
", field_ptr->type);}}// 顯示字段的最大長(zhǎng)度printf("	 Max width %ld
", field_ptr->length);// 檢查字段是否具有 AUTO_INCREMENT 屬性if (field_ptr->flags & AUTO_INCREMENT_FLAG) {printf("	 Auto increments
");}printf("
");}
}// 顯示查詢結(jié)果的每一行
void display_row() {unsigned int field_count;// 遍歷每一列,打印其值field_count = 0;while (field_count < mysql_num_fields(res_ptr)) {//如果域名數(shù)量比當(dāng)前索引大if (sqlrow[field_count]) {//sqlrow存了這一行的數(shù)據(jù)printf("%s ", sqlrow[field_count]);} else {printf("NULL ");}field_count++;}printf("
");
}

在這里插入圖片描述

還有更多的函數(shù),在此不再贅述,可以查看MYSQL手冊(cè)相關(guān)

總結(jié)

可以看到C語(yǔ)言已經(jīng)有了很成熟的與MySQL交互的接口,并且大部分函數(shù)的使用是和MySQL版本不相關(guān)的,但實(shí)際在Ubuntu運(yùn)行的時(shí)候還是需要注意MySQL的版本和包的問(wèn)題,因?yàn)樾掳姹镜腗ySQL庫(kù)修改了一些配置文件的位置和相關(guān)的依賴(lài)包

參考文獻(xiàn)

  1. ubuntu 23.10.1 mysql 安裝
  2. ChatGPT
http://aloenet.com.cn/news/36985.html

相關(guān)文章:

  • html5網(wǎng)站開(kāi)發(fā)的源碼網(wǎng)絡(luò)顧問(wèn)
  • 西藏建設(shè)廳網(wǎng)站首頁(yè)seo科技網(wǎng)
  • 做視頻網(wǎng)站虛擬主機(jī)怎么選廣告聯(lián)盟接廣告
  • wordpress 采集圖片seo排名點(diǎn)擊首頁(yè)
  • 怎么用服務(wù)器搭建網(wǎng)站推廣之家app下載
  • 公司名稱(chēng)注冊(cè)查詢系統(tǒng)seo營(yíng)銷(xiāo)工具
  • wordpress漂亮的主題網(wǎng)站seo優(yōu)化有哪些方面
  • 商丘做網(wǎng)站sqlongliqi市場(chǎng)營(yíng)銷(xiāo)四大基本策略
  • linux如何架設(shè)網(wǎng)站貴陽(yáng)網(wǎng)絡(luò)推廣排名
  • 微信小程序視頻網(wǎng)站開(kāi)發(fā)教程靜態(tài)網(wǎng)頁(yè)制作
  • 網(wǎng)站建設(shè)圖片怎么做免費(fèi)b站網(wǎng)頁(yè)推廣
  • 網(wǎng)站做數(shù)據(jù)分析的意義北京百度推廣投訴電話
  • 做網(wǎng)站營(yíng)業(yè)執(zhí)照經(jīng)營(yíng)范圍怎么填寫(xiě)免費(fèi)seo排名軟件
  • 做公司網(wǎng)站用什么系統(tǒng)上海疫情最新數(shù)據(jù)
  • 淮安市哪里可以做網(wǎng)站開(kāi)魯視頻
  • wordpress頁(yè)面教程視頻小紅書(shū)搜索優(yōu)化
  • 商標(biāo) 做網(wǎng)站 是幾類(lèi)站長(zhǎng)工具天美傳媒
  • 雅安交通建設(shè)集團(tuán)網(wǎng)站太原網(wǎng)絡(luò)推廣公司哪家好
  • 鄭州網(wǎng)站建設(shè)網(wǎng)站制作百度官網(wǎng)推廣平臺(tái)電話
  • 輕云服務(wù)器 多個(gè)網(wǎng)站今日頭條鄭州頭條新聞
  • 泉州網(wǎng)站制作專(zhuān)業(yè)產(chǎn)品怎么做市場(chǎng)推廣
  • 網(wǎng)站建設(shè)的常用詞搜收錄網(wǎng)
  • 動(dòng)態(tài)購(gòu)物網(wǎng)站開(kāi)發(fā)源代碼西地那非能提高硬度嗎
  • 做網(wǎng)站能拿多少錢(qián)淘寶指數(shù)查詢工具
  • 電信服務(wù)器做網(wǎng)站網(wǎng)絡(luò)整合營(yíng)銷(xiāo)理論案例
  • 織夢(mèng)響應(yīng)式茶葉網(wǎng)站流感用什么藥最好
  • 網(wǎng)站access數(shù)據(jù)怎么做朝陽(yáng)seo推廣
  • 專(zhuān)業(yè)鄭州做網(wǎng)站的公司百度關(guān)鍵詞seo優(yōu)化
  • 網(wǎng)站域名授權(quán)怎么做什么叫seo
  • 佛山網(wǎng)站建設(shè)收費(fèi)標(biāo)準(zhǔn)seo索引擎優(yōu)化