注意insert into select 沒有valus ,沒有括號
mysql
insert into zforce.shop_all (shop_name,address,city_id,market_circle_id,cat_id) select shop_name,shop_address,city_id,market_circle_id,business_scope from backend.franchise_tore_info where create_time >='2014-09-25 18:33:13'
SELECT INTO 的用法是 select val1,valu2 into tab2 from tab1。要求tab2不存在,插入時會自動建立tab2。sql
在mysql中不支持這種用法數據庫
能夠使用 create table temp select * from dept;mybatis
若是隻是須要表結構 create table temp select * from dept where 1=2;spa
若是須要建立臨時表,能夠加關鍵字 TEMPORARY 。在某些狀況下使用臨時表,能夠加快查詢效率,好比某個查詢的一個子查詢會執行屢次。能夠使用臨時表。code
create TEMPORARY table temp select * from dept;ci
這樣數據庫在該鏈接關閉的時候,自動刪除該表。這意味着兩個不一樣的鏈接能夠使用相同的臨時表名稱,同時兩個臨時表不會互相沖突,也不與原有的同名的非臨時表衝突。it
建立這種臨時表,必須擁有CREATE TEMPORARY TABLES權限.table
須要注意的是這種臨時表不能應用到子查詢class
使用以下方式,能夠對插入進行判斷
insert into zforce.shop_all(city_id,shop_name,address,gmt_create,deleted) select 3,'xxx','xxx',now(),0 from dual where not EXISTS (SELECT 1 FROM zforce.shop_all zs where city_id = 3 and zs.shop_name = 'xxx' and zs.address = 'xxx')
更新表時,若是須要根據條件判斷須要更新的值,能夠用case when。由於mybatis中的關鍵字衝突,須要<![CDATA[ ]]>
<![CDATA[ update zforce.contract zc set zc.contract_status = (case when now()<contract_start_time then 1 when now()>=contract_start_time and now()<= DATE_SUB(contract_start_time, INTERVAL 14 DAY) then 2 when now()>DATE_SUB(contract_start_time, INTERVAL 14 DAY) and now()<contract_end_time then 3 when now()>contract_start_time then 4 end) ]]>