mysql建表说明

DROP TABLE IF EXISTS `user`;
CREATE TABLE user (
  id            BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT
  COMMENT '主键',
  username      VARCHAR(50)         NOT NULL DEFAULT ''
  COMMENT '用户名',
  username_type VARCHAR(20)         NOT NULL DEFAULT ''
  COMMENT '用户类型',
  user_password VARCHAR(50)         NOT NULL DEFAULT ''
  COMMENT '用户密码',
  create_time   TIMESTAMP           NOT NULL DEFAULT CURRENT_TIMESTAMP
  COMMENT '创建时间',
  update_time   TIMESTAMP           NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  COMMENT '更新时间',
  PRIMARY KEY (id),
  UNIQUE KEY idx_urn(username) USING BTREE
)
  ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COMMENT = '用户信息表';

上图一个典型的mysql 建表语句; 常识  设置 default默认值,以及not null 不能为空

  • CHAR 和  VARCHAR区别:

MySQL数据库char与varchar区别

  • DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 意为  默认值为当前时间,并且在update时按照        CURRENT_TIMESTAMP进行更新这一列;

 

  • MYSQL数据类型说明

MySQL数据类型

  • 数字类型
    • 整数: tinyint、smallint、mediumint、int、bigint
    • 浮点数: float、double、real、decimal
  • 日期和时间: date、time、datetime、timestamp、year
  • 字符串类型
    • 字符串: char、varchar
    • 文本: tinytext、text、mediumtext、longtext
  • 二进制(可用来存储图片、音乐等): tinyblob、blob、mediumblob、longblob

字符串类型

类型 单位 最大 特性
CHAR 字符 最大为255字符 存储定长,容易造成空间的浪费
VARCHAR 字符 可以超过255个字符 存储变长,节省存储空间
TEXT 字节 总大小为65535字节,约为64KB -
  • TEXT在MySQL内部大多存储格式为溢出页,效率不如CHAR
  • Mysql默认为utf-8,那么在英文模式下1个字符=1个字节,在中文模式下1个字符=3个字节。

数字类型

整形

type Storage Minumun Value Maximum Value
  (Bytes) (Signed/Unsigned) (Signed/Unsigned)
TINYINT 1 -128 127
    0 255
SMALLINT 2 -32768 32767
    0 65535
MEDIUMINT 3 -8388608 8388607
    0 16777215
INT 4 -2147483648 2147483647
    0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807
    0 18446744073709551615

浮点型

属性 存储空间 精度 精确性 说明
FLOAT(M, D) 4 bytes 单精度 非精确 单精度浮点型,m总个数,d小数位
DOUBLE(M, D) 8 bytes 双精度 比Float精度高 双精度浮点型,m总个数,d小数位
  • FLOAT容易造成精度丢失

定点数DECIMAL

  • 高精度的数据类型,常用来存储交易相关的数据
  • DECIMAL(M,N).M代表总精度,N代表小数点右侧的位数(标度)
  • 1 < M < 254, 0 < N < 60;
  • 存储空间变长

时间类型

类型 字节 精确性
DATE 三字节 2015-05-01 精确到年月日
TIME 三字节 11:12:00 精确到时分秒
DATETIME 八字节 2015-05-01 11::12:00 精确到年月日时分秒
TIMESTAMP   2015-05-01 11::12:00 精确到年月日时分秒
  • MySQL在5.6.4版本之后,TIMESTAMPDATETIME支持到微秒。
  • TIMESTAMP会根据系统时区进行转换,DATETIME则不会
  • 存储范围的区别
    • TIMESTAMP存储范围:1970-01-01 00::00:01 to 2038-01-19 03:14:07
    • DATETIME的存储范围:1000-01-01 00:00:00 to 9999-12-31 23:59:59
  • 一般使用TIMESTAMP国际化
  • 如存时间戳使用数字类型BIGINT

 

  • 对于 key索引的类型

mysql中key 、primary key 、unique key 与index区别

外键:mysql 外键(foreign key)的详解和实例

Mysql 下,外键设置: 
on delete rule: 
1、RESTRICT:约束 
    如果存在从数据,不允许删除主数据。 
2、NO ACTION 
    如果存在从数据,不允许删除主数据。 
3、CASCADE:级联 
    删除主数据,顺便也删掉从数据。 
4、SET NULL 
    删除主数据,从数据外键的值设为NULL。 

on update rule: 
1、RESTRICT:约束 
    修改主数据中被关联的Field,如果有该主数据有从数据,不允许修改。 
2、NO ACTION 
    修改主数据中被关联的Field,如果有该主数据有从数据,不允许修改。 
3、CASCADE 
    修改主数据中被关联的Field,如果有该主数据有从数据,顺便一起修改从数据的外键值。 
4、SET NULL 
    修改主数据中被关联的Field,如果有该主数据有从数据,从数据的外键值设为NULL。 
 

  • 索引key所使用的数据结构

MySQL里的索引类型主要有以下几种。

1. B-Tree索引

最常见的索引类型,基于B-Tree数据结构。B-Tree的基本思想是,所有值(被索引的列)都是排过序的,每个叶节点到跟节点距离相等。所以B-Tree适合用来查找某一范围内的数据,而且可以直接支持数据排序(ORDER BY)。但是当索引多列时,列的顺序特别重要,需要格外注意。InnoDB和MyISAM都支持B-Tree索引。InnoDB用的是一个变种B+Tree,而MyISAM为了节省空间对索引进行了压缩,从而牺牲了性能。

2. Hash索引

基于hash表。所以这种索引只支持精确查找,不支持范围查找,不支持排序。这意味着范围查找或ORDER BY都要依赖server层的额外工作。目前只有Memory引擎支持显式的hash索引(但是它的hash是nonunique的,冲突太多时也会影响查找性能)。Memory引擎默认的索引类型即是Hash索引,虽然它也支持B-Tree索引。

例子:

CREATE TABLE testhash (
    fname VARCHAR(50) NOT NULL,
    lname VARCHAR(50) NOT NULL,
    KEY USING HASH(fname)
) ENGINE =MEMORY;

3. Spatial (R-Tree)(空间)索引

只有MyISAM引擎支持,并且支持的不好。可以忽略。

4. Full-text索引

主要用来查找文本中的关键字,而不是直接与索引中的值相比较。Full-text索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的WHERE语句的参数匹配。你可以对某列分别进行full-text索引和B-Tree索引,两者互不冲突。Full-text索引配合MATCH AGAINST操作使用,而不是一般的WHERE语句加LIKE。

你可能感兴趣的:(数据库)