mySQL学习记录

基础知识:

数据库:存储数据的仓库,本质是一个文件系统,数据库按照特定的格式将数据存储起来。
常用数据库:MySQL、Oracle

  • MySQL:开源免费的数据库,小型的数据库已经被Oracle收购了。
  • Oracle:收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MySQL。
  • DB2:IBM公司的数据库产品,收费的。常用在银行系统。
  • SQL server:Microsoft公司收费的中型的数据库。c#、.net等语言常使用。
  • SyBase:已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。
  • SQLite:嵌入式的小型数据库,应用在手机端。

数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。

数据库整体示意图

MySQL安装成功后,数据库中会存在一些默认数据库,是默认生成的,不要去删除,删除后无法找回。

什么是SQL:结构化查询语言(Structured Query Language),简称SQL, SQL语句就是对数据库进行操作的一种语言。
SQL是数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。

sql

SQL通用语法(规范)

  • SQL语句可以单行或多行书写,以分号结尾。
  • 可使用空格和缩进来增强语句的可读性。(多个空格和缩进也可以)
  • MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。 SELECT * FROM student; ---底层对于关键字会转换成大写。

SQL比较运算符

>大于
<小于
<=小于等于
>=大于等于
=等于
<>、!=不等于

MySQL数据库约束:

主键约束
唯一约束
非空约束

SQL逻辑运算符

and 多个条件同时满足
or 多个条件其中一个满足
not 不满足

MySQL数据类型:

类型 描述
int 整型(默认11个长度)
double 浮点型
varchar 字符串型
data 日期类型:yyyy-MM-dd

详细的数据类型如下(不建议详细阅读!)

分类 类型名称 说明
整数类型 tinyInt 很小的整数
  smallint 小的整数
  mediumint 中等大小的整数
  int(integer) 普通大小的整数
小数类型 float 单精度浮点数
  double 双精度浮点数
  decimal(m,d) 压缩严格的定点数
日期类型 year YYYY 1901~2155
  time HH:MM:SS -838:59:59~838:59:59
  date YYYY-MM-DD 1000-01-01~9999-12-3
  datetime YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59
  timestamp YYYY-MM-DD HH:MM:SS 19700101 00:00:01 UTC~2038-01-19 03:14:07UTC
文本、二进制类型 CHAR(M) M为0~255之间的整数 --适合存储性别等已知长度且稳定的数据
  VARCHAR(M) M为0~65535之间的整数 (没有默认的长度值)
  TINYBLOB 允许长度0~255字节
  BLOB 允许长度0~65535字节
  MEDIUMBLOB 允许长度0~167772150字节
  LONGBLOB 允许长度0~4294967295字节
  TINYTEXT 允许长度0~255字节
  TEXT 允许长度0~65535字节
  MEDIUMTEXT 允许长度0~167772150字节
  LONGTEXT 允许长度0~4294967295字节
  VARBINARY(M) 允许长度0~M个字节的变长字节字符串
  BINARY(M) 允许长度0~M个字节的定长字节字符串

基础常用语句:

创建db2数据库,并使用:

CREATE DATABASE db2; 
USE db2;

库:

CREATE DATABASE 数据库名;   //创建数据库  
SHOW DATABASES;             //查看所有数据库
SELECT DATABASE();       //查看正在使用的数据库
USE 数据库名;        //使用/切换数据库
SHOW CREATE DATABASE 数据库名;          //查看指定数据库的定义信息
DROP DATABASE 数据库名;   //删除数据库
image.png

表:

CREATE TABLE 新表名 LIKE 旧表名;    //快速创建一个表结构相同的表
CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2…);    //创建表
SHOW TABLES;   //查看此数据库下所有的表
DESC 表名;     //查看表结构
DROP TABLE 表名;  //删除表
DROP TABLE IF EXISTS 表名;   //判断表是否存在并删除表
SHOW CREATE TABLE 表名;          //查看指定表定义信息


RENAME TABLE 表名 TO 新表名;    //修改表名
ALTER TABLE 表名 DROP 列名;    //删除列 
INSERT INTO 表名 (字段名1, 字段名2, 字段名3…) VALUES (值1, 值2, 值3);   //插入数据


INSERT INTO 表名1 SELECT * FROM 表名2;   //将表名2中的数据复制到表名1中

//如果只想复制student表中name,age字段数据到student2表中使用如下格式
INSERT INTO student2(name,age) SELECT name,age FROM student;

//不带条件修改数据
UPDATE 表名 SET 字段名=值;   
UPDATE student SET sex='女';

//带条件修改数据: 
UPDATE 表名 SET 字段名=值 WHERE 字段名=值;
UPDATE student SET sex='男' WHERE id=2;

//一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京
UPDATE student SET age=26, address='北京' WHERE id=3;

//带条件删除数据,删除id为3的记录
DELETE FROM student WHERE id=3;

查:

SELECT * FROM student;
SELECT id,name,age,sex,address,phone,birthday,math,english FROM student;

//查询时给列、表指定别名需要使用AS关键字,  注意:AS可以省略不写  
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;


//查询指定列并且结果不出现重复数据: 
SELECT DISTINCT 字段名 FROM 表名;

//查询name,age列并且结果不出现重复name:   
SELECT DISTINCT NAME, age FROM student;

//查询math + english的和
SELECT math + english FROM student;

//查询math + english的和使用别名”总成绩”
SELECT math + english 总成绩 FROM student;

//查询所有列与math + english的和并使用别名”总成绩”
SELECT *, math + english 总成绩 FROM student;

其他语句:SQL标准中的Join的类型

  • 内连接 INNER
  • 全外连接 FULL OUTER
  • 左外连接 LEFT OUTER
  • 右外连接 RIGHT OUTER
  • 交叉连接 CROSS

inner join 用于将两张表(A和B表)的列组合在一起,产生新的结果表。

SQL语句分类:

1.DDL(Data Definition Language)数据定义语言

用来定义数据库对象:数据库,表,列等。关键字:create, drop(删除),alter(修改)等

2.DML(Data Manipulation Language)数据操作语言

用来对数据库中表的数据进行增删改。关键字:insert(增加), delete(删除), update(修改)等

3.DQL(Data Query Language)数据查询语言

用来查询数据库中表的记录(数据)。关键字:select, where等

4.DCL(Data Control Language)数据控制语言(了解)

用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE等

各种SQL语句用法:

1.DDL(Data Definition Language)语句,数据定义语言

1.1DDL语句操作数据库

1.1.1创建数据库

//1.1.1.1直接创建数据库
CREATE DATABASE 数据库名;   
CREATE DATABASE db1;

//1.1.1.2判断是否存在并创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名;
CREATE DATABASE IF NOT EXISTS db2;

//1.1.1.3创建数据库并指定字符集(编码表)  
//数据库安装的时候默认使用的是UTF形式(万国形式)的,gdk是TUF8的一个子集,属于中国的,包含大多数汉字。
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
CREATE DATABASE db3 CHARACTER SET gbk;

1.1.2修改数据库

//修改数据库字符集格式 
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;

//将db3数据库的字符集改成utf8
ALTER DATABASE db3 DEFAULT CHARACTER SET utf8;

1.1.3删除数据库

DROP DATABASE 数据库名;
DROP DATABASE db2;

1.1.4使用数据库

//1.1.4.1查看正在使用的数据库: 
SELECT DATABASE();

//1.1.4.2使用/切换数据库: 
USE 数据库名;
USE db1;
1.2DDL语句操作表 >前提先使用某个数据库

1.2.1创建表

CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2…);

CREATE TABLE 表名 (
字段名1 字段类型1, 
字段名2 字段类型2
);

//创建student表包含id,name,birthday字段
CREATE TABLE student (
      id INT,
      name VARCHAR(20),
      birthday DATE
);

1.2.2查看表

SHOW TABLES;

//查看表结构 
DESC 表名;

//查看创建表:
SHOW CREATE TABLE 表名;

//快速创建一个表结构相同的表
CREATE TABLE 新表名 LIKE 旧表名;

1.2.3删除表

//直接删除表:
DROP TABLE 表名;

//判断表是否存在并删除表:
DROP TABLE IF EXISTS 表名;

1.2.4修改表(修改表结构使用不是很频繁,只需要了解,等需要使用的时候再回来查即可)

//1.2.4.1添加表列:
ALTER TABLE 表名 ADD 列名 类型;
//为学生表添加一个新的字段remark,类型为varchar(20)
ALTER TABLE student ADD remark VARCHAR(20);   

//1.2.4.2修改列类型
ALTER TABLE 表名 MODIFY列名 新的类型;
//将student表中的remark字段的改成varchar(100)
ALTER TABLE student MODIFY remark VARCHAR(100);   

//1.2.4.3修改列名
 ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
//将student表中的remark字段名改成intro,类型varchar(30)
ALTER TABLE student CHANGE remark intro varchar(30);   

//1.2.4.4删除列
ALTER TABLE 表名 DROP 列名;
//删除student表中的字段intro
ALTER TABLE student DROP intro;   

//1.2.4.5修改表名
RENAME TABLE 表名 TO 新表名;
//将学生表student改名成student2
RENAME TABLE student TO student2; 

1.2.4.6修改字符集
ALTER TABLE 表名 character set 字符集;
 //将sutden2表的编码修改成gbk
ALTER TABLE student2 character set gbk; 

2.DML(Data Query Language)语句

INSERT INTO 表名          //表示往哪张表中添加数据
(字段名1, 字段名2, …)      //要给哪些字段设置值
VALUES (值1, 值2, …);     //设置具体的值

注意:
值与字段必须对应,个数相同,类型相同
值的数据大小必须在字段的长度范围内
除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
如果要插入空值,可以不写字段,或者插入null

2.1插入全部字段

//所有的字段名都写出来
INSERT INTO 表名 (字段名1, 字段名2, 字段名3…) VALUES (值1, 值2, 值3);

//向表中插入所有字段,所有的字段名都写出来
INSERT INTO student(id,name,age,sex,address,phone,birthday,math,english)values(2,'小美',18,'女','上海市','18888888888','2011-12-12',65.5,99.2);

//不写字段名
INSERT INTO 表名 VALUES (值1, 值2, 值3…);

2.2插入部分数据

//没有添加数据的字段会使用NULL
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
INSERT INTO student (id,name,age,sex,address)values(1,'张三',19,'男','北京市');

//不写字段名
INSERT INTO student values(3,'小明',27,'男','深圳市','13333333333','2000-11-06',95.5,92);
image.png

2.3蠕虫复制:在已有的数据基础之上,将原来的数据进行复制,插入到对应的表中

//将表名2中的数据复制到表名1中
INSERT INTO 表名1 SELECT * FROM 表名2;
//将student表中的数据添加到student2表中
INSERT INTO student SELECT * FROM student2;

//如果只想复制student表中name,age字段数据到student2表中使用如下格式
INSERT INTO student2(name,age) SELECT name,age FROM student;

2.4更新表记录

//不带条件修改数据
UPDATE 表名 SET 字段名=值;
//带条件修改数据
UPDATE 表名 SET 字段名=值 WHERE 字段名=值;

//不带条件修改数据,将所有的性别改成女
UPDATE student SET sex='女';
//带条件修改数据,将id号为2的学生性别改成男
UPDATE student SET sex='男' WHERE id=2;

//一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京
UPDATE student SET age=26, address='北京' WHERE id=3;

2.5删除表记录

//不带条件删除数据
DELETE FROM 表名;
//带条件删除数据
DELETE FROM 表名 WHERE 字段名=值;

//带条件删除数据,删除id为3的记录
DELETE FROM student WHERE id=3;
//不带条件删除数据,删除表中的所有数据
DELETE FROM student;

truncate删除表记录

 TRUNCATE TABLE 表名;

truncate和delete的区别
delete是将表中的数据一条一条删除
truncate是将整个表摧毁,重新创建一个新的表,新的表结构和原来表结构一模一样

3.DQL(Data Query Language)语句

3.1查询表所有数据

SELECT * FROM 表名;
SELECT * FROM student;

3.2查询指定列

SELECT 字段名1, 字段名2, 字段名3, ... FROM 表名;
SELECT id,name,age,sex,address,phone,birthday,math,english FROM student;

3.3别名查询

//查询时给列、表指定别名需要使用AS关键字
//使用别名的好处是方便观看和处理查询到的数据
//注意:AS可以省略不写
SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;

//查询sudent表中name 和 age 列,name列的别名为”姓名”,age列的别名为”年龄”:  
SELECT NAME AS 姓名, age AS 年龄 FROM student;

3.4清除重复值

//查询指定列并且结果不出现重复数据
SELECT DISTINCT 字段名 FROM 表名;
//查询name,age列并且结果不出现重复name:   
SELECT DISTINCT NAME, age FROM student;

3.5查询结果参与运算
参与运算的必须是数值类型

//某列数据和固定值运算:  
SELECT 列名1 + 固定值 FROM 表名;
//某列数据和其他列数据参与运算:  
SELECT 列名1 + 列名2 FROM 表名;

//查询math + english的和
SELECT math + english FROM student;
//查询math + english的和使用别名”总成绩”
SELECT math + english 总成绩 FROM student;

//查询所有列与math + english的和并使用别名”总成绩”
SELECT *, math + english 总成绩 FROM student;

查询姓名、年龄,将每个人的年龄增加10岁
SELECT name, age + 10 FROM student;
查询所有列与math + english的和并使用别名”总成绩”
查询姓名、年龄,将每个人的年龄增加10岁

3.6条件查询

//查询攻击大于350的英雄
SELECT * FROM hero where attack>350;
//查询不是热门的英雄 1:热门 0:非热门
SELECT * FROM hero WHERE is_hot<>1;   SELECT * FROM hero WHERE is_hot!=1;

3.7 逻辑查询

//查询id是1或3或5的英雄
SELECT * FROM hero WHERE id=1 OR id=3 OR id=5;

3.8 in关键字
in里面的每个数据都会作为一次条件,只要满足条件的就会显示

//语法格式
SELECT 字段名 FROM 表名 WHERE 字段 in (数据1, 数据2...);

//查询id是1或3或5的英雄
SELECT * FROM hero WHERE id in(1,3,5);
//查询id不是1或3或5的英雄
SELECT * FROM hero WHERE id not in(1,3,5);

3.9范围查询
BETWEEN 值1 AND 值2 表示从值1到值2范围,包头又包尾

//查询英雄上架日期大于等于2013-01-01小于等于2017-01-01之间的英雄
SELECT * FROM hero WHERE grounding_date BETWEEN '2013-01-01' AND '2017-01-01';
SELECT * FROM hero WHERE grounding_date >='2013-01-01'  AND grounding_date<='2017-01-01';

3.10模糊查询

MySQL通配符有两个:
%: 表示0个或多个字符(任意个字符)
_: 表示一个字符

//LIKE表示模糊查询
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';

//查询姓孙的英雄
SELECT * FROM hero WHERE name LIKE '孙%';

//查询姓名中包含’孙’字的英雄
SELECT * FROM hero WHERE name LIKE '%孙%';

//查询姓孙,且姓名有三个字的英雄
SELECT * FROM hero WHERE name LIKE '孙__';

3.11排序查询
通过ORDER BY子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)
ASC: 升序, 默认是升序
DESC: 降序

SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC];

单列排序
//查询年龄小于等于35岁的英雄,按照年龄升序排列
SELECT * FROM hero WHERE age<=35 ORDER BY age ASC;


组合排序:组合排序就是先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序,依次类推。
//查询年龄小于等于35岁的英雄,按照年龄升序排列,如果年龄相同按照生命的降序排列
SELECT * FROM hero WHERE age<=35 ORDER BY age ASC,life desc;

3.12聚合函数
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。另外聚合函数会忽略空值.
五个聚合函数:
count: 统计指定列记录数,记录为NULL的不统计
sum: 计算指定列的数值和,如果不是数值类型,那么计算结果为0
max: 计算指定列的最大值
min: 计算指定列的最小值
avg: 计算指定列的平均值,如果不是数值类型,那么计算结果为0
聚合函数的使用:写在 SQL语句SELECT后 字段名的地方

SELECT 字段名... FROM 表名;
SELECT COUNT(age) FROM 表名;

//查询英雄总数
SELECT COUNT(max_score) FROM hero  //我们发现对于NULL的记录不会统计

//只要使用全部字段作为衡量标准既不会有遗漏的错误统计出现
SELECT COUNT(*) FROM hero

//查询年龄大于40的总数
SELECT COUNT(*) FROM hero WHERE age>35;


//查询所用英雄的总评分
SELECT SUM(max_score) FROM hero

//查询英雄评分的平均分
SELECT AVG(max_score) FROM hero

查询英雄评分的最高分
SELECT MAX(max_score) FROM hero

3.13分组
分组查询是指使用 GROUP BY语句对查询信息进行分组,相同数据作为一组
GROUP BY怎么分组的?将分组字段结果中相同内容作为一组

SELECT 字段1,字段2... FROM 表名 GROUP BY 分组字段 [HAVING 条件];


//这句话会将sex相同的数据作为一组,但是会返回每组的第一条,没有任何意义
SELECT * FROM hero GROUP BY sex;

分组的目的就是为了统计,一般分组会跟聚合函数一起使用。
分组后聚合函数不是操作所有数据,而是操作一组数据。

SELECT SUM(life) FROM hero GROUP BY sex
image.png
//查询年龄大于25岁的人,按性别分组,统计每组的人数,并只显示性别人数大于2的数据
//并只显示性别人数>2的数据属于分组后的条件,对于分组后的条件需要使用having子句
SELECT sex,count(*) FROM hero WHERE age<30 GROUP BY sex HAVING COUNT(*)>2;

having与where的区别

  • having是在分组后对数据进行过滤.
  • where是在分组前对数据进行过滤
  • having后面可以使用聚合函数
  • where后面不可以使用聚合函数

3.4 LIMIT语句
LIMIT是限制的意思,所以LIMIT的作用就是限制查询记录的条数。
LIMIT语法格式:
LIMIT offset,length; 或者limit length;
offset是指偏移量,可以认为是跳过的记录数量,默认为0
length是指需要显示的总记录数

SELECT *|字段列表 [as 别名] FROM 表名 [WHERE子句] [GROUP BY子句][HAVING子句][ORDER BY子句][LIMIT子句];

//查询hero表中数据,从第三条开始显示,显示6条
SELECT * FROM student3 LIMIT 2,6;

LIMIT的使用场景:分页

每页显示5条
//-- 第一页: LIMIT 0,5;  跳过0条,显示5条 
//-- 第二页: LIMIT 5,5;  跳过5条,显示5条
//-- 第三页: LIMIT 10,5; 跳过10条,显示5条
SELECT * FROM hero LIMIT 0,5;
SELECT * FROM hero LIMIT 5,5;
SELECT * FROM hero LIMIT 10,5;

注意:
如果第一个参数是0可以简写:
SELECT * FROM student3 LIMIT 0,5;
SELECT * FROM student3 LIMIT 5;
LIMIT 10,5; – 不够5条,有多少显示多少

4.DCL语句

4.1

数据约束

对表中的数据进行进一步的限制,保证数据的正确性有效性完整性
约束种类:

  • PRIMARY KEY: 主键
  • UNIQUE: 唯一
  • NOT NULL: 非空
  • DEFAULT: 默认
  • FOREIGN KEY: 外键

1主键约束 PRIMARY KEY

1.1主键的特点

  • 主键必须包含唯一的值
  • 主键列不能包含NULL值

1.2主键的作用

用来唯一标识一条记录,每个表都应该有一个主键,并且每个表只能有一个主键。

1.3哪个字段应该作为表的主键?

通常不用业务字段作为主键,单独给每张表设计一个id的字段,把id作为主键。主键是给数据库和程序使用的,不是给最终的客户使用的。所以主键有没有含义没有关系,只要不重复,非空就行。

1.4创建主键:

在创建表的时候给字段添加主键
字段名 字段类型 PRIMARY KEY

//创建英雄表hero1, 包含字段(id, name, age)将id做为主键
CREATE TABLE hero1(
    id int PRIMARY Key,
    name varchar(20),
    age int);
主键

1.5删除主键:

ALTER TABLE 表名 DROP PRIMARY KEY;

//删除hero1表的主键
ALTER TABLE hero1 DROP PRIMARY KEY;
主键已删除

1.5自增主键:

主键如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值
AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)

创建英雄表hero2, 包含字段(id, name, age)将id做为主键并自动增长
CREATE TABLE hero2(
  id int PRIMARY Key AUTO_INCREMENT,
  name varchar(20),
  age int
);

默认地AUTO_INCREMENT 的开始值是1,如果希望修改起始值,请使用下列SQL语法:
ALTER TABLE 表名 AUTO_INCREMENT=起始值;

DELETE和TRUNCATE的区别
DELETE 删除表中的数据,但不重置AUTO_INCREMENT的值。
TRUNCATE 摧毁表,重建表,AUTO_INCREMENT重置为1

2唯一约束 UNIQUE

2.1唯一约束的特点

在这张表中这个字段的值不能重复

2.2 唯一约束的基本格式

字段名 字段类型 UNIQUE

2.3 创建唯一约束

//创建英雄表hero3, 包含字段(id, name),name这一列设置唯一约束,不能出现同名的英雄
CREATE TABLE hero3 (
  id INT,
  NAME VARCHAR(20) UNIQUE
);

3非空约束 NOT NULL

这个字段必须设置值,不能是NULL

3.1创建非空约束

字段名 字段类型 NOT NULL

//创建表英雄表hero4, 包含字段(id,name,gender)其中name不能为NULL
CREATE TABLE hero4 (
    id INT,
    NAME VARCHAR(20) NOT NULL,
    gender CHAR(2)
);

4默认值约束 DEFAULT

往表中添加数据时,如果不指定这个字段的数据,就使用默认值

3.1创建默认值约束

字段名 字段类型 DEFAULT 默认值

//创建一个英雄表 hero5,包含字段(id,name,location), 默认的定位是射手
CREATE TABLE hero5 (
    id INT,
    NAME VARCHAR(20),
    location VARCHAR(50) DEFAULT '射手'
);

//添加一条记录,使用默认值
INSERT INTO hero5 (id, NAME) VALUES (1, '后羿');


//添加一条记录,不使用默认地址
INSERT INTO hero5 VALUES (2, '兰陵王', '刺客');
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容