数据库设计的细节说明
来源:互联网 发布:程序员简历 markdown 编辑:程序博客网 时间:2024/05/20 06:57
索引
索引是一种数据库用于提高SELECT查询效率的特殊体制。虽然表的最大索引数可能会有各种限制,但MySQL至少能保证为每个表创建16个索引,每个索引可以最多包含15个列。
虽然索引提高了数据库的读取速度,但是减慢了对更改数据的查询(因为这些更改数据需要记录在索引中)。
适用范围
1、在查询的WHERE部分中频繁使用的列
2、在查询的ORDER BY部分中频繁使用的列
3、经常被用于JOIN连结点的列
非适用范围
1、允许为空的列
2、字段值的范围很有限的列
索引类型(4种)
1、INDEX:标准索引
2、UNIQUE:每一行对索引列具有唯一的值
3、FULLTEXT:用于执行FULLTEXT查找
4、PRIMARY KEY:一个特殊的UNIQUE索引,主键
语法
INDEX_TYPE index_name (columns)
补充
多列索引是多个列同时使用一个索引
MySQL使用KEY作为索引的同义词
表类型(存储引擎)
MyISAM
优点:处理SELECT和INSERT非常快。
缺点:不能处理事务。缺少行级的锁定,容易损坏并且在发生崩溃时数据容易丢失。
InnoDB(MySQL5.5.5版本之后默认的类型)
优点:可以使用事务,在处理UPDATE时表现良好。支持外键约束和行级锁定。
缺点:占用磁盘空间较大,不支持FULLTEXT索引。MySQL5.5.5版本之后默认的类型。
语法
CREATE TABLE tablename ( column1name COLUMNTYPE, column2name COLUMNTYPE;
SHOW ENGINES; //查看MySQL上的引擎
字符集
数据库使用的字符集必须和服务器端的脚本语言的字符集一样。
校对规则名字的后缀ci表示不区分大小写;cs表示区分大小写;bin表示二元校对规则;
语法
创建数据库时定义字符集和校对规则的语法
CREATE DATABASE name CHARACTER SET charset COLLATE collation;
修改通信编码的语法
CHARSET utf8;
创建表时定义字符集和校对规则的语法
CREATE TABLE name (
column definitions
) CHARACTER SET charset COLLATE collation;
创建列时定义字符集和校对规则的语法
CREATE TABLE name (
something TEXT CHARACTER SET charset COLLATE collation
…)
时区函数
UTC_DATE():返回UTC日期
UTC_TIME():返回当前的UTC时间
UTC_TIMESTAMP():返回当前的日期和时间
CONVERT_TZ(dt, from, to):将一个时间或日期从一个时区调整到另一个
外键约束
InnoDB类型表有一个其他存储引擎不支持的特性——应用外键的能力
外键约束设定了当约束被破坏发生时应该应用的规则,包括防止约束放生。
语法
创建外键约束的语法(只标识了关系)
FOREIGN KEY (item_name) REFERENCES table (column)
注:item_name是外键列、table(column)子句是约束该外键的父表列的引用
触发动作(5种)
1、RESTRICT:默认,不指定任何动作
2、NO ACTION:默认,不指定任何动作
3、SET DEFAULT
4、CASCADE:最有用的操作,如果删除父记录,也将删除那个以父ID作为外键的记录。由于只有InnoDB支持外键约束,所以两个表的类型都应该为InnoDB
5、SET NULL:删除父记录将导致子表中相应的外键被设置为NULL。如果表的该列被设置为NOT NULL,删除父记录将引发一个错误。
语法
ON DELETE action;
ON UPDATE action;
举例
CREATE TABLE accounts (
account_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 18 customer_id INT UNSIGNED NOT NULL,
type ENUM('Checking', 'Savings') NOT NULL,
balance DECIMAL(10,2) UNSIGNED NOT NULL DEFAULT 0.0,
PRIMARY KEY (account_id),
INDEX (customer_id),
FOREIGN KEY (customer_id) REFERENCES customers (customer_id) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE = INNODB;
- 数据库设计的细节说明
- 数据库设计必须考虑的细节
- DB---设计数据库的小细节(不断更新)
- 05.数据库设计原则的一些细节
- 数据库设计细节问题
- XML数据库的有关架构和细节说明
- [转帖]《高性能的数据库》第三讲 设计细节
- 《高性能的数据库》第三讲 设计细节
- 数据库设计与优化需要注意的细节
- 数据库设计范式说明
- 数据库的细节问题
- 关于数据库中存储信息分类的设计说明
- Activiti工作流数据库设计说明
- 设计应注意的细节
- 设计应注意的细节
- #R_example#R2DOCX的细节设计
- ios8的一些设计细节
- ios设计的神细节
- 关于shell排序
- 构造函数为什么不能是虚函数
- ngx_rbtree_t红黑树
- 利用getViewTreeObserver().addOnGlobalLayoutListener()获得一个视图的高度
- 基于xml类型的压缩数据流的android获取天气的方法
- 数据库设计的细节说明
- 11925 - Generating Permutations
- Android—开发自学历程(1)-Intent-第二个Activity
- hd1002
- hdu 5303 Delicious Apples (DP+枚举)
- socket绑定INADDR_ANY
- Java Type VS Hibernate Type
- 《Unix网络编程卷1-套接字联网API》第一个例子编译
- 省市区字典数组嵌套(UI版)