数据库主键

MySQL.常见表选项及约束

孤人 提交于 2019-11-29 08:35:21
1.create table 选项   1.指定列选项 default、comment   2.指定表选项 engine、auto_increment、comment 2.create table 约束   1.非空约束:not null   2.唯一约束:unique   3.主键约束: primary key   4.外键: foreign key   5.检查enum、set:chect 一、create table 选项  a. 定义列的时候,指定列选项   1.default<literal>:定义列的默认值    当插入一个新行到表中并且没有给该列明确赋值,如果定义了列的默认值,将自动得到默认值,如果没有,则为null    也可以在insert和 update 语句中使用 default 关键字给默认值赋值,函数default(column)也得到一个列的默认值   2.comment 用来给列添加注释,最多为255个字符,注释将会保存在数据字典中   b.  在create table 语句中的表选项    1.engine :指定表使用的储存引擎    #储存引擎:决定了表中的数据如何存储以及如何访问,还有事务如何处理                       MySQL中允许对每个表使用不同的储存引擎,如果在create table 中没有使用储存引擎

MySQL常见建表选项及约束

扶醉桌前 提交于 2019-11-29 08:35:08
阅读目录---MySQL常见的建表选项及约束: 1、 create table选项   1、 指定列选项 : default 、 comment   2、 指定表选项 : engine 、auto_increment、comment 2、 create table约束     1、 not null :非空约束   2、 unique :唯一约束   3、 primary key :主键约束   4、 foreign key :外键   5、 check :检查---enum、set 一、CREATE TABLE 选项 1、在定义列的时候,指定列选项 1)DEFAULT <literal>:定义列的默认值   当插入一个新行到表中并且没有给该列明确赋值时,如果定义了列的默认值,将自动得到默认值 ;如果没有,则为null。 当然,也可以在INSERT和UPDATE语句中使用DEFAULT关键字显式地给列赋默认值: 函数default(column)可以得到一个列的默认值: 2)comment:用来给列添加注释,最多255个字符,注释会保存到数据字典中。   创建带有列注释的表stu_comment 从数据字典查询注释信息 2、在CREATE TABLE语句中的表选项 1)engine:指定表使用的存储引擎 存储引擎:决定了数据如何存储以及如何访问,还有事务如何处理

0607mysql基础:常用属性、约束

只愿长相守 提交于 2019-11-29 08:34:58
一、常用属性 1、auto_increment:自增长   auto_increment能为新插入的行赋一个唯一的整数标识符。为列赋此属性将为每个新插入的行赋值为上一次插入的ID+1。   MySQL要求将auto_increment属性用于作为主键的列。此外,每个表只允许有一个auto_increment列。 2、binary:区分大小写 binary属性只用于char和varchar值。当为列指定了该属性时,将以区分大小写的方式排序。与之相反,忽略binary属性时,将使用不区分大小写的方式排序。 3、default:默认值 default属性确保在没有任何值可用的情况下,赋予某个常量值,这个值必须是常量,因为MySQL不允许插入函数或表达式值。此外,此属性无法用于BLOB或TEXT列。如果已  经为此列指定了NULL属性,没有指定默认值时默认值将为NULL,否则默认值将依赖于字段的数据类型。 4、index:索引 如果所有其他因素都相同,要加速数据库查询,使用索引通常是最重要的一个步骤。索引一个列会为该列创建一个有序的键数组,每个键指向其相应的表行。以后针对输入条件  可以搜索这个有序的键数组,与搜索整个未索引的表相比,这将在性能方面得到极大的提升   create table employees   (   id varchar(9) not null,  

mysql 表的完整性约束

戏子无情 提交于 2019-11-29 08:32:12
目录 mysql 表的完整性约束 约束概念 unsigned 设置某一个数字无符号 (整数类型 ,浮点类型不能是unsigned) not null 某一个字段不能为空(严格模式会影响非空设置的效果) default 给某个字段设置默认值(设置默认值) unique 设置某一个字段不能重复 (唯一约束) auto_increment 设置某一个int类型的字段 自动增加 (自增字段 必须是数字 且 必须是唯一的) primary key 设置主键 (这一个字段非空且唯一) foreign key 外键 (外键,涉及到两张表,数据类型一样,且有唯一约束) references 级联删除和更新 mysql 表的完整性约束 约束概念 为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测, 使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。 约束条件与数据类型的宽度一样,都是可选参数,主要分为以下几种: # NOT NULL :非空约束,指定某列不能为空; # UNIQUE : 唯一约束,指定某列或者几列组合不能重复 # PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录 # FOREIGN KEY :外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性 unsigned

MySQL学习——约束

瘦欲@ 提交于 2019-11-29 08:29:28
MySQL学习——约束 摘要:本文主要学习了数据库的约束。 primary key(主键) 定义 主键约束是一个列或者多个列,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。 主键约束相当于唯一约束和非空约束的组合,主键约束列不允许重复,也不允许出现空值。 每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。 当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。 主键自增 MySQL数据库提供了一个自增的数字,专门用来自动生成主键值,主键值不用用户维护,自动生成,自增数从1开始,以1递增。 使用方式是在主键后面添加 auto_increment 选项。 实例 在创建表时添加单列主键约束,主键自增: 1 create table test ( 2 id int(11) primary key auto_increment, 3 phone int(11), 4 name varchar(50) 5 ); 在创建表时添加复合主键约束: 1 mysql> create table test ( 2 -> id int(11), 3 -> phone int(11), 4 -> name varchar(50), 5 -> primary key(id, phone) 6 -> ); 7 Query OK,

MySQL索引-下

ぃ、小莉子 提交于 2019-11-29 08:28:28
本文内容是整理极客时间的mysql课程。 执行select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行? 表的初始化操作: mysql> create table T ( ID int primary key, k int NOT NULL DEFAULT 0, s varchar(16) NOT NULL DEFAULT '', index k(k)) engine=InnoDB; insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff'),(700,7,'gg'); InnoDB的索引组织结构-图 InnoDB的索引语句执行流程: 1.在k索引树上找到k=3的记录,取得ID=300; 2.再到 ID 索引树查到 ID=300 对应的 R3; 3.在 k 索引树取下一个值 k=5,取得 ID=500; 4.再回到 ID 索引树查到 ID=500 对应的 R4; 5.在k索引树取下一个值k=6,不满足条件,循环结束。 解析 回到主键索引树搜索的过程,我们称为回表。在这个例子中,查询过程读了k索引树的3条记录(步骤1、3、5),回表了两次(步骤2和4)。 覆盖索引,索引 k 已经“覆盖了”我们的查询需求

MySQL 加锁处理分析

不想你离开。 提交于 2019-11-29 08:19:52
背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路,拿到任何一条SQL语句,都能完整的分析出这条语句会加什么锁?会有什么样的使用风险?甚至是分析线上的一个死锁场景,了解死锁产生的原因。 注: MySQL是一个支持插件式存储引擎的数据库系统。本文下面的所有介绍,都是基于InnoDB存储引擎,其他引擎的表现,会有较大的区别。 MVCC:Snapshot Read vs Current Read MySQL InnoDB存储引擎,实现的是基于多版本的并发控制协议——MVCC ( Multi-Version Concurrency Control ) (注:与MVCC相对的,是基于锁的并发控制,Lock-Based Concurrency Control)。MVCC最大的好处,相信也是耳熟能详:读不加锁,读写不冲突。在读多写少的OLTP应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能,这也是为什么现阶段,几乎所有的RDBMS,都支持了MVCC。 在MVCC并发控制中,读操作可以分成两类:快照读 (snapshot read)与当前读

MySQL 加锁处理分析

我是研究僧i 提交于 2019-11-29 08:19:39
转载自何登成的技术博客:http://hedengcheng.com/?p=771 背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路,拿到任何一条SQL语句,都能完整的分析出这条语句会加什么锁?会有什么样的使用风险?甚至是分析线上的一个死锁场景,了解死锁产生的原因。 注: MySQL是一个支持插件式存储引擎的数据库系统。本文下面的所有介绍,都是基于InnoDB存储引擎,其他引擎的表现,会有较大的区别。 MVCC:Snapshot Read vs Current Read MySQL InnoDB存储引擎,实现的是基于多版本的并发控制协议——MVCC ( Multi-Version Concurrency Control ) (注:与MVCC相对的,是基于锁的并发控制,Lock-Based Concurrency Control)。MVCC最大的好处,相信也是耳熟能详:读不加锁,读写不冲突。在读多写少的OLTP应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能,这也是为什么现阶段,几乎所有的RDBMS,都支持了MVCC。

MySQL认识索引

老子叫甜甜 提交于 2019-11-29 08:16:46
MySQL认识索引 什么是索引? 索引在MySQL中也叫是一种“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能 非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。 索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。 索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。 索引的原理 索引原理 索引的目的在于提高查询效率,与我们查阅图书所用的目录是一个道理:先定位到章,然后定位到该章下的一个小节,然后找到页数。相似的例子还有:查字典,查火车车次,飞机航班等 本质都是:通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据。 数据库也是一样,但显然要复杂的多,因为不仅面临着等值查询,还有范围查询(>、<、between、in)、模糊查询(like)、并集查询(or)等等。数据库应该选择怎么样的方式来应对所有的问题呢?我们回想字典的例子,能不能把数据分成段,然后分段查询呢?最简单的如果1000条数据,1到100分成第一段,101到200分成第二段,201到300分成第三段......这样查第250条数据,只要找第三段就可以了,一下子去除了90%的无效数据。但如果是1千万的记录呢

MySQL 加锁处理分析

…衆ロ難τιáo~ 提交于 2019-11-29 08:14:19
http://hedengcheng.com/?p=771 类似的文章:https://www.cnblogs.com/yelbosh/p/5813865.html 1.解释了为什么update insert delete 也属于当前读 2.分9种情况解释了rc rr级别下,当前读在mysql中是如何加锁的 2.1 select no update or share mode 操作在非seariable下均不加锁,采用的是快照读,mysql使用mvcc返回历史数据 2.2 对于当前读,分情况讨论 背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路,拿到任何一条SQL语句,都能完整的分析出这条语句会加什么锁?会有什么样的使用风险?甚至是分析线上的一个死锁场景,了解死锁产生的原因。 注: MySQL是一个支持插件式存储引擎的数据库系统。本文下面的所有介绍,都是基于InnoDB存储引擎,其他引擎的表现,会有较大的区别。 MVCC:Snapshot Read vs Current Read MySQL InnoDB存储引擎