创建表:
create table[if not exists] 表名(字段1,字段2,......[索引1,索引2,......])[表选项1,表选项2......]
字段设定形式:
字段名 类型 [字段属性1 字段属性2 ......]
说明:
1. 字段名可以自己取;
2. 数据类型就是: int, tinyint, float, double, char(6), varchar(25), text, datetime...
3. 字段属性可以有多个(根据具体的需要),相互之间直接空格隔开,主要有如下几个:
auto_increment: 只用于整数类型,让该字段的值自动获得一个增长值.通常用于做一个表的第一个字段的设定,并且通常还当做主键(pinmary key);
pinmary key: 用于设定该字段为主键,此时该字段的值就可以"唯一确定"一行数据;
unique key: 设定该字段是"唯一的,不重复的"
not null: 用于设定该字段不能为空(null)
default: xx值用于设定该字段的默认值,此时insert没有给值的时候就使用该默认值
comment '字段说明文字'
索引
什么是索引?
索引是系统内部自动维护的隐藏的"数据表",它的作用是,可以极大地加快数据的查找速度!
这个隐藏的数据表,其中的数据是自动排好序的,其查找速度就是建立在这个基础上.
通常,所谓建立索引,其实是指定一个表的某些字段作为"索引数据字段"就可以了,形式为
索引类型(要建立索引字段名)
索引类型有如下几个:
普通索引: 形式: key(字段名)
含义: 就是一个索引而已,没有其他作用,只能加快查找速度.
唯一索引: 形式: unique key(字段名)
含义: 是一个索引,而且还可以设定其字段的值不能重复(唯一性)
主键索引: 形式: primary key(字段名)
含义: 是一个索引,而且还具有区分该表中的任何一行数据的作用(其实也是唯一性),它其实比唯一性索引多一点功能,唯一性可以为空,而主键不能为空.
全文索引: 形式: fulltext(字段名)
演示索引创建语法:
此时,该表中如果以id,user_name或email做条件进行查找,就会"很快".而以age做条件就会"很慢".
外键索引: 形式: foregin key(字段名) references 其他表(对应其他表中的字段名);
什么叫外键.
外键,就是指,这点某个表(tab1)某个字段(f1),它的数据的值,必须是在另一个表(tab2)中的某个字段(f2)中存在!
此时,插入xuesheng表中的数据时,banji_id字段的值,就不可以随便插入了,而是必须是banji表中的id字段所已经有的数据值,才可以插入.
演示数万级别的索引查找速度
约束
就是要求数据需要满足什么条件的一种"规定".
主要有如下几种约束:
主键约束: 形式 pinmary key(字段名)
含义: 使该设定字段的值可以用于"唯一缺点一行数据",其实就是"主键"的意思
唯一约束: 形式 unique key(字段名)
含义: 使该设定字段的值具有"唯一性",自然也是可区分的.
外键约束: 形式 foregin key(字段名) references 其他表名(对应其他表中的字段名)
含义: 使该设定字段的值,必须在设定的对应表中的对应字段中已经有该值.
非空约束: 形式 not null
检查约束: 形式 check(某种判断语句), 比如:
create table tab1(
age tinyint,
check (age>=0 and age < 100)
)
其实,主键约束,唯一约束,外键约束,只是"同一件事情的2个不同说法",他们同事也称为"主键约束"",唯一约束","外键约束".
表选项列表
表选项就是,创建一个表的时候,对该表的整体设定,主要有如下几个.
charset = 要使用的字符编码;
engine = 要使用的存储引擎(也叫表类型),
auto_increment = 设定当前表的自增长字段的初始值,默认是1
comment = '该表的一些说明文字'
说明:
1. 设定的字符编码是为了跟数据库设定的不一样,如果一样就不需要设定了,因为其会自动使用数据库级别的设定
2. engine(存储引擎)在代码层面,就是一个名词: InnoDB, MyIsam,BDB,archive,Memory.默认是InnoDB
什么叫存储引擎
存储引擎是将数据存储到硬盘的"机制".
不同的存储引擎,其实主要是从2个大的层面来设计存储机制:
1.尽可能快的速度
2.尽可能多的功能
选择不同的存储引擎,就是上述性能和功能的"权衡"
大体如下:
修改表
几点说明:
1.修改表,是指修改表的结构,正如创建表也是设定表的结构.
2.创建表能做的事,修改表几乎都能做,但很不推荐去修改表,而是应该在创建表的时候就基本确定表的结构.
3. 大体来说, 有:
3.1 可以对字段进行: 添加,删除,修改;
3.2 可以对索引进行:添加, 删除
4. 表的选项,通常"都是"修改,即使不写任何表选项,他们都有其默认值.
其他表的相关语句
显示当前数据库中的所有表 show tables;
显示某表的结构: desc 表名; 或: describe 表名.
显示某表的创建语句: show create table 表名;
重命名表: rename table 旧表名 to 新表名;
从已有表复制表结构: create table [if not exists] 新表名 like 原表名;
视图定义语句
类比,什么叫函数
就是一段代码,我把它封装起来,并给一个名字,以后,要使用(执行)该段代码,就方便了,用该函数名就可以了.
视图: 就是一个select语句(通常比较复杂),我们给其一个名字,以后,要使用(执行)该select语句,就方便了,用该名字就可以了
什么叫做'依赖'?
依赖,就是在一个表中,其中某个字段的值B可以由另一个字段的值A来"决定",则此时我们就称为:
字段B依赖于字段A,
或: 字段A决定字段B
其一是是,如果根据字段A的某个值,一定可以找出一个确定的字段B的值,就是A决定B.对一个有主键的值,则其他字段肯定都确定了.也可以这样说,主键决定了其他字段,其他字段依赖于主键.
什么叫做部分'依赖'
如果某个字段,只依赖于部分主键字段,此时就称为部分依赖.--发生此情况的前提一定是: 主键字段有多个!!!
什么叫完全依赖:
就是某个字段,是依赖于"主键的所有字段".
--推论: 如果一个表的主键只有一个字段,则此时必然是完全依赖.
第三范式
消除传递依赖
使每个字段都独立地依赖于主键字段(独立性)
通常 ,在设计表的时候,基本你只要遵循这样一个远侧,就可以满足前述3范式要求:
每一种数据,使用一个表来存储
网友评论