存储引擎,详细建表语句,数据类型,约束

引擎指的是一个系统的核心部分引擎有不同分类是为了适应不同的使用场景查看mysql支持的所有引擎show engines

MRG_MYISAM 是一堆MYISAM表的集合    用于做水平分表,如果一个表中数据量太大 将导致效率降低    水平分表就是把整个大表拆成不同的小表,每一次查询会先判断数据在哪一个表中 然后对应去查找 以此来提高效率垂直分表    当一个表中 字段太多 然而常用的信息就那么一两个 那就可以把不常用字段切到另一个表中 然后建立关联关系

innodb 是最最常用的引擎 因为支持 事务 行锁 外键一系列功能....

MyISAM 没有上述功能 但是存储效率比innodb高 并且支持分表

MEMORY 速度快 不能永久存储 没有特别的功能

详细建表语句    []表示可选    create table 名称(字段 类型[(宽度) 约束条件],字段 类型....)数据类型    为什么要给数据分类?    1.不同的数据类型 描述信息可以更加方便准确    2.在计算机中对数据分类 可以减少内存开销

1.数字    整型        tinyint 1个字节    8个二进制 0-255 -128 - 127        smallint 2个字节        mediumint 3个字节        int 4个字节        bigint 8个字节        设置为无符号需要在类型后添加unsigned            create table t8(a tinyint unsigned)

        宽度在整型数据中 不是用来设置可存储的数据范围的        用于控制最小显示长度(字符数) 如果长度不足 需要帮你补0 但是需要自定zerofill        create table t12(a tinyint(5) zerofill);        结论是:使用整型数据 宽度这个属性一般不用管他

浮点型    float 4个字节        float(a,b)

    double 8个字节        double(a,b)    decimal 不固定        decimal(a,b)    a代表总位数 b表示小数位数    5,3 最大值99.999

    共同点:小数位最大为30          float与double 总长为255          都是不精确的 double比float精确点    不同点:          decimal总长为65 并且是精确的2.字符串   char固定长度 和varchar可变长   char(L) varchar(L)   L都是表示最大可存储的长度 不是字节   a char(4) b varchar(4)   a:S 最终还是占4个字符长度   b:S 最终占1个字符长度+标识信息的长度(1-2字节)   S   S   S   如果有三个数据姚村 每个数据都是一个s字符 最终3*4=12个字符长度   占用空间较多 存取速度较快   varchar 存储时必须保存一个长度标识信息 所有所占空间为实际内容长度+标识信息长度   相比较char 空间节省了 但是效率降低了

   char 采取的空间换时间 提高效率   字符串类型的BUG 由于char类型是定长 mysql会在末尾填充空格来表达定长的效果   所以char类型 不能存储末尾带有空格的数据 会直接把空格去了

严格模式    5.7以下版本 默认是非严格模式的 例如你的类型为tinyint 存储的是128 最终存储的是127    set global sql_mode=‘strict_trans_tables‘ 可以将其设置为严格模式    最好写到配置文件中 永久有效

固定长度的字符串类型tinytext 1字节text 2字节mediumtext 3字节longtext 4字节

二进制数据类型binary varbinarybinary是固定长度的二进制varbinary 可变长的二进制

长度固定无法修改的二进制tinyblobblobmediumbloblongblob

二进制数据类型 一般不用 如果要存储多媒体文件 如音频 视频需要将其放到FTP文件服务器上 然后数据库中只存储连接即可

00-69==2000-206970-99==1970-1999时间类型    year  4位年份    date  日期 yyyy-MMM-DD    time  时间 HH:mm:ss    datetime  yyy-MM-DD HH:mm:SS    timestamp 时间戳 一个浮点类型 从unix元年到现在的秒数

    year 可以是数字也可以是字符串可以用四位字符串 也可以两位字符串 或者数字00-69==2044-206970-99==1970-1990甭管什么时间类型 照着标准格式字符串写 就行timestamp会自动更新时间 当你插入新数据或修改时current_time 和now()所有的时间 日期类型 都可以使用这两个方法来输入当前时间所有的日期时间 数据库返回的都是字符串类型

枚举enum 提前规定该字段能选的值的范围 多选1set 提前规定该字段能选的值的范围 区别是 set字段 可以有多个值 用逗号隔开 多选多

数据库范式    就是知道你如何设计数据库

只要保证数据足够保存情况下 选用占用空间最小的类型

约束    完整的建表语句    create table 名称(字段 类型[(宽度) 约束条件],字段 类型....)    约束 是指给数据的值加上一些限制

    类型就是一种限制 宽度对于整型数据 没有存储限制    其他类型的宽度是有限制作用的    约束就是除了 数据类型以及宽度之外的其他限制    unsigned就是约束中的一种 表示你的整数 仅针对数字 不能包含符号

约束 是为了保证数据的完整性完整性约束

not null 非空    限制该字段 必须有值default 默认值    例如 多数用户都是男的 游戏账号的金币可以默认    1.建表直接指定    create table t(name char(10) not null default 默认值);    2. 后期增加    alter table t name char(10) not null default

unique 唯一性约束 并且是一个索引    要求该字段的值 不能重复    多字段联合唯一约束    姓名和校区两个字段 如果两个校区有相同的姓名 这时候就可以把这两个字段作为联合唯一索引

primary key 主键约束    从约束角度来看 和非空+唯一 是相同的效果    不能为空且不能重复    需要强调的是:        主键除了有约束效果 还是一个索引 并且是非常重要的索引        在该innodb 主键是必不可少的        innodb组织数据结构是按照树形结构来组织的,该结构中必须有一个数据不能为空 且是唯一的        如果没有这样的数据  树形结构也就不存在    mysql在创建表的时候 会检测是否存在主键    如果没有 他就找一个具有非空且唯一约束的字段提升为主键    如果也没有这样的字段 mysql就创建一个隐藏字段作为主键

    索引 可以提高查询速度结论是只要你是用innodb引擎 你就应该建表时设置一个主键 通常主键字段叫做id    id有唯一标识的意思

索引就像是字典里的目录 用于快速定位到数据所在位置

自动增长主键在使用中 需要我们自己来维护 其正确性 你需要知道上一次写的是什么 然后找一个之前没有用过的主键mysql提高了自动增长的约束 可以帮你自动管理主键的值要求必须是整型 每次插入数据都会自动+1 程序中就不要在自己管理主键了

语法:create table table_name(id int primary key auto_increment);

insert into table_name values(null,‘jack‘);insert into table_name(name) values(‘jack‘);只要你创建一个表 就应该有主键 并且自动增长

foreign key 外键约束

原文地址:https://www.cnblogs.com/gengbinjia/p/10538237.html

时间: 2024-10-09 21:15:19

存储引擎,详细建表语句,数据类型,约束的相关文章

存储引擎,MySQL中的数据类型及约束

存储引擎,MySQL中的数据类型及约束 一.存储引擎 1.不同的数据应该有不同的处理机制 2.mysql存储引擎 ? Innodb:默认的存储引擎,查询速度叫myisam慢,但是更安全 ? myissam:mysql老版本用的存储引擎 ? memory:内存引擎(数据全部存在内存中) ? blackhole:无论存什么,都立马消失(黑洞) 数据库的增删改查已经介绍完毕,今天从表的详细操作开始讲解 二.创建表的完整语法 #语法: create table 表名( 字段名1 类型[(宽度) 约束条件

表操作--建表语句

表操作--建表语句 1.创建默认字符集库 下面已默认格式的字符集库 mysql> create database Ysolin; Query OK, 1 row affected (0.00 sec) mysql> show create database Ysolin\G *************************** 1. row *************************** Database: Ysolin Create Database: CREATE DATABAS

oracle的建表语句

oracle数据库的建表语句,具体语法如下: CREATE TABLE tablename (column_name datatype [null,not null], column_name datatype [null,not null], ...... [constraint] ) 语法说明: tablename:在数据库中需要创建的表的表名称,在同一个数据库中的表名称是不能重复的: column_name:创建的表的列名称,列名称在一个表中也是不能重复的: datatype:创建的表的列

Oracle 建表常用数据类型的详解

创建表时,必须为表的各个列指定数据类型.如果实际的数据与该列的数据类型不相匹配,则数据库会拒绝保存.如为学生指定出生日期为"1980-13-31". 在Oracle中,常见的数据类型有: 字符串:字符串分为定长类型char和变长类型varchar2. 数字:整数 number(整数位),小数 number(总长度,小数位),只写number,表示无限制. 日期:date类型,可以保存年月日时分秒. 问题:Oracle中为什么字符串类型为varchar2,它与varchar有什么关系?

DB2建表语句

db2 => create table test (name char(8) not null primary key,depid smallint,pay bigint) DB20000I SQL 命令成功完成. db2 => create table test1 (name char(8) not null primary key,depid smallint references department (depid),pay bigint) DB20000I SQL 命令成功完成. db

excel的宏与VBA实践——建表语句

不带分区版本:V1.0: Sub createTableDDL() '自动创建建表语句 '定义换行和TAB Ln = Chr(13) + Chr(10) TB = Chr(9) '定义脚本目录 Dim dir AS String dir = "C:\CREATE_TABLE_DDL" Set FSOE = CreateObject("Scripting.FileSystemObject") If FSOE.folderexists(dir) = False Then

根据javabean转换为mysql建表语句

一般上,我们会使用数据库表转换为javabean.dao.或是mapper,就叫逆向工程.做项目时一般也是先设计数据库,再进行系统开发,所以一般使用逆向工程. 但我这边由于工作临时的需要,需要将javabean转换为建表语句,于是上网搜了一下,大部分是做一个工具类进行bean解析输出SQL语句. 根据自身项目命名设计要求,简化一个例子如下,供参考 package com.util; import java.io.IOException; import java.lang.reflect.Fiel

如何在SQLyog查看建表语句

第一步:打开SQLyog,连接数据库,按[ctrl+T]新建一个查询窗口 第二步:在查询窗口中输入   以下查看建表语句: SHOW CREATE TABLE [表名称]; 比如我要查看hhh表            如图所示: 第三步:右击查询窗口,[执行查询].[执行查询] 第四步:以文字视图显示,如下图 原文地址:https://www.cnblogs.com/hzyhx/p/11079900.html

SQL 约束,事务,触发器,存储引擎,多表查询

SQL约束 SQL约束主要有以下几种: NOT NULL: 用于控制字段的内容一定不能为空(NULL). UNIQUE: 控件字段内容不能重复,一个表允许有多个 Unique 约束. PRIMARY KEY:也是用于控件字段内容不能重复,但它在一个表只允许出现一个. FOREIGN KEY: FOREIGN KEY 约束用于预防破坏表之间连接的动作,FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一. CHECK: 用于控制字段的值范围. DEFAULT