SQL(Sql Server)常用方法

  • 判断是否存在数据库.表.字段
--判断是否存在数据库
SELECT  * FROM    sys.databases WHERE   name = 'LeetCode'
--判断是否存在表
SELECT * FROM sys.objects WHERE object_id=OBJECT_ID('LeetCode.dbo.Person');
--判断是否存在字段
SELECT * FROM syscolumns WHERE name ='name' AND id=OBJECT_ID('Person')
  • 创建数据库
USE LeetCode;
GO
--delete the LeetCode database if it exists
IF EXISTS ( SELECT  * FROM    sys.databases WHERE   name = 'LeetCode' )
    BEGIN   
        DROP    DATABASE LeetCode;--如果存在则删除
        CREATE DATABASE LeetCode;--重新创建数据库
    END;    
  • 创建表
--sqlServer版
USE LeetCode
--delete the Person datatable if it exists
IF EXISTS(SELECT * FROM sys.objects WHERE object_id=OBJECT_ID('LeetCode.dbo.Person'))
BEGIN
     DROP TABLE Person
END

CREATE TABLE Person
(
    id INT PRIMARY KEY IDENTITY(1,1),--主键,自增
    name NVARCHAR(20) NOT NULL DEFAULT '',--默认值为''
    email NVARCHAR(30) DEFAULT '' UNIQUE,--唯一
    age INT NOT NULL DEFAULT 0 CHECK(age>0 AND age<200), --age只能时0-200之间
    sex BIT NOT NULL DEFAULT 1
)

--mysql 版
CREATE TABLE  `test`.`user_info` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` NVARCHAR(45) NULL,
  `age` int(11) default NULL,
  primary key(`id`),
  Key `name_index`(`name`)
  )engine=InnoDb default charset=utf8

删除数据库表

DROP TABLE table_name;
  • 查看
use test;
show Databases;
show tables;
DROP TABLE table_name ; --删除数据表
alter table test drop column testcol;-- 删除表字段
alter table test add COLUMN new2 VARCHAR(20) NOT NULL;--新增字段
insert into user_info (name,age) values('a',20);--插入数据
CREATE INDEX index_name ON table_name (column_name);--创建索引
select * from user_info where name like '%wmin';--模糊查询
select name,count(*) from user_info group by name;--分组查看name个数
select age ,count(age) as ageCount from user_info group by age;--给count另起名
select coalesce(name,'总数'),sum(age) as sumAge from user_info group by name with rollup;--如果名字为空,用总数代替,查询age总年龄
select count(*) as count,name,age from user_info group by name,age;--查询name和age都重复的个数
  • GUID 唯一编码
SELECT NEWID();
  • REPLACE 字符串替换
REPLACE(NEWID(), '-', '')
  • LOWER/UPPER 将字符串小/大写
SELECT LOWER(NEWID()),UPPER(NEWID())
SELECT LOWER(REPLACE(NEWID(),'-','')),UPPER(REPLACE(NEWID(),'-',''))
  • CAST 转换类型
-- 获取该月的启示日期
DECLARE @year INT=2019;
DECLARE @month INT =4;
DECLARE @monthFirstDay DATETIME;
SET @monthFirstDay=CAST(@year AS NVARCHAR(4))+'-'+CAST(@month AS NVARCHAR(4))+'-01 00:00:00';
SELECT @monthFirstDay AS firstDay,  DATEADD(Month,1,DATEADD(Day,-DAY(@monthFirstDay),@monthFirstDay)) AS lastDay;
  • 对新建的表进行联合查询
SELECT * FROM dbo.aTable right JOIN dbo.bTable ON dbo.aTable.id = dbo.bTable.aid
  • 对联合查询的结果新建视图
CREATE VIEW Sys_ProjectDetailView as
SELECT  * FROM dbo.aTable right JOIN dbo.bTable ON dbo.aTable.id = dbo.bTable.aid
  • 批量加主健,过滤表已存在的主健
DECLARE @Sql NVARCHAR(max)=''
SELECT  @Sql=@Sql+'ALTER TABLE ' + b.name + ' ADD Constraint PK_' + b.name
        + ' PRIMARY KEY (' + a.name + ');'
FROM    sys.columns AS a
        INNER JOIN sys.tables AS b ON b.object_id = a.object_id
WHERE   a.is_identity = 1
        AND NOT EXISTS ( SELECT 1
                         FROM   sys.key_constraints
                         WHERE  object_id = a.object_id
                                AND b.type = 'PK' );
EXEC(@Sql)
  • 导入导出
  1. 在源数据库生成表脚本,再导入数据就行了
  2. 打开SQL按F7,调出“对象资源管理器详细信息”,在左侧选中“存储过程“或”Stored Procedures“目录,到右侧窗口,全选所有的要导入的sp,在选中的sp上鼠标右键。”生成存储过程脚本为”->“Drop和Create到”->“File”,这样就可以导出所有sp,将保存后的file到产品环境下运行一下就可以了。
  • 关于创建索引
--直接创建索引(length表示使用名称前1ength个字符)  
CREATE INDEX index_name ON table_name(column_name(length))  
--修改表结构的方式添加索引  
ALTER TABLE table_name ADD INDEX index_name ON (column_name)  
--创建表的时候同时创建索引  
CREATE TABLE `table_name` (  
`id` int(11) NOT NULL AUTO_INCREMENT ,  
`title` char(255) NOT NULL ,  
PRIMARY KEY (`id`),  
INDEX index_name (title)  
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4;  
--删除索引  
DROP INDEX index_name ON table_name;  
  
--建立复合索引 
CREATE INDEX mytable_categoryid_userid ON mytable (category_id,user_id);  
--注意命名时的习惯了吗?使用"表名_字段1名_字段2名"的方式  
SHOW INDEX FROM table_name;--显示索引
  • 更新数据
SET SQL_SAFE_UPDATES=0; //关闭安全模式
update user_info set name='liyue' where age = 15;
delete from user_info where name='h';
  • 事务,用 BEGIN, ROLLBACK, COMMIT来实现
begin;--开启事务
insert into user_info (name,age) value('www',11);--插入数据
commit;--提交事务
rollback; -- 回滚
  • ALTER命令
show columns from user_info;--显示table字段
alter table user_info add testColumn int;--添加字段
alter table user_info modify testColumn char(20) first name;--在name字段前添加,after相反
ALTER TABLE tableName MODIFY j BIGINT NOT NULL DEFAULT 100;--修改默认字段
alter table user_info drop testColumn;--删除字段
show columns from user_info;--查看字段
alter table user_info modify testColumn char(20);--修改字段类型及名称
alter table tableName engine=myisam;--修改存储引擎
alter table tableName drop foreign key keyName;--删除外键约束:keyName是外键别名
ALTER TABLE tableName ALTER colName SET DEFAULT 1000;--修改字段默认值
ALTER TABLE tableName RENAME TO tableName2;--修改表名
  • 将数据库表的字段变成自增方法:
--将表中字段删除
alter table [dbo].[MemberInfo] drop column MemberID 
--添加表中字段并使其自增
alter table [dbo].[MemberInfo] add MemberID int identity(1,1) primary key
  • 复制表
show create table user_info; --显示创建表的结构语句,然后修改表明执行语句
INSERT INTO clone_tbl (runoob_id,
    ->                        runoob_title,
    ->                        runoob_author,
    ->                        submission_date)
    -> SELECT runoob_id,runoob_title,
    ->        runoob_author,submission_date
    -> FROM runoob_tbl;--复制数据
  • 获取服务器元数据
SELECT VERSION(); --服务器版本信息
SELECT DATABASE(); -当前数据库名 (或者返回空)
SELECT USER(); --当前用户名
-- SHOW STATUS; --服务器状态
-- SHOW VARIABLES;--服务器配置变量
  • 查询重复数据
SELECT phoneNum,COUNT(0) AS 重复数据 FROM dbo.sys_user GROUP BY PhoneNum HAVING COUNT(PhoneNum)>0 ORDER BY 重复数据
  • 重复数据处理
select count(*) as count,name,age from user_info group by name,age;--name和age都重复的个数
--linq 写法

select age from user_info group by age;--读取不重复数据 with group by
select distinct age from user_info;--读取不重复数据 with distinct
  • 重复数据处理 linq 方式
//单个group by 情况
 var names = from p in details
                    group p by p.name into g
                    select new {g.Key, nameCount = g.Count() };
//多个group by 情况
var names = from p in details
                    group p by new  { p.entryName,p.amount } into g
                    select new {g.Key.entryName, nameCount = g.Count() };
  • 导出数据
SELECT * FROM runoob_tbl   INTO OUTFILE  '/tmp/tutorials.txt';
  • 查询数据库mdf文件存放位置
select   filename   from   master.dbo.sysdatabases   where   name   LIKE  '%'
  • 分页查询方法(row_number)
//c#
//对应的linq表达式 
Sys_UserInfo.Skip(20).Take(10).ToList();
-- Region Parameters
DECLARE @p0 INT = 20;
DECLARE @p1 INT = 10;
---- EndRegion
SELECT  [t1].[UserID] ,
        [t1].[LoginName] ,
        [t1].[LoginPass] ,
FROM    ( SELECT ROW_NUMBER() OVER ( ORDER BY [t0].[UserID], [t0].[LoginName], [t0].[LoginPass] ) AS [ROW_NUMBER] ,
                    [t0].[UserID] ,
                    [t0].[LoginName] ,
                    [t0].[LoginPass] ,
          FROM      [sys_UserInfo] AS [t0]
        ) AS [t1]
WHERE   [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1
ORDER BY [t1].[ROW_NUMBER];
  • cross/outer apply 用法
    将左表的每项值作为右输入参数,简单的说 apply 允许我们将前面结果集每一行的数据作为参数,传递到后面的表达式,后面的表达式可以是一个表值函数,或者select结果集。outer apply 与left join 类似,cross apply 与inner join 类似
-- Region Parameters
DECLARE @p0 NVARCHAR(100) = '';
-- EndRegion
SELECT  [t3].[value]
FROM    ( SELECT    [t0].[CompanyId]
          FROM      [sys_UserInfo] AS [t0]
          GROUP BY  [t0].[CompanyId]
        ) AS [t1]
        OUTER APPLY ( SELECT    COUNT(*) AS [value]
                      FROM      [sys_UserInfo] AS [t2]
                      WHERE     ( [t2].[UserRealName] <> @p0 )
                                AND ( [t1].[CompanyId] = [t2].[CompanyId] )
                    ) AS [t3];
  • ROW_NUMBER() 行号
    返回结果集分区内行的序列号,每个分区的第一行从1开始,
    ROW_NUMBER () OVER ([ <partition_by_clause> ] <order_by_clause>)
SELECT ROW_NUMBER() OVER(PARTITION BY m.memberID ORDER BY createTime) AS rowNum,m.* FROM dbo.MemberGPS AS m

在使用over等函数时,over里头的分组及排序的执行晚于“where,group by,order by”的执行。

select  
ROW_NUMBER() over(partition by customerID  order by insDT) as rows, 
customerID,totalPrice, DID 
from OP_Order where insDT>'2011-07-22'
  • RANK 排名

  • 分组后取每组第一条ROW_NUMBER() OVER(PARTITION BY ID ORDER BY TIME)

SELECT  *
FROM    ( SELECT    ROW_NUMBER() OVER ( PARTITION BY m.MemberID ORDER BY m.CreateTime ) as rowNum ,
                    m.*
          FROM      dbo.MemberGPS AS m
        ) AS t
WHERE   t.rowNum = 1;
  • linq to sql 表达式语句
    下面用一个表格总结一下LINQ to SQL语句
Where       过滤;延迟
Select      选择;延迟
Distinct    查询不重复的结果集;延迟
Count       返回集合中的元素个数,返回INT类型;不延迟
LongCount   返回集合中的元素个数,返回LONG类型;不延迟
Sum         返回集合中数值类 型元素之和,集合应为INT类型集合;不延迟
Min         返回集合中元素的最小值;不延迟
Max         返回集合中元素的最大值;不延迟
Average     返回集合中的数值类型元素的平均 值。集合应为数字类型集合,其返回值类型为double;不延迟
Aggregate   根据输入的表达式获取聚合值;不延迟
  • 存储过程-- 1.无参数简单存储过程
SET ANSI_NULLS ON -- value 符合null值规则
GO
SET QUOTED_IDENTIFIER ON --标识符可以用,且需用双引号引起来
GO
CREATE PROCEDURE user_proc
AS
BEGIN
    SET NOCOUNT ON; --不返回计数
    SELECT * FROM users;
    SET NOCOUNT OFF;  --打开返回计数
END
GO
-- EXEC dbo.user_proc    --执行存储过程

第一次创建存储过程后下次修改需将CREATE PROCEDURE改成ALTER PROCEDURE

  • 存储过程-- 2 带参数存储过程
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[user_proc]
 @sname NVARCHAR(100)
AS
BEGIN
SELECT * FROM dbo.Users WHERE Name = @sname
END
GO  
-- exec user_proc ''
  • 存储过程-- 3 输出变量
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[user_proc]
 @sname NVARCHAR(100),
 @emptyNameCount INT OUTPUT  --传出参数
AS
BEGIN
SET @emptyNameCount =( SELECT COUNT(*) FROM dbo.Users WHERE Name = @sname)
END
GO  

DECLARE @emptyNameCount int
exec user_proc '',@emptyNameCount OUTPUT
SELECT @emptyNameCount AS emptyNameCount
  • 游标
DECLARE cursor_user CURSOR  FOR SELECT * FROM dbo.Users
OPEN cursor_user 
FETCH NEXT FROM cursor_user
while @@fetch_status=0
BEGIN
    UPDATE dbo.Users SET Name = 'wwmin' WHERE CURRENT OF cursor_user
    FETCH   NEXT FROM cursor_user   
END
CLOSE cursor_user
DEALLOCATE cursor_user
-- 601. 体育馆的人流量 解法用到的游标示例
DECLARE @sid INT;
DECLARE @sdate DATE;
DECLARE @speople INT;
DECLARE @startdate DATE;
DECLARE  @nextdate Date;
DECLARE  @thisN INT =0;
DECLARE my_coursor CURSOR FOR SELECT id,date,people FROM stadium WHERE people >=100 --定义游标
OPEN my_coursor --打开游标
FETCH NEXT FROM my_coursor INTO @sid ,@sdate,@speople; --获取游标值
SET @startDate=@sdate;
SET @nextDate=@sdate;
WHILE @@FETCH_STATUS=0 --循环遍历游标 当等于0时结束
BEGIN
IF(@sdate = DATEADD(DAY,1,@nextDate))
BEGIN
    SET @nextDate=@sdate;
    SET @thisN=@thisN+1;
END
ELSE 
BEGIN
    SET @startDate=@sdate;
    SET @nextDate=@sdate;
    SET @thisN=0;
END
FETCH NEXT FROM my_coursor INTO @sid,@sdate,@speople; --获取下一个游标值
END
CLOSE my_coursor; --关闭
DEALLOCATE  my_coursor;--删除游标引用
IF(@thisN >= 3)
BEGIN
    SELECT * FROM dbo.stadium WHERE date >= @startDate AND date <= @nextDate
END
  • 回滚操作 transaction
BEGIN TRY   
    BEGIN TRANSACTION; --开启事务
    INSERT  INTO dbo.Users
            ( Name, Banned, Role )
    VALUES  ( N'a', -- Name - nvarchar(50)
              N'1', -- Banned - nvarchar(10)
              N'guest'  -- Role - nvarchar(50)
              );
    COMMIT TRANSACTION; -- 提交事务
END TRY
BEGIN CATCH
    SELECT  ERROR_NUMBER() AS errornumber; --显示错误数
    ROLLBACK TRANSACTION;   --回滚事务
END CATCH;
  • 触发器
IF(OBJECT_ID('tri_user') IS NOT NULL)
DROP TRIGGER tri_user --如果已存在则删除触发器
GO
CREATE TRIGGER  tri_user  --创建触发器
ON dbo.Users -- 在哪个表上创建
FOR delete  --delete 触发器 ,相应的还有insert update触发器
AS
DECLARE @p_Id INT
SELECT @p_Id = Users_Id FROM deleted --删除的数据,该数据存在deleted表中,相应的还有inserted临时表
--但是没有updated临时表,而是用deleted和inserted两个临时表代替
DELETE  dbo.Person  WHERE user_id = @p_Id --做相应的操作
GO
-- instead of 触发器,instead of 触发器并不执行其定义的操作(insert、update、delete)
--而仅是执行触发器本身,并且会覆盖触发语句的操作
CREATE TRIGGER tri_user_insteadof
ON dbo.Users
INSTEAD OF UPDATE,INSERT,DELETE
AS 
DECLARE @count1 INT;
DECLARE @count2 INT;

SELECT @count1 = COUNT(1) FROM Deleted
SELECT @count2 = COUNT(1) FROM Inserted
IF(@count1>0 AND @count2>0)
BEGIN
    SELECT 'update 操作'
END
ELSE IF(@count1>0)
BEGIN
    SELECT 'delete 操作'
END
ELSE IF(@count2>0)
BEGIN
    SELECT 'insert 操作'
END
GO  
DISABLE TRIGGER tri_user ON dbo.Users;-- 关闭触发器
ENABLE TRIGGER tri_user ON dbo.Users; -- 启用触发器

select * from sys.triggers; --查询已存在的触发器
select * from sys.objects where type = 'TR';--查询已存在的触发器
select * from sys.trigger_events --查询触发器事件对象视图
exec sp_helptext 'tri_user' --查询创建触发器的 T-SQL 文本
  • 定时器
    在规定的时间执行相应操作
    1.首先开启sql server 代理(SQL Server Agent),双击开启即可
    2.管理-->维护计划-->右键新建维护计划-->子计划的计划添加执行时机-->在工具箱里面选择维护计划任务,将任务拖到任务面板里面,经常用到的时备份数据库和执行T-SQL语句任务,双加任务编写语句
    3.保存之后在管理-->维护计划-->右键该任务选择执行即可生效

  • 延迟执行或者是指定时间执行

SELECT * FROM dbo.Users WAITFOR DELAY   '00:00:10' --延迟10秒执行
  • 时间相关 (sql server)
BEGIN --时间相关
    --当前日期 往前推7天
    DECLARE @dl DATE = GETDATE()-7

    --转换日期格式为年月日字符串
    DECLARE @dt1 NVARCHAR(32)=CONVERT(NVARCHAR(32), GETDATE()-7, 112);
    --转换日期格式为年月日日期
    DECLARE @dt2 DATE=CONVERT(DATE, GETDATE()-7, 112);
    --将日期转换为新数据类型 style有效值为:
    --CONVERT(data_type(length),data_to_be_converted,style)
    --  Style ID    Style 格式
    --100 或者 0  mon dd yyyy hh:miAM (或者 PM)
    --101   mm/dd/yy
    --102   yy.mm.dd
    --103   dd/mm/yy
    --104   dd.mm.yy
    --105   dd-mm-yy
    --106   dd mon yy
    --107   Mon dd, yy
    --108   hh:mm:ss
    --109 或者 9  mon dd yyyy hh:mi:ss:mmmAM(或者 PM)
    --110   mm-dd-yy
    --111   yy/mm/dd
    --112   yymmdd
    --113 或者 13 dd mon yyyy hh:mm:ss:mmm(24h)
    --114   hh:mi:ss:mmm(24h)
    --120 或者 20 yyyy-mm-dd hh:mi:ss(24h)
    --121 或者 21 yyyy-mm-dd hh:mi:ss.mmm(24h)
    --126   yyyy-mm-ddThh:mm:ss.mmm(没有空格)
    --130   dd mon yyyy hh:mi:ss:mmmAM
    --131   dd/mm/yy hh:mi:ss:mmmAM


    DECLARE @y INT = YEAR(GETDATE());--年
    DECLARE @m INT =MONTH(GETDATE());--月 从1开始
    DECLARE @d INT=DAY(GETDATE());--日
    SELECT @dl,@dt1,@dt2,@y,@m,@d;

    SELECT DATEADD(DAY,-7,GETDATE());-- 当前时间往前推7天
    SELECT DATEADD(HOUR,1,GETDATE());-- 当前时间往后推1小时
    SELECT DATEDIFF(d,@dl,GETDATE()); --计算两个日期差值 d为日期
    SELECT DATEFROMPARTS(YEAR(GETDATE()),MONTH(GETDATE()),DAY(GETDATE()));--根据年月日拼接处日期
    SELECT DATENAME(YEAR,GETDATE());--获取年 --有效值 YEAR|y,QUARTER|q,MONTH|m,WEEKDAY,WEEK|w,DAY|d,DAYOFYEAR,HOUR|h,MINUTE|m,SECOND|s,MS(毫秒)
    SELECT DATEPART(ms,GETDATE());--获取日期部分值, --有效值 YEAR|y,QUARTER|q,MONTH|m,WEEKDAY,WEEK|w,DAY|d,DAYOFYEAR,HOUR|h,MINUTE|m,SECOND|s,MS(毫秒)
    SELECT DATETIME2FROMPARTS(2019,8,26,15,10,11,1,2);-- 拼接日期
    SELECT DATETIMEFROMPARTS(2019,8,26,15,10,11,11);-- 拼接日期
    SELECT DATETIMEOFFSETFROMPARTS(2019,8,26,15,10,11,1,2,1,2);--拼接出偏移日期
END
GO
  • 更新某个表的字段值(依据自身做个计算)
UPDATE  UserData SET num = CAST(ROUND(num, 0) as int) where id = 1
  • 循环插入值
--insert into [Eletcric_3].dbo.account 
--values('admin1','e35696dec3cfa6299f8ebd6c3434daf3','2019-09-29 07:17:39.877','2222','2100-01-01 00:00:00.000','0','1','13564066562','1','上海松江');
--循环执行插入10000条数据
declare @ID int
begin
set @ID=2
while @ID<=100
begin
insert into [Eletcric_3].dbo.account 
values('admin'+cast(@ID as varchar),'e35696dec3cfa6299f8ebd6c3434daf3','2019-09-29 07:17:39.877','2222','2100-01-01 00:00:00.000','0','1','13564066562','1','上海松江');
set @ID=@ID+1
end
end
  • 查看某个表的所有字段及类型
SELECT name as column_name,TYPE_NAME(system_type_id) as column_type from sys.columns WHERE object_id = OBJECT_ID('t_table_name');
-- t_table_name 为表名
  • 日期相关
    字符串转日期时间
SELECT CONVERT(datetime,'2021-8-2 00:02:44',20)
-- 2021-08-02 00:02:44.000
  • SQL Server日期函数举例:
  1. GetDate
select GetDate() --2021-08-02 08:59:49.500
  1. DateDiff
SELECT DateDiff(s,'2021-07-20','2021-07-25 22:56:32')
-- 返回值为 514592 秒
SELECT DateDiff(d,'2021-07-20','2021-07-25 22:56:32')
-- 返回值为 5 天
  1. DatePart
SELECT DatePart(w,'2021-7-26 22:56:32') -- 返回值为 2 即星期一(周日为1,周六为7)
SELECT DatePart(d,'2021-7-25 22:56:32') -- 返回值为 25即25号
SELECT DatePart(y,'2021-7-25 22:56:32') -- 返回值为 206即这一年中第206天
SELECT DatePart(yyyy,'2021-7-25 22:56:32') -- 返回值为 2021即2021年
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容

  • 什么是SQL数据库: SQL是Structured Query Language(结构化查询语言)的缩写。SQL是...
    西贝巴巴阅读 1,803评论 0 10
  • SQL语言基础 本章,我们将会重点探讨SQL语言基础,学习用SQL进行数据库的基本数据查询操作。另外请注意本章的S...
    厲铆兄阅读 5,318评论 2 46
  • 50个常用的sql语句 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cna...
    最美的太阳WW阅读 3,169评论 0 23
  • 人生短暂而又充实, 一天天过去, 感觉都疲惫。 什么时候可以摆脱生活的压力, 细细想来无非是自己要努力, 事事靠冲...
    fba8e0c70629阅读 164评论 0 0
  • 千与千寻里面说,过去的事情的只是想不起来了而已,或许我哪一天需要,它们就会回来的。 暴雨过后的夏天里,气温一点一点...
    南屿阅读 226评论 0 0