sql 执行顺序
from -> where -> group by -> having -> select -> order by
select子句可以识别 别名
使用cast函数转换数据类型
1
2SELECT name + CAST(gender as VARCHAR(10) ) ,age
FROM dbo.student使用* 查询结果
1
2
3select bookname ,quantity,book_price ,quantity*book_price as total_price
from bookitem
order by bookname使用case进行条件查询
1
2
3
4
5
6
7
8
9select name,time,redit=
case
when time>=40 then 5
when time>=30 then 4
when time>=20 then 3
else 2
end
from course
order by redit
sql函数
字符串运算符
1 | ASCII,CHAR,LOWER,UPPER,LTRIM,RTRIM, |
将结果转成大写
1
2select upper(bookname) as name ,quantity,book_price
from bookitem去空格
1
2select rtrim(name) + rtrim(dname) as info ,age
from teacher
算术运算符 ABA,SIGN(调试参数的正负号),CEILING(最大),FLOOR
ROUND(四舍五入),COS,PI,RAND(0-1 之间浮点数)
1 select rand()
时间函数
DAY,MONTH,YEAR,DATEADD,DATEDIFF,DATENAME,DATEPART,GETDATE
-CONVERT 函数转换日期时间
1
2
3 CONVERT (data_type [(length), expression,style)
select CONVERT(VARCHAR ,GETDATE(),8) AS now_time
聚合与分组
SUM,MAX,MIN,AVG(忽略null),COUNT
聚合函数处理的是数据组
求和函数
只能对数字列进行求和1
2select sum(column_name)
from table_name计数函数
- count(*) 计算表中行总是,即使为null,也计算在内
- count(column) 计算column包含的行的数码,不含null行
1
2select count(*) as totalcount
from table_name
求均值
1
2select avg ([all/distinct] column_name)
from table_name
1 | CREATE TABLE [dbo].[Learn_CouponSendJob] ( |
union (会把相同记录合并)
去多个select 结果集的合并 union 中select 语句必须有相同数量的列,列的数据类型要相似(可以转换) 每条select 的列的顺序必须相同
1 | -- 从已有表创建表结构 |
mysql 默认事务隔离级别
事务隔离级别 | 脏读 | 不可重复读 | 幻读 | |
---|---|---|---|---|
读未提交(read-uncommitted) | 是 | 是 | 是 | |
不可重复读(read-committed) | 否 | 是 | 是 | SQL server 默认级别 |
可重复读(repeatable-read) | 否 | 否 | 是 | mysql 默认级别 |
串行化(serializable) | 否 | 否 | 否 |
1 | mysql> select @@tx_isolation; |
set session transaction isolation level read committed;
start transaction ;
- commit;
隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大,鱼和熊掌不可兼得啊。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed,它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、幻读这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。
1 |
|
获取今天 开始/结束时间
1 | SELECT |
删除sql server 数据库
1 | use master |
csql bulkcopy
1 | static void Main() |
如何解决sqlserver
数据库cpu突然上涨
找到当前数据库正在执行的query
1
2
3
4
5
6
7
8
9SELECT sqltext.TEXT,
req.session_id,
req.status,
req.command,
req.cpu_time,
req.total_elapsed_time
FROM sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext
order by req.cpu_time desc结束正在执行的占用CPU时间长的query
1 | kill [session_id] |
sqlserver
诊断cpu
相关sql
####CPU相关视图1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16--
SELECT * FROM sys.dm_os_sys_info
SELECT * FROM sys.dm_exec_sessions
SELECT * FROM sys.sysprocesses
SELECT * FROM sys.dm_os_tasks
SELECT * FROM sys.dm_os_workers
SELECT * FROM sys.dm_os_threads
SELECT * FROM sys.dm_os_schedulers
SELECT * FROM sys.dm_os_memory_objects
SELECT * FROM sys.dm_os_nodes
SELECT * FROM sys.dm_os_memory_nodes
exec sp_configure 'max degree of parallelism'--系统默认并行度
exec sp_configure 'cost threshold for parallelism' --并发阈值
exec sp_configure 'max worker threads'--系统最大工作线程数
exec sp_configure 'affinity mask' --CPU关联
数据库系统 cpu,线程 数量
1 | select max_workers_count,scheduler_count,cpu_count,hyperthread_ratio |
执行的线程所遇到的所有等待的相关信息
1 | SELECT TOP 10 wait_type,waiting_tasks_count,signal_wait_time_ms |
当前线程数
1 | select COUNT(*) as 当前线程数 from sys.dm_os_workers |
使用最多处理器时间的用户数据库
1 | ;WITH DB_CPU_Stats AS ( |
缓存中最耗CPU的语句
1 | select total_cpu_time,total_execution_count,number_of_statements,[text] |
当前正在执行的语句
1 | SELECT |
获取数据库服务器CPU核数
1 | ---SQL 3:获取数据库服务器CPU核数(适用于所有版本) |
获取数据库服务器磁盘详情
1 |
|
常用sys_procedure
sp_who (需要 View server status )
- 结束正在指定语句
sp_who ‘active’
kill {SPID value}
常见问题的解法
1 | https://docs.microsoft.com/zh-cn/sql/relational-databases/system-catalog-views/querying-the-sql-server-system-catalog-faq?view=sql-server-2017#_FAQ6 |
重命名表属性
1 | EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN'; |
grant 存储过程权限
1 | GRANT EXECUTE ON dbo.procname TO username; |