目前分類:SQL筆記 (22)

瀏覽方式: 標題列表 簡短摘要

作為一名開發人員,當你在使用mysql來做為你的存儲數據庫,肯定都會考慮用最合適的欄位類型來創建數據庫表吧。

可是假如你其中一個語句這麼寫 ip Varchar(15) not null default '' COMMENT '用戶IP位址',

你有沒考慮過,其實,有更省空間的方式來存儲用戶的IP位址。(這個雖然是變長的,但對於大部分中國IP來說,基本都在10字節以上吧)。

 


其實,mysql是有專門的欄位和函數來存取用戶的IP位址的,那就是 int unsigned.你沒有看錯,就是無符合int型。

 


你可以在mysql中:

SELECT INET_ATON('192.168.23.4');

戮克 發表在 痞客邦 留言(0) 人氣()

mSQL 是個小巧的數據庫系統,可以到 http://www.hughes.com.au取得更多有關 mSQL 數據庫的詳情。


msql: 送出 query 字符串。 
msql_affected_rows: 得到 mSQL 最後操作影響的列數目。 
msql_close: 關閉 mSQL 數據庫連接。 
msql_connect: 打開 mSQL 數據庫連接。 
msql_create_db: 建立一個新的 mSQL 數據庫。 
msql_createdb: 建立一個新的 mSQL 數據庫。 
msql_data_seek: 移動內部返回指針。 
msql_dbname: 取得目前所在數據庫名稱。 
msql_drop_db: 刪除指定的 mSQL 數據庫。 

戮克 發表在 痞客邦 留言(0) 人氣()

工作中需要匯出一份求職使用者的個人資訊,這個資訊

 

需要三表聯查
要求出生日期格式:1990.01.02 資料庫是:1990-01-02
性別顯示:男 女 資料庫是int型:0 1 (分別對應男女)
解決辦法:

 

三表聯查
1
SELECT * FROM (表1 INNER JOIN 表2 ON 表1.欄位號=表2.欄位號)

戮克 發表在 痞客邦 留言(0) 人氣()

在開發中,資料庫來回換,而有些關鍵性的語法又各不相同,這是一件讓開發人員很頭痛的事情.本文總結了Update語句更新多表時在SQL Server,Oracle,MySQL三種資料庫中的用法.我也試了SQLite資料庫,都沒成功,不知是不支援多表更新還是咋的. 在本例中: 我們要用表gdqlpj中的gqdltks,bztks欄位資料去更新landleveldata中的同欄位名的資料,條件是當landleveldata 中的GEO_Code欄位值與gdqlpj中的lxqdm欄位值相等時進行更新.

 

SQL Server語法:UPDATE { table_name WITH ( < table_hint_limited > [ ...n ] ) | view_name | rowset_function_limited } SET { column_name = { expression | DEFAULT | Null } | @variable = expression | @variable = column = expression } [ ,...n ] { { [ FROM { < table_source > } [ ,...n ] ] [ WHERE < search_condition > ] } | [ WHERE CURRENT OF { { [ GLOBAL ] cursor_name } | cursor_variable_name } ] } [ OPTION ( < query_hint > [ ,...n ] ) ]

 

SQL Server示例: update a set a.gqdltks=b.gqdltks,a.bztks=b.bztks from landleveldata a,gdqlpj b where a.GEO_Code=b.lxqdm

 

Oracle語法: UPDATE updatedtable SET (col_name1[,col_name2...])= (SELECT col_name1,[,col_name2...]FROM srctable [WHERE where_definition])

 

Oracel 示例: update landleveldata a set (a.gqdltks, a.bztks)= (select b.gqdltks, b.bztks from gdqlpj b where a.GEO_Code=b.lxqdm)

 

戮克 發表在 痞客邦 留言(0) 人氣()

轉載自:http://taiwan.cnet.com/enterprise/technology/
0,2000062852,20050401-1,00.htm

資料庫也能隨身攜帶?

CNET企業專區:鍾翠玲報導  2002/08/15

 

 

 

資料庫也M化 

PDA從簡單的個人資訊管理(PIM)跨入企業使用,資料庫也躍上這種手持式設備,以行動資料庫的姿態展現在眾人眼前。 

所謂行動資料庫,也稱作微型資料庫(microdatabase),是專指置入PDA、智慧型手機(smart phone)的資料庫。過去PDA只用處理記事、行事曆和聯絡人資料時,它裏面的記憶體就足以負荷。不過PDA對企業卻具有更大好處,即在於它協助業務的行動化。 

因此,如果你整天離開位置只是為了倒水、上洗手間,PDA可能對你工作助益不大。但如果你是壽險業務員,需要隨時跑客戶,就可以把要保單等文件帶在身上,而一旦客戶簽約後,就且可以把資料傳送回公司資料中心。而事實上,壽險業正是國內最早開始引入PDA的行業。 

只要是具備人員活動範圍廣大(如房仲、貨運、廠區及倉庫)、機動性高(如維修工程、醫院)等行業,幾乎都已開始導入PDA。用途包括像醫院裏,醫師以PDA查詢或上傳病人病歷、工廠盤點庫存,或是送貨車隊用PDA獲知何處取得補貨、甚至交通警察開完罰單以PDA傳回監理所資料中心等等。 

戮克 發表在 痞客邦 留言(0) 人氣()

遠程鏈接服務器詳細配置
--建立連接服務器
EXEC sp_addlinkedserver  '遠程服務器IP','SQL Server'
--標註存儲
EXEC sp_addlinkedserver
@server = 'server', --鏈接服務器的本地名稱。也允許使用實例名稱,例如MYSERVER\SQL1
@srvproduct = 'product_name' --OLE DB數據源的產品名。對於SQL Server實例來說,product_name是'SQL Server'
, @provider = 'provider_name' --這是OLE DB訪問接口的唯一可編程標識。當沒有指定它時,訪問接口名稱是 SQL Server數據源。SQL Server顯式的provider_name是 SQLNCLI(Microsoft SQL Native Client OLE DB Provider)。Oracler的是 MSDAORA,Oracle 8或更高版本的是OraOLEDB.Oracle。MS Access和MS Excel的是 Microsoft.Jet.OLEDB.4.0。IBM DB2的是DB2OLEDB,以及ODBC數據源的是MSDASQL
, @datasrc = 'data_source' --這是特定OLE DB訪問接口解釋的數據源。對於SQL Server,這是 SQL Server(servername或servername\instancename)的網絡名稱。對於Oracle,這是SQL*Net別名。對於 MS Access和MSExcel,這是文件的完整路徑和名稱。對於ODBC數據源,這是系統DSN名稱
, @location = 'location' --由特定OLE DB訪問接口解釋的位置
, @provstr = 'provider_string' --OLE DB 訪問接口特定的連接字符串。對於ODBC連接,這是ODBC連接字符串。對於MS Excel,這是Excel 5.0
, @catalog = 'catalog' --catalog的定義變化基於OLE DB訪問接口的實現。對於SQL Server,這是可選的數據庫名稱,對於DB2,這個目錄是數據庫的名稱


--創建鏈接服務器上遠程登錄之間的映射
EXEC sp_addlinkedsrvlogin '遠程服務器IP','false','sa','架構名','訪問密碼'
--標註存儲
EXEC sp_addlinkedsrvlogin 
@rmtsrvname = '遠程服務器IP', --要添加登錄名映射的本地鏈接服務器
@useself = false, --當使用true值時,使用本地SQL或Windows登錄名連接到遠程服務器名。如果設為false,存儲過程 sp_addlinkedsrvlogin的locallogin、rmtuser和rmtpassword參數將應用到新的映射中
@locallogin = NULL, --這是映射到遠程登錄名的SQL Server登錄或Windows用戶的名稱。如果這個參數置為NULL,映射將應用SQL Server實例中的所有本地登錄名
@rmtuser = '架構名', --用來連接到鏈接服務器的用戶/登錄名的名稱
@rmtpassword = '訪問密碼' --用來連接到鏈接服務器的用戶/登錄名的密碼

--查詢數據
select top 10 * from [222].pwms.pwms.bas_tb_sku

--查看鏈接服務器信息
select name,product,provider,data_source,query_timeout,lazy_schema_validation,is_remote_login_enabled,is_rpc_out_enabled
from sys.servers
where is_linked=1

--配置鏈接服務器屬性
exec sp_serveroption '別名','name','遠程服務器IP'
--標註存儲
EXEC sp_serveroption 
@server = 'server' --配置屬性的鏈接服務器的名稱
,@optname = 'option_name' --要配置的選項
,@optvalue = 'option_value' --選項的新值
--附參數
參    數 描    述
collation compatible 如果你確認SQL Server實例與遠程SQL Server擁有相同的排序規則就啟用這個設置。由於SQL Server不再需要對數據源之間的字符列執行比較操作,把它們假定為相同的排序規則,這樣做可以提升性能
collation name 如果啟用了use remote collation並且是非SQL Server的數據源,則collation name指定遠程服務器排序規則的名稱。這個排序規則名稱必須是SQL Server所支持的
connect timeout 指定在超時發生之前到鏈接服務器的連接會嘗試多少秒。如果數值為「0」,sp_ configure的remote query timeout的服務器值用來當作默認值
data access 如果啟用,就允許分佈式查詢訪問
lazy schema validation 如果設為true,則架構不會在查詢開始時去檢測遠程表。儘管這樣會減少遠程查詢的負載,但是如果架構發生了變化並且你沒有進行架構檢測,比如說查詢中引用的對象不能與查詢命令進行通信,就會生成錯誤
query timeout 指定查詢等待的超時值(秒數)。如果這個值為0,則query wait選項使用sp_configure值
rpc 啟用從服務器進行遠程過程調用
rpc out 啟用遠程過程調用到服務器
use remote collation 指定是使用遠程服務器排序規則(true)還是本地服務器排序規則(false)

--刪除鏈接服務器屬性
exec sp_dropserver '4'
--標註存儲
EXEC sp_dropserver
@server = 'server' --從SQL Server實例中刪除的鏈接服務器的名稱
,@droplogins = 'droplogins' --如果指定droplogins,則在刪除鏈接服務器之前要刪除登錄名映射


--查看鏈接登錄名
select s.name linkedServerName,s.data_source linkedserver_source,s.is_linked,s.modify_date,
ll.remote_name,ll.local_principal_id,ll.uses_self_credential,
p.name localLoginName
from sys.Linked_logins ll
inner join sys.servers s on s.server_id=ll.server_id
left join sys.server_principals p on p.principal_id=ll.local_principal_id
where s.is_linked = 1

--刪除鏈接服務器登錄名映射
exec sp_droplinkedsrvlogin '遠程服務器IP',NULL
--標註存儲
EXEC sp_droplinkedsrvlogin 
@rmtsrvname = '遠程服務器IP' --登錄名映射的鏈接服務器名稱
@locallogin = NULL --這是從鏈接服務器刪除的SQL Server登錄或Windows用戶映射的名稱



SQL code
--簡單點為遠程機器設置遠程鏈接服務器。
--假設遠程機器IP為127.0.0.1
--建立連接服務器
EXEC sp_addlinkedserver  '127.0.0.1','SQL Server'

--創建鏈接服務器上遠程登錄之間的映射
EXEC sp_addlinkedsrvlogin '10.0.0.222','false','sa','架構名','密碼'

--查詢數據
select top 10 * from [127.0.0.1].數據庫名.架構名.表名

--查看鏈接服務器信息
select name,product,provider,data_source,query_timeout,lazy_schema_validation,is_remote_login_enabled,is_rpc_out_enabled
from sys.servers
where is_linked=1

--配置鏈接服務器屬性設置別名
exec sp_serveroption 'remotecmp','name','127.0.0.1'

--查詢數據
select top 10 * from remotecmp.數據庫名.架構名.表名

Reference: http://www.cnblogs.com/qiangqiang/archive/2010/05/14/1735366.html


戮克 發表在 痞客邦 留言(0) 人氣()

ASP获取Access所有数据表的sql语句

可能很多在使用Access的朋友都没有打开过Access的系统内置表,这篇文章可以帮助大家简单了解下系统内置表。
 程序代码
<%sqlcmd="select name from [msysobjects] where type=1 and flags=0"%>

用这条语句就可以取得Access数据库中所有表,但需要设置读取MSysObjects表的权限,否则会出现“不能读取记录;在 'MSysObjects'上没有读取数据权限”的错误提示。
office 2003设置:工具 -> 选项 -> 视图 -> 勾选隐藏对象、系统对象。工具 -> 安全 -> 用户与组的权限 ,在对象名称中选定 MSysObjects ,然后权限中设置其读取权限。
office 2007设置:单击左上角图标 -> Access选项 -> 当前数据库 -> 导航 -> 导航选项 -> 勾选显示隐藏对象,显示系统对象。数据库工具选项卡 -> 用户和权限 -> 用户与组权限,对象类型选择表,对象名称选定MSysObjects,然后勾选“读取数据”权限
还有一种方法可以实现读取Access数据库中所有表:

 程序代码
<%

戮克 發表在 痞客邦 留言(0) 人氣()

以下文章轉錄自:SQL server匯入 Access檔

USE test
GO
SELECT * INTO zone FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',   
'd:\test\test.mdb';'admin';'',filename) 

匯入Excel檔 

SELECT * INTO zone FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',   
'Excel 8.0;Database=D:\test\data.xls', [sheetname$])  

/*******  導出到excel
EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""' 

戮克 發表在 痞客邦 留言(0) 人氣()

1. MySQL 获得当前时间戳函数:current_timestamp, current_timestamp()
mysql> select current_timestamp, current_timestamp();

+---------------------+---------------------+
| current_timestamp | current_timestamp() |
+---------------------+---------------------+
| 2008-08-09 23:22:24 | 2008-08-09 23:22:24 |
+---------------------+---------------------+

戮克 發表在 痞客邦 留言(0) 人氣()

轉自http://www.cnblogs.com/hateislove214/archive/2010/11/05/1869889.html  1.導出整個數據庫 mysqldump -u

 

 

1.導出整個數據庫

 

mysqldump -u 用戶名 -p --default-character-set=latin1 數據庫名 > 導出的文件名(數據庫默認編碼是latin1)
mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql
2.導出一個表
mysqldump -u 用戶名 -p 數據庫名 表名> 導出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
3.導出一個數據庫結構
mysqldump -u wcnc -p -d –add-drop-table smgp_apps_wcnc >d:wcnc_db.sql
-d 沒有數據 –add-drop-table 在每個create語句之前增加一個drop table
4.導入數據庫
A:常用source 命令
進入mysql數據庫控制台,
如mysql -u root -p
mysql>use 數據庫
然後使用source命令,後面参數为腳本文件(如這裏用到的.sql)
mysql>source wcnc_db.sql

 

B:使用mysqldump命令

 

mysqldump -u username -p dbname < filename.sql

戮克 發表在 痞客邦 留言(0) 人氣()

前幾天業務線發現一例MySQL資料庫記憶體增長異常案例,現象如下:

資料庫版本:Percona MySQL 5.0.67
資料量:670M+
記憶體大小:16G
Innodb Buffer Pool Size:4G
其它回話記憶體分配並不大,基本在100M以內,並且連接數非常少
伺服器負載不高,開啟Binlog,資料庫和程式都已經進行過遷移,問題仍然存在。通過top命令查看MySQL佔用記憶體一直在增長,且開始使用Swap。

 

分析排除過程:
1.懷疑到的是InnoDB記憶體佔用,使用show engine innodb status查看,發現Free Buffer占很大部分,因此可以判斷分配給Innodb引擎的記憶體夠用

戮克 發表在 痞客邦 留言(0) 人氣()

mysql設置遠端連線許可權mysql -u root -p mysql # 第1個mysql是執行命令,第2個mysql是系統資料名稱在mysql主控台執行:

 

grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

 

# root是使用者名,%代表任意主機,'123456'指定的登錄密碼(這個和本地的root密碼可以設置不同的,互不影響)

 

flush privileges; # 重載系統許可權

 

exit;
允許3306埠

戮克 發表在 痞客邦 留言(0) 人氣()

/usr/local/mysql/bin/mysql -u root -p (進入mysql)

 

use mysql;
SELECT `Host`,`User` FROM user;
UPDATE user SET `Host` = '%' WHERE `User` = 'root' LIMIT 1;
flush privileges;
注意在mysql 命令列形式下一定要輸入";".



本文出自 「嘟嘟的成長日記」 博客

戮克 發表在 痞客邦 留言(0) 人氣()

起因:

前一段時間在為一組sql server 2008 failover cluster安裝sp3,之前是sq1.
windows server 2003 enterprise 64bit + sql server 2008 enterprise 64bit
failover cluster 是active/acitve 雙實例

 

問題:
在兩個節點都install sp3後,發現有一個sql server實例在切換時(其實也就是在restart sql server service),用SSMS連接時會顯示「伺服器處於腳本升級模式。此時只有管理員可以進行連接」,大概幾分鐘,之後就正常了,當時就並未重視。過了段時間,在例行維護切換時,問題重現,此時意識到之前安裝sp3的時候應該存在問題。最近發現該實例上一個發佈的庫,log檔增長到了近30GB,於是考慮收縮該Log檔。但在收縮時,發現儘管不停的備份log,仍然無法收縮Log檔。

 

檢查:

通過查看該庫的log_reuse_wait_desc,發現值為ACTIVE_TRANSACTION

文章標籤

戮克 發表在 痞客邦 留言(0) 人氣()

簡介

SQL SERVER2012實現了類似C#拋出異常的Throw語句。相比較于SQL Server2005之前使用@@ERROR,和SQL Server2005之後使用RAISERROR()引發異常都是一個不小的進步,下面來看一下Throw的用法。

 

RAISERROR和THROW比較
在SQL Server2005/2008中,使用RAISERROR和TRY...CATCH語句來拋出異常相比較根據@@ERROR進行判斷來講已經進步了很多。但是使用RAISERROR有一個非常不好的一點是無法返回真正出錯的行數。如圖1所示。

10143952F-0  

圖1.使用RAISERROR返回錯誤行數不正確

 

而如果我們需要具體的錯誤資訊,可能還需要這麼寫,如圖2所示。

10143aB2-1  

文章標籤

戮克 發表在 痞客邦 留言(0) 人氣()

1,環境:虛擬機器機2台,WIN2003 SP2 ,SQL2005 sp4 企業版,2台系統基本設置分別為:

A機:
電腦名稱: tg-sqlcopy-1
IP:192.168.1.167
SQL實例:SQL200501
B機:
電腦名稱: tg-sqlcopy-2
IP:192.168.1.168
SQL實例:SQL200502
2,環境配置(在A.B機中做同樣設置):
文章標籤

戮克 發表在 痞客邦 留言(0) 人氣()

NOSQL系統一般都會宣傳一個特性,那就是性能好,然後為什麼呢?關聯式資料庫發展了這麼多年,各種優化工作已經做得很深了,NOSQL系統一般都是吸收關聯式資料庫的技術,那麼,到底是什麼因素束縛了關聯式資料庫的性能呢?我們從系統設計的角度看這個問題。

1. 索引支援

 

關聯式資料庫創立之初沒有想到今天的互聯網應用對可擴充性提出如此高的要求,因此,設計時主要考慮的是簡化使用者的工作,SQL語言的產生促成資料庫介面的標準化,從而形成了Oracle這樣的資料庫公司並帶動了上下游產業鏈的發展。關聯式資料庫在單機儲存引擎支援索引,比如Mysql的 Innodb儲存引擎需要支援索引,而NOSQL系統的單機儲存引擎是純粹的,只需要支援基於主鍵的隨機讀取和範圍查詢。NOSQL系統在系統層面提供對索引的支援,比如有一個使用者表,主鍵為user_id,每個使用者有很多屬性,包括使用者名,照片ID(photo_id),照片URL,在NOSQL系統中如果需要對photo_id建立索引,可以維護一張分散式表,表的主鍵為形成的二元組。關聯式資料庫由於需要在單機儲存引擎層面支援索引,大大降低了系統的可擴充性,使得單機儲存引擎的設計變得很複雜。

 

2. 事務併發處理

 

關聯式資料庫有一整套的關於事務併發處理的理論,比如鎖的細微性是表級,頁級還是行級,多版本併發控制機制MVCC,事務的隔離等級,鎖死檢測,回滾,等等。然而,互聯網應用大多數的特點都是多讀少些,比如讀和寫的比例是10 : 1,並且很少有複雜事務需求,因此,一般可以採用更為簡單的copy-on-write技術:單線程寫,多執行緒讀,寫的時候執行copy-on- write,寫不影響讀服務。NOSQL系統這樣的假設簡化了系統的設計,減少了很多操作的overhead,提高了性能。

 

3. 動態還是靜態的資料結構

戮克 發表在 痞客邦 留言(0) 人氣()

Mysql中count(*),DISTINCT的使用方法和效率研究

发布时间:July 27, 2007 分类:MySQL

 

在处理一个大数据量数据库的时候
突然发现mysql对于count(*)的不同处理会造成不同的结果

比如执行
SELECT count(*) FROM tablename
即使对于千万级别的数据mysql也能非常迅速的返回结果
而对于
SELECT count(*) FROM tablename WHERE.....
mysql的查询时间开始攀升

戮克 發表在 痞客邦 留言(0) 人氣()

mysql中的unsigned是什麼意思(轉載)

 

unsigned 既為非負數,用此類型可以增加資料長度!

例如如果 Tinyint最大是127,那 Tinyint unsigned 最大 就可以到 127 * 2

 

unsigned 屬性只針對整型,而binary屬性只用于char 和Varchar。

 

类型

说明

tinyint

非常小的整数

戮克 發表在 痞客邦 留言(0) 人氣()




 1
2
3
4
5
6
7

戮克 發表在 痞客邦 留言(0) 人氣()

1 2