数据库事务: 是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。
char是一个定长字段,假如申请了char(10)的空间,那么无论实际存储多少内容.该字段都占用10个字符,而varchar是变长的,也就是说申请的只是最大长度,占用的空间为实际字符长度+1,最后一个字符存储使用了多长的空间。
在检索效率上来讲,char > varchar,因此在使用中,如果确定某个字段的值的长度,可以使用char,否则应该尽量使用varchar.
– in
select * from a where id in (select id from b);
– exists
select * from A where exists(select 1 from B where B.id = A.id);
使用in时,sql语句是先执行子查询,也就是先查询子表b,再查主表a。而使用exists是先查主表a ,再查询子表b。
根据小表驱动大表(即小的数据集驱动大的数据集)的原则,如果主查询中的表较大且又有索引时应该用in。 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。
还有一点注意的是用 exists 该子查询实际上并不返回任何数据,而是返回值True或False。
not in 和not exists
如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论哪个表更大,用not exists都比not in要快。
关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。
简单来说,关系模式就是二维表格模型。
关系型数据库的优势:
MySQL 数据类型非常丰富,常用类型简单介绍如下:
整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT
浮点数类型:FLOAT、DOUBLE、DECIMAL
字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB
日期类型:Date、DateTime、TimeStamp、Time、Year
其他数据类型:BINARY、VARBINARY、ENUM、SET…
1范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;(只要是关系型数据库都满足1NF)
2范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
3范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。没有冗余的数据库设计可以做到
视图是虚拟表,并不储存数据,只包含定义时的语句的动态数据。
CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = user]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
索引是存储引擎用于提高数据库表的访问速度的一种数据结构。它可以比作一本字典的目录,可以帮你快速找到对应的记录。
索引一般存储在磁盘的文件中,它是占用物理空间的。
索引的优缺点?
优点:
部分函数依赖
完全函数依赖
传递函数依赖
SQL 语句中修改表结构的命令是(ALTER TABLE)
多表查询有如下几种:
插入数据
insert
into <表名> [<属性列1> [,<属性列2>]…]
values(<常量1> [,<常量2>]…)
修改数据
update <表名>
set <列名>=<表达式> [,<列名>=<表达式>]…
[where <条件>]
删除数据
delete
from <表名>
[where <条件>]
定义视图
create view <视图名> [(<列名> [,<列名>]…)]
as <子查询>
[with check option]
删除视图
drop view <视图名>
是指数据的正确性和相容性。包括:实体完整性、参照完整性、用户定义完整性。