数据库主键

MySQL约束

无人久伴 提交于 2019-11-28 04:57:24
DQL:查询语句 排序查询 聚合函数 分组查询 分页查询 约束 多表之间的关系 范式 数据库的备份和还原 DQL:查询语句 排序查询 语法:order by 子句 order by 排序字段1 排序方式1 , 排序字段2 排序方式2… 排序方式: ASC:升序,默认的。 DESC:降序。 注意: 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。 聚合函数:将一列数据作为一个整体,进行纵向的计算。 count:计算个数 一般选择非空的列:主键 count(*) max:计算最大值 min:计算最小值 sum:计算和 avg:计算平均值 注意:聚合函数的计算,排除null值。 解决方案: 1. 选择不包含非空的列进行计算 2. IFNULL函数 分组查询: 语法:group by 分组字段; 注意: 分组之后查询的字段:分组字段、聚合函数 where 和 having 的区别? where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来 where 后不可以跟聚合函数,having可以进行聚合函数的判断。 – 按照性别分组。分别查询男、女同学的平均分 SELECT sex , AVG(math) FROM student GROUP BY sex; – 按照性别分组。分别查询男、女同学的平均分,人数

MySQL(面试题)

爷,独闯天下 提交于 2019-11-28 03:13:23
1. 什么是索引? 索引是一种数据结构,可以帮助我们快速的进行数据的查找. 2. 索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引. 3. Hash索引和B+树所有有什么区别或者说优劣呢? 首先要知道Hash索引和B+树索引的底层实现原理: hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据.B+树底层实现是多路平衡查找树.对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据. 那么可以看出他们有以下的不同: hash索引进行等值查询更快(一般情况下),但是却无法进行范围查询. 因为在hash索引中经过hash函数建立索引之后,索引的顺序与原顺序无法保持一致,不能支持范围查询.而B+树的的所有节点皆遵循(左节点小于父节点,右节点大于父节点,多叉树也类似),天然支持范围. hash索引不支持使用索引进行排序,原理同上. hash索引不支持模糊查询以及多列索引的最左前缀匹配.原理也是因为hash函数的不可预测. AAAA 和 AAAAB 的索引没有相关性. hash索引任何时候都避免不了回表查询数据,而B+树在符合某些条件

MySQL >>> 表的操作

爱⌒轻易说出口 提交于 2019-11-28 00:51:45
表的操作 创建表的完整语法 :     create table 表名(     字段名1 字段类型[ (宽度) 约束条件 ],     字段名1 字段类型[ (宽度) 约束条件 ],     字段名1 字段类型[ (宽度) 约束条件 ]             );         注:1. 同一张表中,字段名不能相同           2. 宽度和约束条件是可选的,字段名和字段类型是必须的            3. 最后一个字段后面不能加逗号       #######################################       补充:           宽度是对存储数据库的限制;如               create table t1(name char ); # char 后面不写宽度默认为 1               insert into t1 values ('jason') ;               select * from t1;               结果如下:                                       在没有 严格模式 的情况下,数据的确能够存放进去,但是只会存进去一个 j                    而最新的数据库版本直接报错:Data too long for

分布式数据库主键id生成策略

孤街浪徒 提交于 2019-11-27 23:51:23
分布式数据库部署主要分为两种,一种是 读写分离 。这个需要弄主从数据库。主要是写的时候写主数据库,读的时候读从数据库。分散读取压力,对于读多写少的系统有利于 提高其性能。还有一种是 分布式存储 ,这种主要是将一张表拆分成多张分表部署到各个服务器中,主要针对写操作频繁的系统,如微博,淘宝的订单系统。 这两种方案都会遇到主键类型及生成方式的问题,还有主从数据库不同步和主键冲突问题。 主键类型主要有GUID和数字类型,这里我们不讨论GUID; 数字主键主要存在 唯一性、可同步性 两个方面的不足 可同步性:可以不使用主键自增方案。 唯一性:可以单独使用存储过程生成ID,设置主键ID的初始值步长和最大值,及所对应的表,当然主从数据库的主表和分表初始值和最大值是不一样的,一样的话会造成主键重复。 存储过程: -- ---------------------------- -- Procedure structure for getId -- ---------------------------- DROP PROCEDURE IF EXISTS `getId`; DELIMITER ;; CREATE DEFINER=`sawyer`@`%` PROCEDURE `getId`(OUT aId INT, OUT aIdEnd INT, aType TINYINT) BEGIN DECLARE

常用数据类型与约束

孤街浪徒 提交于 2019-11-27 23:45:49
目录 常用数据类型与约束 数据类型 创建表的完整语法 整型 浮点型 字符类型 日期时间类型 枚举与集合类型 约束条件 常用数据类型与约束 数据类型 创建表的完整语法 # 语法: create table 表名( 字段1 类型[(宽度) 约束条件], 字段2 类型[(宽度) 约束条件], 字段3 类型[(宽度) 约束条件]) # 注意: 1.在同一张表中,字段名不能相同 2.宽度和约束条件可选,字段名和类型是必须的 3.最后一个字段后不能加逗号! # 补充: # 1.宽度指的是对存储数据的限制 create table userinfo(name char); insert into userinfo values("jason"); """ 1.没有安全模式的数据库版本,能够存放数据但是只会存进去一个j 2.最新数据库版本直接报错提示无法存储:Data too long for coulumn "name" at row1 """ # 2.约束条件初始>>> create table t1(id int,name char not null); insert into t1 values(1,"j"); # 正常存储 insert into t1 values(2,"null"); # 报错 # 总结:类型与约束条件区别 # 类型

数据库2

删除回忆录丶 提交于 2019-11-27 22:11:11
存储引擎: innodb: 现在数据库使用的默认引擎 与myisam相比,速度较慢,但是数据安全性更高(数据安全体现在行锁, 事务方面)   使用innodb创建表时,在库下默认创建两个文件,分别是frm和idb, frm表示存储表结构的文件, idb表示存储数据的文件 myisam: 老版本数据库使用的存储引擎   使用myisam创建表时,在库下默认创建三个文件, 分别是frm MYD MYI , frm表示存储表结构的文件, MYD表示存储数据的文件, MYI表示索引文件 blackhole: 黑洞,不管存储什么数据直接丢失   使用blackhole创建表时,在库下默认创建一个文件, frm , frm表示存储表结构的文件 memory: 内存引擎,临时存储在内存,服务重启数据丢失   使用memory创建表时,在库下默认创建一个文件, frm, frm表示存储表结构的文件 如何查询数据库中有哪些的引擎呢? show engines; 创建表的完整性约束: create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] ); 注意:   1.字段名和字段类型是必须的,中括号内的参数都是可选参数   2.同一张表中的字段名不能重复   3.最后一个字段后不能加逗号 宽度:  

8.19MySQL(二)

大兔子大兔子 提交于 2019-11-27 22:10:16
一、存储引擎   不同的数据应该有不同的处理机制 1.mysql存储引擎   Innodb:默认的存储引擎,查询速度较myisam慢,但是更安全   myisam:mysql老版本用的存储引擎   memory:内存引擎(数据全部存在内存中)   blackhole:无论存什么,都立马消失(黑洞) 2.查看所有的存储引擎   show engines; 3.研究一下每个存储引擎存取数据的特点 (1)Innodb:两个文件,一个是表结构文件,一个是真实数据文件 (2)myisam:三个文件,表结构文件,真实数据文件,索引文件(目录) (3)memory:一个文件,表结构文件 (4)blackhole:一个文件,表结构文件 二、创建表的完整性约束 1.创建表的完整语法 create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] ); 注意:   (1)字段名和字段类型是必须的 中括号内的参数都是可选参数   (2)同一张表中字段名不能重复   (3)最后一个字段后面不能加逗号,例如: create table t6( id int, name char, ); # 错误 宽度:   (1)使用数据库的准则:能尽量让它少干活就尽量少干活   (2)对存储数据的限制:char(1),只能存一个字符

数据库02

风格不统一 提交于 2019-11-27 21:50:11
一.存储引擎 1.1什么是存储引擎 MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。 例如,如果你在研究大量的临时数据,你也许需要使用内存存储引擎。内存存储引擎能够在内存中存储所有的表格数据。又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)。 这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。 1.2主要的四种存储引擎 INNODB:现默认的存储引擎,读取数据较myisam慢,但是数据存储更安全 MYISAM:mysql之前版本使用的默认存储引擎 MEMORY:内存引擎(断电/重启存储的数据会消失,数据存储再内存上) BLACKHOLE:黑洞引擎(存入的数据会消失) 1.3引擎的特点 使用sql语句查看引擎:show engines: 创建表,对表中插入数据 ps: q3是内存引擎,数据存储再内存中的所以不存在数据   q4是黑洞引擎,数据写入其中就消失了,所以也没有数据 ps:重启MySQL服务后,之前使用Memory引擎存储的数据都会被清除 创建表的完整语法: create table 表名( 字段名1 字段类型[(宽度) 约束条件

2,数据类型,约束条件

混江龙づ霸主 提交于 2019-11-27 21:49:39
今日内容: 一,字段类型 在建表的时候,每个字段都有自己的类型 1,整型 2,浮点型 3,时间类型 4,字符类型 5,枚举与集合 二,约束条件 1,primary key 2,unique key 3,not null ps; 重点记住知识: unique 唯一 default 给某个字段设置默认值 auto_increment 自动递增 not null 不能为空 unsigned 无正负符号 zerofill 0填充多余的位数 char后面的数字是用来限制存储数据的长度的 枚举与集合类型 枚举(enum) 限制某个字段能够存储的数据内容 集合(set) 限制某个字段能够存储的数据内容 浮点型精确度:float < double < decimal 精确度依次越来越高 字符类型: char与varchar的区别 char定长 1.浪费空间 2.存取速度快 varchar变长 1.节省空间 2.存取速度慢(较于char比较慢) 存的时候 需要给数据讲一个记录长度的报头 取的时候 需要先读取报头才能读取真实数据 char(4) # 最大只能存四个字符 超出来会直接报错 如果少了 会自动用空格填充 varchar(4) # 最大只能存四个字符 超出来会直接报错 如果少了 有几个存几个 char后面的数字是用来限制存储数据的长度的 特例:只有整型后面的数字不是用来限制存储数据的长度

存储引擎 数据类型

笑着哭i 提交于 2019-11-27 21:47:26
不同的数据应该有不同的处理机制 mysql存储引擎 Innodb:默认的存储引擎 查询速度较myisam慢 但是更安全 myisam:mysql老版本用的存储引擎 memory:内存引擎(数据全部存在内存中) blackhole:无论存什么 都立马消失(黑洞) show engines; 查看所有存储引擎存取数据的特点 数据类型   整型, 浮点型, 字符类型, 日期类型, 枚举与集合类型 约束    not null, unique, default, primary key ... 创建表的完整语法 create table 表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件] ); 注意:   1.字段名和字段类型是必须的 中括号内的参数都是可选参数 2.同一张表中字段名不能重复 3.最后一个字段后面不能加逗号 宽度: 使用数据库的准则: 能尽量让它少干活就尽量少干活 对存储数据的限制 char(1) 只能存一个字符, 如果超了mysql会自动帮你截取 1.插入的时候 mysql自动截取 2.会直接报错(mysql严格模式) alter table t5 modify name char not null; not null该字段不能插空 类型和中括号内的约束 类型约束的是数据的存储类型 ,