mysql開發實例(mysql 資料庫實例)

本文目錄一覽:

mysql如何創建多個實例,求步驟,謝謝,急求

大多情況下,需要可靠而有效地克隆 MySQL 實例數據。這包括 MySQL 高可用的解決方案,其中需要在將實例加入組複製集群之前配置實例,或者在經典複製模型中將其添加為 Slave。

為複製拓撲而創建 MySQL 副本一直很麻煩。涉及的步驟很多,首先要備份 MySQL 伺服器,通過網路將備份傳輸到我們想要添加到複製集的新 MySQL 節點,然後在該節點上恢復備份並手動啟動 MySQL 伺服器。為了高可用,最好還要將其正確設置備份的 GTID,並啟動並運行群集。涉及的手動步驟數量過多不利於高可用。CLONE 插件解決了這個問題並簡化了副本配置。使您可以使用 MySQL 客戶端(和 SQL 命令)來配置新節點並在發生時觀察克隆進度。無需手動處理多個步驟並維護自己的基礎架構來配置新的 MySQL 節點。

MySQL 8.0.17 引入了 CLONE SQL 語句,使當前的 MySQL 伺服器成為另一個運行在不同節點的 MySQL 伺服器的「克隆」。我們將執行 clone 語句的伺服器實例稱為「受體」。克隆的源伺服器實例稱為「供體」。供體克隆以一致的快照存儲在 InnoDB 存儲引擎中的所有數據和元數據,以替換受體中的數據。

成功執行 CLONE SQL 語句後,將自動重新啟動受體伺服器。重新啟動涉及恢復克隆的快照數據,就像用老方法複製數據一樣。恢復完成後,受體就是供體的克隆版,隨時可以使用!

這裡有一些關於克隆過程的重要注意事項。

不克隆 MySQL 配置參數,並且受體保留所有原始配置參數,如克隆之前。這樣做是因為許多配置可能特定於節點(例如 PORT),因此保留它們似乎是一個不錯的選擇。另一方面,一些存儲配置確實需要在供體和受體之間匹配(例如 innodbpagesize),如果這樣的配置參數不匹配,CLONE 將報告錯誤。

CLONE 插件不會克隆二進位日誌。

CLONE 插件目前僅支持 InnoDB 存儲引擎。在其他存儲引擎(如 MyISAM 和 CSV)中創建的表將被克隆為空表。克隆基礎架構的設計允許克隆 MySQL 支持的任何存儲引擎。但是,只有 InnoDB 序列化和反序列化方法已經實現並經過測試。

克隆會阻止供體中的所有並發 DDL。

需要注意的事實是受體放棄所有數據以及任何二進位日誌,以便成為供體實例的克隆。在執行 CLONE 之前,如果認為有必要,需要備份當前受體數據。

有沒有利用python開發資料庫的案例

在Windows平台上安裝mysql模塊用於Python開發

用python連接mysql的時候,需要用的安裝版本,源碼版本容易有錯誤提示。下邊是打包了32與64版本。 

MySQL-python-1.2.3.win32-py2.7.exe 

MySQL-python-1.2.3.win-amd64-py2.7.exe

實例 1、取得 MYSQL 的版本

# -*- coding: UTF-8 -*-

#安裝 MYSQL DB for python

import MySQLdb as mdb

con = None

try:

#連接 mysql 的方法: connect(‘ip’,’user’,’password’,’dbname’)

con = mdb.connect(‘localhost’, ‘root’,’root’, ‘test’);

#所有的查詢,都在連接 con 的一個模塊 cursor 上面運行的

cur = con.cursor()

#執行一個查詢

cur.execute(“SELECT VERSION()”)

#取得上個查詢的結果,是單個結果

data = cur.fetchone()

print “Database version : %s ” % data

finally:

if con:

#無論如何,連接記得關閉

con.close()

實例 2、創建一個表並且插入數據

import MySQLdb as mdb

import sys

#將 con 設定為全局連接

con = mdb.connect(‘localhost’, ‘root’, ‘root’, ‘test’);

with con:

#獲取連接的 cursor,只有獲取了 cursor,我們才能進行各種操作

cur = con.cursor()

#創建一個數據表 writers(id,name)

cur.execute(“CREATE TABLE IF NOT EXISTS \

Writers(Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(25))”)

#以下插入了 5 條數據

cur.execute(“INSERT INTO Writers(Name) VALUES(‘Jack London’)”)

cur.execute(“INSERT INTO Writers(Name) VALUES(‘Honore de Balzac’)”)

cur.execute(“INSERT INTO Writers(Name) VALUES(‘Lion Feuchtwanger’)”)

cur.execute(“INSERT INTO Writers(Name) VALUES(‘Emile Zola’)”)

cur.execute(“INSERT INTO Writers(Name) VALUES(‘Truman Capote’)”)

實例 3、 python 使用 slect 獲取 mysql 的數據並遍歷

import MySQLdb as mdb

import sys

#連接 mysql,獲取連接的對象

con = mdb.connect(‘localhost’, ‘root’, ‘root’, ‘test’);

with con:

#仍然是,第一步要獲取連接的 cursor 對象,用於執行查詢

cur = con.cursor()

#類似於其他語言的 query 函數, execute 是 python 中的執行查詢函數

cur.execute(“SELECT * FROM Writers”)

#使用 fetchall 函數,將結果集(多維元組)存入 rows 裡面

rows = cur.fetchall()

#依次遍歷結果集,發現每個元素,就是表中的一條記錄,用一個元組來顯示

for row in rows:

print row

運行結果:

(1L, 『Jack London’)

(2L, 『Honore de Balzac’)

(3L, 『Lion Feuchtwanger’)

(4L, 『Emile Zola’)

(5L, 『Truman Capote’)

上面的代碼,用來將所有的結果取出,不過列印的時候是每行一個元祖列印,現在我們使用方法,取出其中的單個數據:

import MySQLdb as mdb

import sys

#獲取 mysql 的鏈接對象

con = mdb.connect(‘localhost’, ‘root’, ‘root’, ‘test’);

with con:

#獲取執行查詢的對象

cur = con.cursor()

#執行那個查詢,這裡用的是 select 語句

cur.execute(“SELECT * FROM Writers”)

#使用 cur.rowcount 獲取結果集的條數

numrows = int(cur.rowcount)

#循環 numrows 次,每次取出一行數據

for i in range(numrows):

#每次取出一行,放到 row 中,這是一個元組(id,name)

row = cur.fetchone()

#直接輸出兩個元素

print row[0], row[1]

運行結果:

1 Jack London

2 Honore de Balzac

3 Lion Feuchtwanger

4 Emile Zola

5 Truman Capote

實例 4、使用字典 cursor 取得結果集(可以使用表欄位名字訪問值)

import MySQLdb as mdb

import sys

#獲得 mysql 查詢的鏈接對象

con = mdb.connect(‘localhost’, ‘root’, ‘root’, ‘test’)

with con:

#獲取連接上的字典 cursor,注意獲取的方法,

#每一個 cursor 其實都是 cursor 的子類

cur = con.cursor(mdb.cursors.DictCursor)

#執行語句不變

cur.execute(“SELECT * FROM Writers”)

#獲取數據方法不變

rows = cur.fetchall()

#遍曆數據也不變(比上一個更直接一點)

for row in rows:

#這裡,可以使用鍵值對的方法,由鍵名字來獲取數據

print “%s %s” % (row[“Id”], row[“Name”])

實例 5、獲取單個表的欄位名和信息的方法

import MySQLdb as mdb

import sys

#獲取資料庫的鏈接對象

con = mdb.connect(‘localhost’, ‘root’, ‘root’, ‘test’)

with con:

#獲取普通的查詢 cursor

cur = con.cursor()

cur.execute(“SELECT * FROM Writers”)

rows = cur.fetchall()

#獲取連接對象的描述信息

desc = cur.description

print ‘cur.description:’,desc

#列印表頭,就是欄位名字

print “%s %3s” % (desc[0][0], desc[1][0])

for row in rows:

#列印結果

print “%2s %3s” % row

運行結果:

cur.description: ((『Id’, 3, 1, 11, 11, 0, 0), (『Name’, 253, 17, 25, 25, 0, 1))

Id Name

1 Jack London

2 Honore de Balzac

3 Lion Feuchtwanger

4 Emile Zola

5 Truman Capote

實例 6、使用 Prepared statements 執行查詢(更安全方便)

import MySQLdb as mdb

import sys

con = mdb.connect(‘localhost’, ‘root’, ‘root’, ‘test’)

with con:

cur = con.cursor()

#我們看到,這裡可以通過寫一個可以組裝的 sql 語句來進行

cur.execute(“UPDATE Writers SET Name = %s WHERE Id = %s”,

(“Guy de Maupasant”, “4”))

#使用 cur.rowcount 獲取影響了多少行

print “Number of rows updated: %d” % cur.rowcount

結果:

Number of rows updated: 1

實例 7、把圖片用二進位存入 MYSQL

有人喜歡把圖片存入 MYSQL(這種做法貌似很少吧),我看大部分的程序,圖片都是存放在伺服器上的文件,資料庫中存的只是圖片的地址而已,不過 MYSQL 是支持把圖片存入資料庫的,也相應的有一個專門的欄位 BLOB (Binary Large Object),即較大的二進位對象欄位,請看如下程序,注意測試圖片自己隨便找一個,地址要正確: 

首先,在資料庫中創建一個表,用於存放圖片:

複製代碼代碼如下:

CREATE TABLE Images(Id INT PRIMARY KEY AUTO_INCREMENT, Data MEDIUMBLOB);

然後運行如下 PYTHON 代碼進行:

import MySQLdb as mdb

import sys

try:

#用讀文件模式打開圖片

fin = open(“../web.jpg”)

#將文本讀入 img 對象中

img = fin.read()

#關閉文件

fin.close()

except IOError, e:

#如果出錯,列印錯誤信息

print “Error %d: %s” % (e.args[0],e.args[1])

sys.exit(1)

try:

#鏈接 mysql,獲取對象

conn = mdb.connect(host=’localhost’,user=’root’,passwd=’root’,

db=’test’)

#獲取執行 cursor

cursor = conn.cursor()

#直接將數據作為字元串,插入資料庫

cursor.execute(“INSERT INTO Images SET Data=’%s'” %

mdb.escape_string(img))

#提交數據

conn.commit()

#提交之後,再關閉 cursor 和鏈接

cursor.close()

conn.close()

except mdb.Error, e:

#若出現異常,列印信息

print “Error %d: %s” % (e.args[0],e.args[1])

sys.exit(1)

實例 8、從資料庫中把圖片讀出來

import MySQLdb as mdb

import sys

try:

#連接 mysql,獲取連接的對象

conn = mdb.connect(‘localhost’, ‘root’, ‘root’, ‘test’);

cursor = conn.cursor()

#執行查詢該圖片欄位的 SQL

cursor.execute(“SELECT Data FROM Images LIMIT 1”)

#使用二進位寫文件的方法,打開一個圖片文件,若不存在則自動創建

fout = open(‘image.png’,’wb’)

#直接將數據如文件

fout.write(cursor.fetchone()[0])

#關閉寫入的文件

fout.close()

#釋放查詢數據的資源

cursor.close()

conn.close()

except IOError, e:

#捕獲 IO 的異常 ,主要是文件寫入會發生錯誤

print “Error %d: %s” % (e.args[0],e.args[1])

sys.exit(1)

實例 9、使用 Transaction 即事務(手動提交,自動回滾)

import MySQLdb as mdb

import sys

try:

#連接 mysql,獲取連接的對象

conn = mdb.connect(‘localhost’, ‘root’, ‘root’, ‘test’);

cursor = conn.cursor()

#如果某個資料庫支持事務,會自動開啟

#這裡用的是 MYSQL,所以會自動開啟事務(若是 MYISM 引擎則不會)

cursor.execute(“UPDATE Writers SET Name = %s WHERE Id = %s”,

(“Leo Tolstoy”, “1”))

cursor.execute(“UPDATE Writers SET Name = %s WHERE Id = %s”,

(“Boris Pasternak”, “2”))

cursor.execute(“UPDATE Writer SET Name = %s WHERE Id = %s”,

(“Leonid Leonov”, “3”))

#事務的特性 1、原子性的手動提交

conn.commit()

cursor.close()

conn.close()

except mdb.Error, e:

#如果出現了錯誤,那麼可以回滾,就是上面的三條語句要麼執行,要麼都不執行

conn.rollback()

print “Error %d: %s” % (e.args[0],e.args[1])

結果: 

1、因為不存在 writer 表( SQL 第三條語句),所以出現錯誤:Error 1146: Table 『test.writer’ doesn’t exist 

2、出現錯誤,出發異常處理, 3 條語句的前兩條會自動變成了沒有執行,結果不變 

3、如果本代碼放到一個 MyISAM 引擎表,前兩句會執行,第三句不會;如果是 INNDB 引擎,則都不會執行。

mysql創建多個實例,my.cnf配置文件需要幾個?

配置文件還是一個,只不過mysql的資料庫存放目錄需要多個,這根據你的實例來配置資料庫存放目錄。

給個多實例配置案例:

初始化資料庫

[mysql@localhost ~]$ mkdir /mydata/mysql_db/data_1001 #創建資料庫存放目錄

[mysql@localhost ~]$ mkdir /mydata/mysql_db/data_1002

[mysql@localhost ~]$ mkdir /mydata/mysql_db/data_1003

[mysql@localhost mysql_db]$ ./bin/mysql_install_db –basedir=/mydata/mysql_db –datadir=/mydata/mysql_db/data_1001 –user=mysql #資料庫初始化

Installing MySQL system tables…

OK

Filling help tables…

OK

To start mysqld at boot time you have to copy

support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !

To do so, start the server, then issue the following commands:

/mydata/mysql_db/bin/mysqladmin -u root password 『new-password』

/mydata/mysql_db/bin/mysqladmin -u root -h localhost password 『new-password』

Alternatively you can run:

/mydata/mysql_db/bin/mysql_secure_installation

which will also give you the option of removing the test

databases and anonymous user created by default. This is

strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:

cd /mydata/mysql_db ; /mydata/mysql_db/bin/mysqld_safe

You can test the MySQL daemon with mysql-test-run.pl

cd /mydata/mysql_db/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /mydata/mysql_db/scripts/mysqlbug script!

[mysql@localhost mysql_db]$ ./bin/mysql_install_db –basedir=/mydata/mysql_db –datadir=/mydata/mysql_db/data_1002 –user=mysql

[mysql@localhost mysql_db]$ ./bin/mysql_install_db –basedir=/mydata/mysql_db –datadir=/mydata/mysql_db/data_1003 –user=mysql

配置mysql_multi

[mysql@localhost mysql_db]$ cd /home/mysql/

[mysql@localhost ~]$ vi my.cnf

[mysqld_multi] #添加內容如下

mysqld = /mydata/mysql_db/bin/mysqld_safe

mysqladmin = /mydata/mysql_db/bin/mysqladmin

user = mysql

[mysqld1001]

port = 3306

socket = /tmp/mysql3306.sock

pid-file = /tmp/mysql3306.pid

basedir = /mydata/mysql_db

datadir = /mydata/mysql_db/data_1001

skip-locking

key_buffer_size = 16K

max_allowed_packet = 1M

table_open_cache = 4

sort_buffer_size = 64K

read_buffer_size = 256K

read_rnd_buffer_size = 256K

net_buffer_length = 2K

thread_stack = 128K

server-id = 1

[mysqld1002]

port = 3307

socket = /tmp/mysql3307.sock

basedir = /mydata/mysql_db

datadir = /mydata/mysql_db/data_1002

pid-file = /tmp/mysql3307.pid

skip-locking

key_buffer_size = 16K

max_allowed_packet = 1M

table_open_cache = 4

sort_buffer_size = 64K

read_buffer_size = 256K

read_rnd_buffer_size = 256K

net_buffer_length = 2K

thread_stack = 128K

server-id = 1

[mysqld1003]

port = 3308

socket = /tmp/mysql3308.sock

basedir = /mydata/mysql_db

datadir = /mydata/mysql_db/data_1003

pid-file = /tmp/mysql3308.pid

skip-locking

key_buffer_size = 16K

max_allowed_packet = 1M

table_open_cache = 4

sort_buffer_size = 64K

read_buffer_size = 256K

read_rnd_buffer_size = 256K

net_buffer_length = 2K

thread_stack = 128K

server-id = 1

[client]

#password = your_password

port = 3306

socket = /tmp/mysql.sock

多實例啟動

[mysql@localhost mysql_db]$ mysqld_multi –defaults-file=/home/mysql/my.cnf –user=mysql start 1001-1003 #啟動mysql實例

求c語言操作mysql資料庫實例

不知你用的是什麼代碼,不過據我實驗,以下代碼是可用的 【來自 】

#include stdlib.h  

#include stdio.h  

#include “mysql.h”  

  

int main (int argc, char *argv[])  

{  

        MYSQL *conn_ptr;  

        conn_ptr=mysql_init(NULL); //連接初始化  

        if(!conn_ptr){  

                fprintf(stderr, “mysql_init failed\n”);  

                return EXIT_FAILURE;  

        }  

  

        conn_ptr = mysql_real_connect(conn_ptr, “localhost”, “moldao”,”newpassword”,”moldao_test”, 0, NULL, 0); //建立實際連接  

        //參數分別為:初始化的連接句柄指針,主機名(或者IP),用戶名,密碼,資料庫名,0,NULL,0)後面三個參數在默認安裝mysql的情況下不用改  

        if(conn_ptr){  

                printf(“Connection success\n”);  

                }  

        else {  

                printf(“Connection failed\n”);  

        }  

  

        mysql_close(conn_ptr); //關閉連接  

        return EXIT_SUCCESS;  

}

連接mysql資料庫需要以下步驟:

安裝mysql開發包, linux下是mysql安裝的時候全選就行了, linux 下直接安裝mysql-devel

新建工程,占貼代碼,注意修改實際的用戶名、密碼 …

設置包含目錄, 在windows下, 找到你的mysql安裝位置,找到include文件夾, 設置ide增加該文件夾到包含目錄 【可能是 C:\Program Files\MySQL\MySQL Server 5.0\include】

設置連接目錄, 同設置包含目錄一樣 找到mysql的lib目錄,設置ide 【可能是 C:\Program Files\MySQL\MySQL Server 5.0\lib\opt 】

設置連接選項, 需要設置ide連接選項,增加 -lmysql

編譯連接運行

用c#做一個連接mysql的表

(1)首先需要下載C#訪問MySQL資料庫的ADO.NET驅動程序

下載地址為:

我下載的版本為: mysql-connector-net-6.3.8.msi

下載地址如下url:

(2)安裝mysql-connector-net

然後直接在Windows操作系統安裝 mysql-connector-net-6.3.8.msi

默認是安裝在C盤:

C:\Program Files\MySQL\MySQL Connector Net 6.3.8\Assemblies

v2.0

v4.0

安裝完後我選擇的是v2.0版本的

然後在應用工程中引用組件MySQL.Data.dll

(3)封裝資料庫訪問組件DbConnectionMySQL

/// summary

/// MySQL資料庫

/// 版本 mysql-connector-net-6.3.8.msi

/// vp:hsg

/// create date:2012-02-28

/// /summary

[Serializable]

public class DbConnectionMySQL : DbConnectionWrapper

{

public DbConnectionMySQL(string pConnectionString)

: base(pConnectionString)

{

this.m_dbconn = new MySqlConnection(pConnectionString);

this.m_DbConnState = DbConnState.Free;

}

//–

public override DbDataAdapter GetDbDataAdapter()

{

return new MySqlDataAdapter();

}

public override DbDataAdapter GetDbDataAdapter(DbCommand dbCommand)

{

return new MySqlDataAdapter(dbCommand as MySqlCommand);

}

public override DbCommand GetDbCommand()

{

return new MySqlCommand();

}

public override DbConnection GetDbConnection()

{

return new MySqlConnection();

}

public override DbCommandBuilder GetDbCommandBuilder()

{

return new MySqlCommandBuilder();

}

public override DataProviderType GetCurrentDataProviderType()

{

return DataProviderType.Sql;

}

public override bool IsExistsTable(string TableName, string UserName)

{

#region information

bool rbc = false; //TABLES表中去查詢 table_name

string dSql = “select * from TABLES where table_name='” + TableName + “‘”;

DataSet ds = this.ExecuteDataSet(dSql);

if (ds != null)

{

if (ds.Tables[0].Rows.Count 0)

{

rbc = true;

}

else

{

rbc = false;

}

}

else

{

rbc = false;

}

return rbc;

#endregion

}

public override bool IsExistsField(string FieldName, string TableName)

{

#region information

bool rbc = false;

string dSql = “”;

dSql = “select * from ” + TableName + ” where 11″;

DataSet ds = this.ExecuteDataSet(dSql);

if (ds != null)

{

DataTable dt = ds.Tables[0];

for (int j = 0; j dt.Columns.Count; j++)

{

if (dt.Columns[j].ColumnName.ToString().ToUpper() == FieldName.ToString().ToUpper())

{

rbc = true;

goto Return_End;

}

}

dt.Dispose();

dt = null;

}

ds.Dispose();

ds = null;

Return_End:

return rbc;

#endregion

}

public override char ParameterChar

{

get

{

return ‘:’; //SQLite的參數符號為:

}

}

public override DbParameter CreateParameter(string name, object value)

{

return new MySqlParameter(name, value);

}

public override DbParameter CreateParameter(string name)

{

DbParameter dbp = new MySqlParameter();

dbp.ParameterName = name;

return dbp;

}

public override DbParameter CreateParameter(string name, DbType dbtype, object value)

{

DbParameter dbp = new MySqlParameter();

dbp.ParameterName = name;

dbp.Value = value;

dbp.DbType = dbtype;

return dbp;

}

public override DbParameter CreateParameter(string name, DbType dbtype, int size, object value)

{

DbParameter dbp = new MySqlParameter();

dbp.ParameterName = name;

dbp.Value = value;

dbp.DbType = dbtype;

dbp.Size = size;

return dbp;

}

}

(4)客戶端訪問測試開發實例

public void TestCShape_MySQL()

{

string constr = “server=localhost;User Id=root;password=root;Database=xp_users”;

DbConnectionWrapper dbw = new DbConnectionMySQL(constr);

bool rbc=dbw.TestConnection();

this.Context.Response.Write(rbc);

string x = “”;

//刪除語句

x = “delete from xp_users”;

if (dbw.ExecuteQuery(x) 0)

{

this.Context.Response.Write(“刪除語句成功!下面是SQL語句br” + x);

}

//插入語句

x = “insert into xp_users(gid,uid,uname,sex,email,pwd) values(‘”;

x += “1′,’hsg77′,’何XXX’,1,’hsg77@163.com’,’1′)”;

if (dbw.ExecuteQuery(x) 0)

{

this.Context.Response.Write(“插入語句成功!下面是SQL語句br”+x);

}

//查詢語句

DataTable dt = dbw.ExecuteDataTable(“select * from xp_users”);

if (dt != null dt.Rows.Count 0)

{

this.Context.Response.Write(“br用戶數:”+dt.Rows.Count);

}

if (dt != null)

{

dt.Dispose();

dt = null;

}

dbw.Dispose();

dbw = null;

}

mysql中的一些稍微複雜用法實例代碼

前言

mysql的語法相信對大家來說都不是難事,但是本文主要給分享了一些mysql複雜用法的相關內容,通過這篇文章相信大家會對mysql更深的了解一些,下面話不多說了,來一起看看詳細的介紹吧

一對多數據顯示成一行

GROUP_CONCAT(expr)

1、涉及的表關係:teacher表、teacher_subject_rel表(教師所能教的學科表)、subject表

2、業務場景:

需要拉取所有教師的編號(teacher_no)、學科名(subject_name)。

nbsp

教師表(teacher)和學科(teacher_subject_rel)是一對多關係,

往往查詢出現的是同一教師多條

數據。我們希望得到每個教師一條數據

學科拼接成一條

1、基本語法

group_concat(

[DISTINCT]

要連接的欄位

[Order

BY

排序欄位

ASC/DESC]

[Separator

‘分隔符’]

)

2、例子

SELECT

t.teacher_id

as

‘教師id’,

t.teacher_no

‘教師編號’,

(

SELECT

GROUP_CONCAT(s.subject_name)

FROM

teacher_subject_rel

tsr

LEFT

JOIN

`subject`

s

ON

tsr.subject_id

=

s.subject_id

WHERE

t.teacher_id

=

tsr.teacher_id

)

AS

‘學科’

FROM

teacher

t

子查詢、查詢臨時表、EXISTS

例子

SELECT

*

FROM

(

SELECT

o.id,

o.student_intention_id,

s.

NAME,

s.area_id,

a.area_name,

s.exam_year,

o.

STATUS,

CASE

o.

STATUS

WHEN

‘1’

THEN

‘待提交’

WHEN

‘2’

THEN

‘待指派’

WHEN

‘3’

THEN

‘已完成’

WHEN

‘4’

THEN

‘處理中’

END

statusName,

CASE

o.emergency_degree

WHEN

‘1’

THEN

‘正常’

WHEN

‘2’

THEN

‘緊急’

WHEN

‘3’

THEN

‘非常緊急’

END

emergencyDegreeName,

o.emergency_degree,

o.update_time,

(

SELECT

first_lesson_time

FROM

jx_strategy

WHERE

jx_lesson_plan_order_id

=

o.id

AND

STATUS

IN

(2,

7)

AND

first_lesson_time

now()

ORDER

BY

first_lesson_time

ASC

LIMIT

1

)

AS

first_time,

(

SELECT

deal_user_id

FROM

jx_strategy

WHERE

jx_lesson_plan_order_id

=

o.id

AND

STATUS

7

AND

deal_user_id

ORDER

BY

id

DESC

LIMIT

1

)

AS

deal_user_id

FROM

jx_lesson_plan_order

o

LEFT

JOIN

student

s

ON

s.student_intention_id

=

o.student_intention_id

LEFT

JOIN

area

a

ON

s.area_id

=

a.id

WHERE

o.

STATUS

1

AND

s.phone

=

‘18501665888’

AND

o.emergency_degree

=

1

AND

o.

STATUS

=

2

AND

s.exam_year

=

‘2015’

AND

o.update_time

=

‘2018-08-14

20:28:55′

AND

o.update_time

=

‘2018-08-14

20:28:55′

)

AS

a

WHERE

1

=

1

AND

a.deal_user_id

=

145316

AND

a.first_time

=

‘2018-08-17

00:00:00′

AND

a.first_time

=

‘2018-08-30

00:00:00′

AND

EXISTS

(

SELECT

*

FROM

jx_strategy

js

WHERE

js.jx_lesson_plan_order_id

=

a.id

AND

js.

STATUS

IN

(2,

7)

AND

js.subject_id

IN

(2,

3)

)

ORDER

BY

a.update_time

DESC

LIMIT

0,

10

update

關聯變數條件修改

1、涉及的表關係:

user_info表中的

id_number(身份證號)

teacher表中的birth欄位、

關聯關係usrer_id

=

teacher_id

2、業務場景:獲取用戶身份證上的出生日期將出生日期更新在birth欄位

UPDATE

teacher

t

INNER

JOIN

(

SELECT

t.teacher_id,

t.birth,

u.id_number,

CONCAT(SUBSTRING(u.id_number,

7,

4),

‘-‘,

SUBSTRING(u.id_number,

11,

2),

‘-‘,

SUBSTRING(u.id_number,

13,

2))

as

birth1,

u.reg_date,

t.exit_time

from

teacher

t

INNER

JOIN

user_info

u

ON

u.user_id

=

t.teacher_id

)

info

on

info.teacher_id

=

t.teacher_id

SET

t.birth

=

info.birth1

WHERE

info.reg_date

‘2018-08-20

00:00:00′

and

info.id_number

is

not

NULL

and

(info.birth

is

NULL

or

t.birth

=

”)

and

t.is_train

=

1

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:MySQL在關聯複雜情況下所能做出的一些優化Mysql一些複雜的sql語句(查詢與刪除重複的行)深入mysql

“ON

DUPLICATE

KEY

UPDATE”

語法的分析MySQL

最基本的SQL語法/語句MySQL與Oracle的語法區別詳細對比淺析Mysql

Join語法以及性能優化MySQL

ALTER語法的運用方法MySQL

prepare語句的SQL語法MySQL進階SELECT語法篇MySQL

SQL

語法參考

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

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

相關推薦

  • 如何修改mysql的埠號

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

    編程 2025-04-29
  • Python 常用資料庫有哪些?

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

    編程 2025-04-29
  • Python生成隨機數的應用和實例

    本文將向您介紹如何使用Python生成50個60到100之間的隨機數,並將列舉使用隨機數的幾個實際應用場景。 一、生成隨機數的代碼示例 import random # 生成50個6…

    編程 2025-04-29
  • openeuler安裝資料庫方案

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

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

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

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

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

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

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

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的資料庫存儲引擎

    本文將介紹兩款高性能的資料庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • Python怎麼導入資料庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的資料庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28

發表回復

登錄後才能評論