學Java、Android、oracle、ios、h5不想花家裡錢,可以上<甲骨文(北京)工程實訓基地>,O基礎,O學費,四個月輕松進名企
㈡ 網站抽獎怎麼弄
視頻講解沒有,我可以給你說說大體的設計思路,希望對你有幫助。抽獎其實就是做一個隨機函數。random不知道你用過沒有。設好種子值,好比是1-7,就是共7個獎項,隨機獲取的是幾,就在資料庫把相應的幾等獎輸出來,這就是抽獎。不想讓特等獎或是什麼獎出現,直接屏蔽掉,不設置與獲得的隨機數相對的數據值就可以了。至於第二個問題,首先在會員的基本信息的那個數據表裡,要有一個積分的欄位,一個是否抽獎的判定欄位(這個欄位里的值是能是0和1,0為沒有抽獎,1為已抽獎),一個會員唯一Id的欄位(這個欄位用資料庫自增序列就好了),然後讓每一個會員都可以查看這個id號。在會員注冊時,注冊的from表單里就可以有選填的推薦號,這個推薦號就是那個id號。只要注冊表單里有這個id號,就用sql語句在這個id號的列里把積分的那個欄位的值+1。至於你說的5點積分就可以「永久抽獎」這句話,我沒有明白是什麼意思。永久抽獎能抽到什麼啊?要是有好東西,等你的網站做好了,一定要告訴我啊。我一定第一時間弄到5點積分,來個永久抽獎!嘎嘎!
㈢ 在SQL中怎麼樣獲取隨機數
1、隨機小數 select rand(),
㈣ 使用SQL語句取隨機數的方法
SQL隨機查詢語句,[資料庫使用技巧]SQL語句生成隨機數,如何隨機顯示sql查詢語句查詢的數據記錄集中的20條,隨機取出若干條記錄的SQL語句,使用SQL語句取隨機數的方法
方法如下:
SQL
Server:
Select
TOP
N
*
From
TABLE
order
By
NewID()
Access:
dim
r
randomize
r
=
rnd
sql
=
"select
top
10
*
from
table
order
by
rnd("
&
r
&
"-id)"
rnd("
&
r
&
"-id)
其中的id是自動編號欄位,可以利用其他任何數值來完成,比如用姓名欄位(UserName)
select
top
10
*
from
table
order
by
rnd("
&
r
&
"-Len(UserName))
MySql:
Select
*
From
TABLE
order
By
Rand()
Limit
10
orACLE:
select
*from
(select
*from
t
order
by
dbms_random.value)
where
rownum<10
㈤ SQL語句大全的技巧
1=1,1=2的使用
在SQL語句組合時用的較多
「where 1=1」是表示選擇全部 「where 1=2」全部不選,
如:
if @strWhere !='
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
end
else
begin
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
end
我們可以直接寫成
set @strSQL='select count(*) as Total from tablename where 1+1'
if(@strWhere!='')
{set @strSQL=@strSQL+』and』+strWhere}
收縮資料庫
--重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
--收縮數據和日誌
DBCC SHRINKDB
DBCC SHRINKFILE
壓縮資料庫
dbcc shrinkdatabase(dbname)
轉移資料庫給新用戶以已存在用戶許可權
exec sp_change_users_login 'update_one','newname','oldname'
go
檢查備份集
RESTORE VERIFYONLY from disk='E:dvbbs.bak'
修復資料庫
Alter DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
GO
Alter DATABASE [dvbbs] SET MULTI_USER
GO
日誌清除
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT
USE tablename -- 要操作的資料庫名
Select @LogicalFileName = 'tablename_log', --日誌文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 1 -- 你想設定的日誌文件的大小(M)
-- Setup / initialize
DECLARE @OriginalSize int
Select @OriginalSize = size
FROM sysfiles
Where name = @LogicalFileName
Select 'Original Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
FROM sysfiles
Where name = @LogicalFileName
Create TABLE DummyTrans
(DummyColumn char (8000) not null)
DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
Select @StartTime = GETDATE(),
@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
AND @OriginalSize = (Select size FROM sysfiles Where name = @LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- Outer loop.
Select @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
Insert DummyTrans VALUES ('Fill Log')
Delete DummyTrans
Select @Counter = @Counter + 1
END
EXEC (@TruncLog)
END
Select 'Final Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
FROM sysfiles
Where name = @LogicalFileName
Drop TABLE DummyTrans
SET NOCOUNT OFF
更改某個表
exec sp_changeobjectowner 'tablename','dbo'
存儲更改全部表
Create PROCEDURE dbo.User_ChangeObjectOwnerBatch
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
AS
DECLARE @Name as NVARCHAR(128)
DECLARE @Owner as NVARCHAR(128)
DECLARE @OwnerName as NVARCHAR(128)
DECLARE curObject CURSOR FOR
select 'Name' = name,
'Owner' = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name
OPEN curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN
if @Owner=@OldOwner
begin
set @OwnerName = @OldOwner + '.' + rtrim(@Name)
exec sp_changeobjectowner @OwnerName, @NewOwner
end
-- select @name,@NewOwner,@OldOwner
FETCH NEXT FROM curObject INTO @Name, @Owner
END
close curObject
deallocate curObject
GO
循環寫入數據
declare @i int
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i+1
end
㈥ Sql Server中怎麼隨機選取記錄
在實際的應用當中,經常會碰到隨機選取某些記錄的情況,比如說年終的時候隨機從公司的員工當中選取10個人作為幸運兒,電腦隨機抽獎等等,都是隨機選取記錄的情況。
其實非常簡單,一條語句就可以幫您實現。
假設情況如下:
資料庫中有一個表:recordTable
現在要從這個表中隨機的抽取10條記錄。
在sql server中語句如下:
select top 10 *
from recordTable
order by NEWID();
當然了,上面還可以再進行加工,
比如說,不需要選擇出所有的列,則把上面的* 更改成recordTable表中的列明即可。
比如說,按條件隨機選取,則可以在order前面加上where 語句即可。
等等,這些功能都要等著讀者自己去發現。
另外我對這個隨機數做了一個測試,基本上能夠滿足要求。
㈦ 這些SQL優化技巧握在手,面試可以橫著走……
一、SQL執行順序
二、基礎SQL優化
1、查詢SQL盡量不要使用select *,而是具體欄位
1)反例
2)正例
3)理由
2、避免在where子句中使用or來連接條件
查詢id為1或者薪水為3000的用戶:
1)反例
2)正例
使用union all:
分開兩條SQL寫:
3)理由
3、使用varchar代替char
1)反例
2)正例
3)理由
4、盡量使用數值替代字元串類型
5、查詢盡量避免返回大量數據
如果查詢返回數據量很大,就會造成查詢時間過長,網路傳輸時間過長。同時,大量數據返回也可能沒有實際意義。如返回上千條甚至更多,用戶也看不過來。
通常採用分頁,一頁習慣10/20/50/100條。
6、使用explain分析你SQL執行計劃
SQL很靈活,一個需求可以很多實現,那哪個最優呢?SQL提供了explain關鍵字,它可以分析你的SQL執行計劃,看它是否最佳。Explain主要看SQL是否使用了索引。
返回結果:
7、是否使用了索引及其掃描類型
type:
性能排行:
System > const > eq_ref > ref > range > index > ALL
possible_keys:
key:
8、創建name欄位的索引
提高查詢速度的最簡單最佳的方式。
9、優化like語句
模糊查詢,程序員最喜歡的就是使用like,但是like很可能讓你的索引失效。
1)反例
2)正例
3)理由
未使用索引,故意使用sex非索引欄位:
主鍵索引生效:
索引失效,type=ALL,全表掃描:
10、字元串怪現象
1)反例
2)正例
3)理由
為什麼第一條語句未加單引號就不走索引了呢?這是因為不加單引號時,是字元串跟數字的比較,它們類型不匹配,MySQL會做隱式的類型轉換,把它們轉換為數值類型再做比較。
11、索引不宜太多,一般5個以內
12、索引不適合建在有大量重復數據的欄位上
如性別欄位。因為SQL優化器是根據表中數據量來進行查詢優化的,如果索引列有大量重復數據,Mysql查詢優化器推算發現不走索引的成本更低,很可能就放棄索引了。
13、where限定查詢的數據
數據中假定就一個男的記錄。
1)反例
2)正例
3)理由
14、避免在索引列上使用內置函數
業務需求:查詢最近七天內新生兒(用學生表替代下)
給birthday欄位創建索引:
當前時間加7天:
1)反例
2)正例
3)理由
15、避免在where中對欄位進行表達式操作
1)反例
2)正例
3)理由
16、避免在where子句中使用!=或>操作符
應盡量避免在where子句中使用!=或>操作符,否則引擎將放棄使用索引而進行全表掃描。記住實現業務優先,實在沒辦法,就只能使用,並不是不能使用。如果不能使用,SQL也就無需支持了。
1)反例
2)理由
17、去重distinct過濾欄位要少
1)理由
18、where中使用默認值代替null
環境准備:
1)反例
2)正例
3)理由
三、高級SQL優化
1、批量插入性能提升
大量數據提交,上千,上萬,批量性能非常快,mysql獨有。
1)多條提交
2)批量提交
3)理由
2、批量刪除優化
避免同時修改或刪除過多數據,因為會造成cpu利用率過高,會造成鎖表操作,從而影響別人對資料庫的訪問。
1)反例
2)正例
3)理由
3、偽刪除設計
1)商品狀態(state)
2)理由
4、提高group by語句的效率
可以在執行到該語句前,把不需要的記錄過濾掉。
1)反例:先分組,再過濾
2)正例:先過濾,後分組
5、復合索引最左特性
創建復合索引,也就是多個欄位。
滿足復合索引的左側順序,哪怕只是部分,復合索引生效。
沒有出現左邊的欄位,則不滿足最左特性,索引失效。
復合索引全使用,按左側順序出現 name,salary,索引生效。
雖然違背了最左特性,但MYSQL執行SQL時會進行優化,底層進行顛倒優化。
1)理由
6、排序欄位創建索引
什麼樣的欄位才需要創建索引呢?原則就是where和order by中常出現的欄位就創建索引。
7、刪除冗餘和重復的索引
8、不要有超過5個以上的表連接
9、inner join 、left join、right join,優先使用inner join
三種連接如果結果相同,優先使用inner join,如果使用left join左邊表盡量小。
1)理由
10、in子查詢的優化
日常開發實現業務需求可以有兩種方式實現:
如需求:查詢所有部門的所有員工:
假設表A表示某企業的員工表,表B表示部門表,查詢所有部門的所有員工,很容易有以下程序實現,可以抽象成這樣的一個嵌套循環:
㈧ sql 怎麼樣從100的數據中隨機選取30數
使用隨機值函數作排序,技巧些的話,可以使用NewID()函數。
SELECTTOP30*
FROMTableX
ORDERBYNewID()
㈨ sql技巧問題
同問 SQL有什麼方法可以快速把列名和數據一一對上? 比如:下面圖片的把第一行的第一列全業務對應下一行的3500.0元,都是把第二行的數據插入到第一行的第二列上