数据库篇-mysql详解( 三 )之数据类型详解

一 : 数值类型

(1) 整数型

考虑到节省磁盘空间问题,将整形细分成了5类

  • Tinyine

迷你型,使用一个字节存储,最多状态为256种

  • Smallint

小整型,使用2个字节存储,表示的状态最多为65536种

  • Mediumint

中整型, 使用3个字节存储

  • Int

标准整型, 使用4个字节存储(常用)

  • Bigint

大整型,使用8个字节存储

整数型操作注意 :

创建一张表备用

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| int_1 | tinyint(4)  | YES  |     | NULL    |       |
| int_2 | smallint(6) | YES  |     | NULL    |       |
| int_3 | int(11)     | YES  |     | NULL    |       |
| int_4 | bigint(20)  | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

① :
SQL中的数值类型全部默认都是有符号的:分正负
但是我们存储的数据并没有负数的时候,要使用无符号需要给数据类型限定->int unsigned ;
给表添加一个无符号的字段

alter table my_int add int_5 tinyint unsigned; 
+-------+---------------------+------+-----+---------+-------+
| Field | Type                | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| int_1 | tinyint(4)          | YES  |     | NULL    |       |
| int_2 | smallint(6)         | YES  |     | NULL    |       |
| int_3 | int(11)             | YES  |     | NULL    |       |
| int_4 | bigint(20)          | YES  |     | NULL    |       |
| int_5 | tinyint(3) unsigned | YES  |     | NULL    |       |
+-------+---------------------+------+-----+---------+-------+

② :
显示宽度: 没有特别的含义, 只是默认的告诉用户可以显示的形式而已: 用户是可以控制的,这种控制不会改变数据本身的大小.
显示宽度的意义: 在于当数据不够显示宽度的时候,会自动让数据变成对应的显示宽度: 通常需要搭配一个前导0来增加宽度, 不改变值大小: zerofill(零填充): 零填充会导致数值自动变成无符号

我们增加一个字段,指定显示宽度为1

alter table my_int add int_6 tinyint(1) unsigned;-- 

再添加一条数据

insert into my_int values(127,0,0,0,255,255);

我们来添加一0填充的字段,显示宽度为3

alter table my_int add int_7 tinyint(3) zerofill;

再添加一条数据

insert into my_int values(1,1,1,1,1,1,1);
+-------+-------+-------+-------+-------+-------+-------+
| int_1 | int_2 | int_3 | int_4 | int_5 | int_6 | int_7 |
+-------+-------+-------+-------+-------+-------+-------+
|   127 |     0 |     0 |     0 |   255 |   255 |  NULL |
|     1 |     1 |     1 |     1 |     1 |     1 |   001 |
+-------+-------+-------+-------+-------+-------+-------+

此时查看一下表结构

+-------+------------------------------+------+-----+---------+-------+
| Field | Type                         | Null | Key | Default | Extra |
+-------+------------------------------+------+-----+---------+-------+
| int_1 | tinyint(4)                   | YES  |     | NULL    |       |
| int_2 | smallint(6)                  | YES  |     | NULL    |       |
| int_3 | int(11)                      | YES  |     | NULL    |       |
| int_4 | bigint(20)                   | YES  |     | NULL    |       |
| int_5 | tinyint(3) unsigned          | YES  |     | NULL    |       |
| int_6 | tinyint(1) unsigned          | YES  |     | NULL    |       |
| int_7 | tinyint(3) unsigned zerofill | YES  |     | NULL    |       |
+-------+------------------------------+------+-----+---------+-------+

零填充的意义(显示宽度): 保证数据格式,比如前段下拉列表会处理统一显示格式统一的数据.

(2)小数型

小数型: 带有小数点或者范围超出整型的数值类型.

  • 浮点型

小数点浮动, 精度有限,超出指定范围之后, 会丢失精度(自动四舍五入)
Float: 单精度, 占用4个字节存储数据, 精度范围大概为7位左右
Double: 双精度,占用8个字节存储数据, 精度方位大概为15位左右

浮点型操作注意 :

① :
创建浮点数表: 浮点的使用方式: 直接float表示没有小数部分; float(M,D): M代表总长度,D代表小数部分长度, 整数部分长度为M-D
创建一张表,10位在精度范围之外,6位在精度范围之内

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| f1    | float       | YES  |     | NULL    |       |
| f2    | float(10,2) | YES  |     | NULL    |       |
| f3    | float(6,2)  | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

插入四条数据,插入小数可以直接写,也可以是科学计数法

insert into my_float values(1000.10,1000.10,1000.10); -- 符合条件
insert into my_float values(1234567890,12345678.90,1234.56); -- 符合条件
insert into my_float values(3e38,3.01e7,1234.56); -- 科学计数法
insert into my_float values(9999999999,99999999.99,9999.99); -- 最大值

观察一下表

+-------------+--------------+---------+
| f1          | f2           | f3      |
+-------------+--------------+---------+
|      1000.1 |      1000.10 | 1000.10 |
|  1234570000 |  12345679.00 | 1234.56 |
|        3e38 |  30100000.00 | 1234.56 |
| 10000000000 | 100000000.00 | 9999.99 |
+-------------+--------------+---------+

分析数据 :
第二条数据中f1保留了6位有效数字位1234570000, f2保留了8位有效数据后面四舍五入
第四条数据中f2保留了8位有效数字,四舍五入进位到时整数部分超出了 8 个的限制,这时候是系统原因导致的,所以是允许的.

结论: 浮点数在超出精度范围一定会四舍五入,浮点数如果是因为系统进位导致整数部分超出指定的长度,那么系统也会允许成立.

② : 我们现在插入两条不符合规范的数据
小数点超出限制 : 但是数据可以插入进去

insert into my_float values(123456,1234.123456768,123.9876543); 

看最后一条,小数部分还是插入进去了两位,超出部分丢弃啦

+-------------+--------------+---------+
| f1          | f2           | f3      |
+-------------+--------------+---------+
|      1000.1 |      1000.10 | 1000.10 |
|  1234570000 |  12345679.00 | 1234.56 |
|        3e38 |  30100000.00 | 1234.56 |
| 10000000000 | 100000000.00 | 9999.99 |
|      123456 |      1234.12 |  123.99 |
+-------------+--------------+---------+

整数部分超出限制 : 数据插入不进去

insert into my_float values(123456,1234.12,12345.56);   -- 整数部分超出
ERROR 1264 (22003): Out of range value for column 'f3' at row 1
mysql> 
  • 定点型

小数点固定, 精度固定, 不会丢失精度, 绝对的保证整数部分不会被四舍五入(不会丢失精度),小数部分有可能(理论小数部分也不会丢失精度)

定点型

创建定点型数据表

+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| f1    | float(10,2)   | YES  |     | NULL    |       |
| d1    | decimal(10,2) | YES  |     | NULL    |       |
+-------+---------------+------+-----+---------+-------+

定点型操作注意 :

①插入数据: 定点数的整数部分一定不能超出长度(进位不可以),小数部分的长度可以随意超出(系统自动四舍五入)

insert into my_decimal values(12345678.90,12345678.90); -- 有效数据
insert into my_decimal values(1234.123456,1234.1234356); -- 小数部分超出
+-------------+-------------+
| f1          | d1          |
+-------------+-------------+
| 12345679.00 | 12345678.90 |
|     1234.12 |     1234.12 |
+-------------+-------------+

②浮点数如果进位导致长度溢出没有问题,但是定点数不行

insert into my_decimal values(99999999.99,99999999.99); -- 没有问题
+--------------+-------------+
| f1           | d1          |
+--------------+-------------+
|  12345679.00 | 12345678.90 |
|      1234.12 |     1234.12 |
| 100000000.00 | 99999999.99 |
+--------------+-------------+

插入一条

insert into my_decimal values(99999999.99,99999999.999); -- 进位超出范围
ERROR 1264 (22003): Out of range value for column 'd1' at row 1

二 : 字符串类型


SQL中,将字符串类型分成了6类:char,varchar,text ,blob, enumset

(1) 定长字符串 char

磁盘(二维表)在定义结构的时候,就已经确定了最终数据的存储长度.
Char(L): L代表length, 可以存储的长度, 单位为字符, 最大长度值可以为255.通常用来存储定值,比如身份证号,邮箱,等等
Char(4): 在UTF8 环境下,需要4 * 3 = 12个字节

(2) 变长字符串varchar

在分配空间的时候, 按照最大的空间分配: 但是实际上最终用了多少,是根据具体的数据来确定.

varchar(L): L表示字符长度 理论长度是65536个字符, 但是会多处1到2个字节来确定存储的实际长度: 但是实际上如果长度超过255,既不用定长也不用变长, 使用文本字符串text

为什么12个字符因为假如L超过255则用两个字节记录长度,不超过的话则用1个字节记录长度.
Varchar(10): 的确存了10个汉字, utf8环境, 10 * 3 + 1 = 31(bytes)

定长与变长的存储实际空间(utf-8)

存储空间
如何选择定长与变长字符串

定长的空间比较浪费,但是存储效率高 : 如果数据基本上确定长度都一样,就使用定长,电话号码,身份证等.
变长的磁盘空间比较节省,效率相对略低,如果数据不能确定长度,如地址,姓名的.

(3)文本字符串

如果数据量非常大, 通常说超过255个字符就会使用文本字符串
文本字符串根据存储的数据的形式进行分类 : textblob
Text: 存储文字(二进制数据实际上都是存储路径)
Blob: 存储二进制数据(通常不用)

(4)枚举字符串

enum事先将所有可能出现的结果都设计好, 实际上存储的数据必须是规定好的数据中的一个.

创建了一个枚举表

create table my_enum(
gender enum('男','女','保密')
)charset utf8;
+--------+----------------------------+------+-----+---------+-------+
| Field  | Type                       | Null | Key | Default | Extra |
+--------+----------------------------+------+-----+---------+-------+
| gender | enum('男','女','保密')     | YES  |     | NULL    |       |
+--------+----------------------------+------+-----+---------+-------+

枚举作用之一 : 规范数据格式: 数据只能是规定的数据中的其中一个

insert into my_enum values('男'),('保密'); -- 有效数据
+--------+
| gender |
+--------+
| 男     |
| 保密   |
+--------+

添加错误数据 : 错误,没有该元素

insert into my_enum values('male'); 
ERROR 1265 (01000): Data truncated for column 'gender' at row 1

枚举作用之二 : 节省存储空间(枚举通常有一个别名: 单选框): 枚举实际存储的是数值而不是字符串本身.

证明字段存储的数据是数值: 将数据取出来 + 0 就可以判断出原来的数据存的到底是字符串还是数值: 如果是字符串最终结果永远为0, 否则就是其他值.

+------------+--------+
| gender + 0 | gender |
+------------+--------+
|          1 | 男     |
|          3 | 保密   |
+------------+--------+

找出了枚举元素的实际规律: 按照元素出现的顺序, 从1开始编号

枚举原理:

枚举在进行数据规范的时候(定义的时候),系统会自动建立一个数字与枚举元素的对应关系(关系放到日志中): 然后在进行数据插入的时候,系统自动将字符转换成对应的数字存储, 然后在进行数据提取的时候, 系统自动将数值转换成对应的字符串显示.

因为枚举实际存储的是数值,所以可以直接插入数值.

insert into my_enum values(1),(2);
+----------+--------+
| gender+0 | gender |
+----------+--------+
|        1 | 男     |
|        3 | 保密   |
|        1 | 男     |
|        2 | 女     |

(5)集合字符串

集合跟枚举很类似: 实际存储的是数值,而不是字符串(集合是多选)
集合使用方式:
定义: Set(元素列表)
使用: 可以使用元素列表中的元素(多个), 使用逗号分隔

创建集合表
create table my_set(
hobby set('篮球','足球','乒乓球','羽毛球','排球','台球','网球','棒球')
)charset utf8;
+-------+------------------------------------------------------------------------------------+------+-----+---------+-------+
| Field | Type                                                                               | Null | Key | Default | Extra |
+-------+------------------------------------------------------------------------------------+------+-----+---------+-------+
| hobby | set('篮球','足球','乒乓球','羽毛球','排球','台球','网球','棒球')                   | YES  |     | NULL    |       |
+-------+------------------------------------------------------------------------------------+------+-----+---------+-------+
插入数据

可以多个元素字符串组合,也可以直接插入数值

insert into my_set values('足球,台球,网球');
insert into my_set values(3); 
+----------------------+
| hobby                |
+----------------------+
| 足球,台球,网球       |
| 篮球,足球            |
+----------------------+

原理解析

集合中每一个元素都是对应一个对应二进制位

hobby set('篮球','足球','乒乓球','羽毛球','排球','台球','网球','棒球')
--         足球                     台球    网球
-- 集合中: 每一个元素都是对应一个二进制位,被选中为1,没有则为0: 最后反过来
--          0      1       0         0      0       1       1     0
-- 反过来    01100010 = 98

查看数据值

+---------+----------------------+
| hobby+0 | hobby                |
+---------+----------------------+
|      98 | 足球,台球,网球       |
|       3 | 篮球,足球            |
+---------+----------------------+

集合中元素的顺序没有关系: 最终系统都会去匹配顺序

insert into my_set values('网球,台球,足球');
+----------------------+
| hobby                |
+----------------------+
| 足球,台球,网球       |
| 篮球,足球            |
| 足球,台球,网球       |
+----------------------+

集合的强大在于能够规范数据和节省空间

三 : 时间日期类型

Datetime: 时间日期, 格式是YYYY-mm-dd HH:ii:ss,表示的范围是从1000到9999年,有0值: 0000-00-00 00:00:00
Date: 日期,就是datetime中的date部分
Time: 时间(段), 指定的某个区间之间, -时间到+时间
Timestamp: 时间戳, 并不是时间戳,只是从1970年开始的YYYY-mm-dd HH:ii:ss格式与datetime完全一致
Year: 年份,两种形式, year(2)和year(4): 1901-2156

创建时间日期表

-- 创建时间日期表
create table my_date(
d1 datetime,
d2 date,
d3 time,
d4 timestamp,
d5 year
)charset utf8;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type      | Null | Key | Default           | Extra                       |
+-------+-----------+------+-----+-------------------+-----------------------------+
| d1    | datetime  | YES  |     | NULL              |                             |
| d2    | date      | YES  |     | NULL              |                             |
| d3    | time      | YES  |     | NULL              |                             |
| d4    | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| d5    | year(4)   | YES  |     | NULL              |                             |
+-------+-----------+------+-----+-------------------+-----------------------------+

插入数据:

① 时间time可以是负数,而且可以是很大的负数, year可以使用2位数插入,也可以使用4位数

insert into my_date values('2018-9-28 11:50:36','2018-9-28','11:50:54','2018-9-28 11:51:08',2018);
+---------------------+------------+----------+---------------------+------+
| d1                  | d2         | d3       | d4                  | d5   |
+---------------------+------------+----------+---------------------+------+
| 2018-09-28 11:50:36 | 2018-09-28 | 11:50:54 | 2018-09-28 11:51:08 | 2018 |
+---------------------+------------+----------+---------------------+------+

②时间使用负数


insert into my_date values('2015-9-28 11:50:36','2015-9-28','-11:50:54','2015-9-28 11:51:08',2015);
insert into my_date values('2015-9-28 11:50:36','2015-9-28','-211:50:54','2015-9-28 11:51:08',2015);
insert into my_date values('2015-9-28 11:50:36','2015-9-28','-2 11:50:54','2015-9-28 11:51:08',2015); -- -2过去2天:48
+---------------------+------------+------------+---------------------+------+
| d1                  | d2         | d3         | d4                  | d5   |
+---------------------+------------+------------+---------------------+------+
| 2015-09-28 11:50:36 | 2015-09-28 | 11:50:54   | 2015-09-28 11:51:08 | 2015 |
| 2015-09-28 11:50:36 | 2015-09-28 | -11:50:54  | 2015-09-28 11:51:08 | 2015 |
| 2015-09-28 11:50:36 | 2015-09-28 | -211:50:54 | 2015-09-28 11:51:08 | 2015 |
| 2015-09-28 11:50:36 | 2015-09-28 | -59:50:54  | 2015-09-28 11:51:08 | 2015 |
+---------------------+------------+------------+---------------------+------+

③ year可以使用2位或者4位

insert into my_date values('2015-9-28 11:50:36','2015-9-28','11:50:54','2015-9-28 11:51:08',69);
insert into my_date values('2015-9-28 11:50:36','2015-9-28','11:50:54','2015-9-28 11:51:08',70);
+---------------------+------------+------------+---------------------+------+
| d1                  | d2         | d3         | d4                  | d5   |
+---------------------+------------+------------+---------------------+------+
| 2015-09-28 11:50:36 | 2015-09-28 | 11:50:54   | 2015-09-28 11:51:08 | 2015 |
| 2015-09-28 11:50:36 | 2015-09-28 | -11:50:54  | 2015-09-28 11:51:08 | 2015 |
| 2015-09-28 11:50:36 | 2015-09-28 | -211:50:54 | 2015-09-28 11:51:08 | 2015 |
| 2015-09-28 11:50:36 | 2015-09-28 | -59:50:54  | 2015-09-28 11:51:08 | 2015 |
| 2015-09-28 11:50:36 | 2015-09-28 | 11:50:54   | 2015-09-28 11:51:08 | 2069 |
| 2015-09-28 11:50:36 | 2015-09-28 | 11:50:54   | 2015-09-28 11:51:08 | 1970 |
+---------------------+------------+------------+---------------------+------+

④比较常用Timestamp字段: 只要当前所在的记录被更新, 该字段一定会自动更新成当前时间

update my_date set d1 = '2015-9-28 11:55:45' where d5 = 2069;
+---------------------+------------+------------+---------------------+------+
| d1                  | d2         | d3         | d4                  | d5   |
+---------------------+------------+------------+---------------------+------+
| 2015-09-28 11:50:36 | 2015-09-28 | 11:50:54   | 2015-09-28 11:51:08 | 2015 |
| 2015-09-28 11:50:36 | 2015-09-28 | -11:50:54  | 2015-09-28 11:51:08 | 2015 |
| 2015-09-28 11:50:36 | 2015-09-28 | -211:50:54 | 2015-09-28 11:51:08 | 2015 |
| 2015-09-28 11:50:36 | 2015-09-28 | -59:50:54  | 2015-09-28 11:51:08 | 2015 |
| 2015-09-28 11:55:45 | 2015-09-28 | 11:50:54   | 2018-10-18 18:18:55 | 2069 |
| 2015-09-28 11:50:36 | 2015-09-28 | 11:50:54   | 2015-09-28 11:51:08 | 1970 |

四 : Mysql记录长度

Mysql中规定: 任何一条记录最长不能超过65535个字节.(varchar永远达不到理论值)
Varchar的实际存储长度: 看字符集编码,
UTF-8 : vachar实际顶配21844字符
GBK : varchar实际顶配32766字符

推算方法 :
UTF-8 : 21844 * 3 +2 = 65534
GBK : 32766 * 2 + 2 = 65534
想用一个完整的65535个字节长度 : 增加一个tinyint字段即可

Mysql记录中: 如果有任何一个字段允许为空,那么系统会自动从整个记录中保留一个字节来存储NULL(若想释放NULL所占用的字节: 必须保证所有的字段都不允许为空)

create table my_utf82(
age tinyint not null,       -- 1
name varchar(21844) not null -- 21844 * 3 + 2 = 65532 + 2 = 65534
)charset utf8;

create table my_gbk2(
age tinyint not null,       -- 1    
name varchar(32766) not null -- 32766 * 2 + 2 = 65532 + 2 = 65534
)charset gbk;

Mysql中text文本字符串,不占用记录长度: 额外存储. 但是text文本字符串也是属于记录的一部分: 一定需要占据记录中的部分长度: 10个字节(保存数据的地址以及长度)
证明 text用10个字节保存数据的地址以及长度

-- text占用十个字节长度
create table my_text(
name varchar(21841) not null, -- 21841 * 3 + 2 = 65523 + 2 = 65525
content text not null         -- 10     
)charset utf8;

五 : 列属性

列属性: 真正约束字段的是数据类型, 但是数据类型的约束很单一. 需要有一些额外的约束, 来更加保证数据的合法性.

列属性有很多: NULL/NOT NULL, default, Primary key, unique key, auto_increment,comment

(1)空属性

两个值: NULL(默认的)和NOT NULL(不为空)
虽然默认的, 数据库基本都是字段为空, 但是实际上在真实开发的时候, 尽可能的要保证所有的数据都不应该为空: 空数据没有意义; 空数据没有办法参与运算.
与null参与运算结果还是null.

创建表

-- 创建班级表
create table my_class(
name varchar(20) not null,
room varchar(20) null -- 代表允许为空: 不写默认就是允许为空
)charset utf8;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(20) | NO   |     | NULL    |       |
| room  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

(2)列描述

列描述: comment, 描述, 没有实际含义: 是专门用来描述字段,会根据表创建语句保存: 用来给程序员(数据库管理员)来进行了解的.

-- 创建表
create table my_teacher(
name varchar(20) not null comment '姓名',
money decimal(10,2) not null comment '工资'
)charset utf8;

show create table my_teacher

+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table      | Create Table                                                                                                                                                       |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| my_teacher | CREATE TABLE `my_teacher` (
  `name` varchar(20) NOT NULL COMMENT '姓名',
  `money` decimal(10,2) NOT NULL COMMENT '工资'
) ENGINE=InnoDB DEFAULT CHARSET=utf8     |
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------+

(3)默认值

默认值: 某一种数据会经常性的出现某个具体的值, 可以在一开始就指定好: 在需要真实数据的时候,用户可以选择性的使用默认值.

创建表

create table my_default(
name varchar(20) not null,
age tinyint unsigned default 0,
gender enum('男','女','保密') default '男'
)charset utf8;

默认值的生效: 使用, 在数据进行插入的时候,不给该字段赋值

insert into my_default (name) values('侯龙涛');
+-----------+------+--------+
| name      | age  | gender |
+-----------+------+--------+
| 侯龙涛    |    0 | 男     |
+-----------+------+--------+

想要使用默认值,可以不一定去指定列表,故意不使用字段列表: 可以使用default关键字代替值

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

推荐阅读更多精彩内容

  • 回顾 数据库基础知识:关系型数据库(磁盘)和非关系型数据库(内存) 关系型数据库:建立在关系模型上的数据库数据结构...
    翊溪阅读 524评论 0 1
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,914评论 2 89
  • MySQL数据库对象与应用 2.1-MySQL数据类型 库建立好之后基本不动,和我们接触最频繁的是表. 建表就是声...
    极客圈阅读 2,136评论 0 8
  • 有一种朋友不在生活圈, 却在生命里; 有一种陪伴不在身边, 却在心间。 朋友圈里 你的行踪或心语, 偶尔回复一下,...
    新眸阅读 314评论 0 0
  • 晨起寒风扑面冷 瘦草枯枝片地残 故人一别近三秋 春去冬来景仍旧
    秋的感觉阅读 151评论 1 1