整形:tinyint
(1个字节),smallint(2个字节),mediuint(3个字节),int(4个字节),bigint(8个字节)
小数型:float(单精度)、double(双精度)、decimal(定点数)
日期时间:date(年月日)、time(时分秒)、datetime(年月日时分秒)
字符型:char(定长字符串)、varchar(可变长度字符串)
Blobx型:
Test型:
Binary型:
问题:
1.float和double的区别
float是4个字节,单精度的。double是8个字节,双精度的,double比float精度要高,但float和double都不是绝对精确的小数。
2.Char和varchar的区别
char支持的长度是0-255,varchar支持的长度是0-65535。
3、char(32)和varchar(32)括号里面的长度是字节还是字符
char是空间换时间,不用计算;varchar是时间换空间,需要计算
mysql5.0版本之前是字节,假设字符集是utf-8,一个中文3个字节那么char(32)只能存储10个中文字符
4.用什么类型存储金额
第一方案是使用定点数类型decimal,第二方案是使用长整型存储到金额的最小单位。
5.超长文本(博客、文章)怎么存储
严禁使用varchar存储长文本,应该改用Blob类型或者Test类型来存储超长文本,并且应该把超强文本的字段拆分出去,独立做一个表用主外键关联,以免在查询主表数据的时候,影响查询效率(超过5000我们就把它看做超强文本)
6.二进制文件(图片、音频、视频)怎么存储
mysql数据库提供了Binary类型,可以存二进制文件,但是性能很差。我们应该把二进制文件数据存放在磁盘中,在数据库中创建一个字符数据来存储二进制文件的路径和地址。
7、MySQL的整型支持无符号,使用关键字UNSIGNED
age tinyint --age字段取值范围是-128到127
age tinyint unsigned --age字段的取值范围是0-255
无符号不能取负数,但整数范围大一倍
约束1、非空约束 NOT NULL
2、检查约束 CHECK(MySQL不支持)
3、唯一约束 UNIQUE
4、主键约束 PRIMARY KEY
5、外键约束 FOREIGN KEY
SQL的分类-语法整理(DDL | DML | DQL | DCL) (1)数据定义语言DDL(Data Definition Language)CREATE,DROp,ALTER,SHOW
主要为以上操作 即对逻辑结构等有操作的,其中包括表结构,视图和索引。
(2)数据查询语言DQL(Data Query Language)SELECT,FROM,WHERe,GROUP BY,ORDER BY
这个较为好理解 即查询操作,以select关键字。各种简单查询,连接查询等 都属于DQL。
(3)数据操纵语言DML(Data Manipulation Language)INSERT,UPDATE,DELETE
主要为以上操作 即对数据进行操作的,对应上面所说的查询操作 DQL与DML共同构建了多数初级程序员常用的增删改查操作。而查询是较为特殊的一种 被划分到DQL中。
(4)数据控制功能DCL(Data Control Language)GRANT,REVOKE
用来对数据库用户授予或回收访问数据库的某种权限
(5)事务控制功能TCL(Transaction Control Language)COMMIT、ROLLBACK
用于操作事务,以及事务的提交和回滚操作
链表查询的方式 关系类型和三范式、反三范式数据库表关系:一对一、一对多(多对一)、多对多
三范式:以时间换空间(增加关系来减少冗余数据)
反(打破)三范式:以空间换时间(允许适量的冗余数据,减少关系)
事务四大特性和四种隔离级别四大特征:
原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;一致性(Consistency ): 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
隔离性(Isolation ): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
持久性(Durability ): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
锁的种类 按照锁的粒度分数据库锁有哪些?锁机制与InnoDB锁算法在关系型数据库中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。
MyISAM和InnoDB存储引擎使用的锁:
MyISAM采用表级锁(table-level locking)。
InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁
行级锁,表级锁和页级锁对比
行级锁 行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。行级锁分为共享锁 和 排他锁。
特点:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
表级锁 表级锁是MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持。最常使用的MYISAM与INNODB都支持表级锁定。表级锁定分为表共享读锁(共享锁)与表独占写锁(排他锁)。
特点:开销小,加锁快;不会出现死锁;锁定粒度大,发出锁冲突的概率最高,并发度最低。
页级锁 页级锁是MySQL中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录。
特点:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般
从锁的类别上分MySQL都有哪些锁呢?像上面那样子进行锁定岂不是有点阻碍并发效率了从锁的类别上来讲,有共享锁和排他锁。
共享锁: 又叫做读锁。 当用户要进行数据的读取时,对数据加上共享锁。共享锁可以同时加上多个。
排他锁: 又叫做写锁。 当用户要进行数据的写入时,对数据加上排他锁。排他锁只可以加一个,他和其他的排他锁,共享锁都相斥。
用上面的例子来说就是用户的行为有两种,一种是来看房,多个用户一起看房是可以接受的。 一种是真正的入住一晚,在这期间,无论是想入住的还是想看房的都不可以。
锁的粒度取决于具体的存储引擎,InnoDB实现了行级锁,页级锁,表级锁。
他们的加锁开销从大到小,并发能力也是从大到小。
死锁、如何防止死锁死锁:-- 死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现
防止死锁:我们程序员如何从代码逻辑层面避免死锁的出现
-- 1). 尽量让所有的事务获取资源的顺序保持一致
-- 2). 可以在事务中一次性锁定所有需要的资源
-- 3). 提供锁的粒度, 行锁提升为表锁 (不建议使用, 会严重影响数据库的并发性能)
-- 4). 使用乐观锁 -- 2. MySQL数据库自带死锁检测和快速失败机制,当某个事务进入锁等待的时候, MySQL会检测是否会产生死锁 -- 如果产生了死锁, MySQL会立即结束当前事务, 并释放当前事务内占用的所有资源上的锁
索引索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。
更通俗的说,索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录。索引是一个文件,它是要占据物理空间的。



