mysql的小功能,表複製、插入判斷、修改判斷

注意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)
		]]>
相關文章
相關標籤/搜索