本文目錄一覽:
- 1、mysql如何創建多個實例,求步驟,謝謝,急求
- 2、有沒有利用python開發資料庫的案例
- 3、mysql創建多個實例,my.cnf配置文件需要幾個?
- 4、求c語言操作mysql資料庫實例
- 5、用c#做一個連接mysql的表
- 6、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