主键约束和唯一性约束的区别

主键必然是唯一且不为空,但是唯一不一定是主键,而且主键只能有一个,但是唯一约束仅仅是为了保持某些列具有唯一性而已。所以可以有多列 一张表里只能有一个主键约束,可以有多个唯一约束 主键约束的字段不能为null,而唯一约束的字段可以为null值 主键约束(PRIMARY KEY) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。 是不可能(或很难)更新. 主键列上没有任何两行具有相同值(即重复值),不允许空(NULL). 主健可作外健,唯一索引不可; 唯一性约束(UNIQUE) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置多个唯一性约束. 只要唯一就可以更新. 即表中任意两行在 指定列上都不允许有相同的值,允许空(NULL). 一个表上可以放置多个唯一性约束
2023年10月04日

Mysql中的Decimal类型说明

我们在Mysql中存字段的时候,比如,一些与金钱有关的数据。这个时候就会对精确到的要求非常高。那么这个时候,就会发现我们之前所学的八大基本类型不再能够满足需求,无论是整形还是浮点型,有人会说存整形有什么不可,但是你要知道不是每个人的金额都是整数的;这样不行的话,存浮点型的就可以了嘛,对于银行存钱来说,一个小数点的问题都会将一笔钱的金额变得很大或者很小......So,这个时候你可以尝试一下Decimal类型,你会发现能够很好地解决你的问题。 decimal详细介绍: decimal(a,b) 参数说明: a:指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度为38. b:指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从0~a之间的值,默认小数位数是0. 举例说明,11615.23653234568这个数存你说的三个格式 decimal:11615 decimal(3):999 decdimal(3,2):9.99 decimal(10,5)11615.23653 超出精度范围的数会被强制进位并只显示数据类型定义的格式 备注: decimal数据类型用于要求非常高的精确计算中,这些类型允许指定数值的精确度和计算方法作为选择参数。精确度在这里指为这个值保存的有效数字的总个数。而计数方法指的是小数点后数字的个数。例如:decimal(5,2)规定了存储的值将不会超过五位数字 ,而且小数点后面有两位数字。 实例1: mysql> create table t1(c1 float(10,2), c3decimal(10,2)); Query OK, 0 rows affected (0.02 sec) mysql> insert into t1 values(9876543.21, 9876543.12); Query OK, 1 row affected (0.00 sec) mysql> select * from t1; +------------+------------+ | c1 | c3 | +------------+------------+ | 9876543.00 | 9876543.12 | +------------+------------+ 1 row in set (0.00 sec) 会发现,flocat类型的字段会自动将值四舍五入,而decimal类型的不会,如果用flocat类型的去存与金额有关的数据的时候就会出现问题,而decimal类型的就不会。 实例2:decimal(5,2) mysql> create table t1(id1 float(5,2) default null,id2 double(5,2) default ...
2023年10月04日

Mysql中varbinary、binary、char、varchar异同

binary 与 varbinary 类型和char与varchar类型是相似的,只是他们存储的是二进制数据,也就是说他们是包含字节流而不是字符流,他们有二进制字符的集合和顺序,他们的对比,排序是基于字节的数值进行的 binary与varbinary的最大长度和char与varchar是一样的,只不过他们是定义字节长度,而char和varchar对应的是字符长度。 存储和取出时对尾部空格的处理 char(N)用来存储非二进制字符串,插入时,对于少于N个字符的会自动在尾部加空格,查询时,尾部的空格就会被丢弃掉 vachar(N) 用来存储非二进制字符串,插入时,对于少于N个字符的不填补空格,查询时,尾部的空格不会被丢弃掉 binary(N)存储二进制字符串,插入进,少于N个字节的会自动在尾部加0x00,取出时,所有的字节都保留,返回定义长度的字节长度,在比较的时候,所有的字节都是有效的,并且0x00<space (space对应的是0x20) varbinary在插入不会去填补0x00字节,查询的时候也不会丢弃任何字节,在比较的时候,所有的字节都是有效的,并且0x00<space (space对应的是0x20) 大小比较时 char与varchar的字符比较中,是忽略大小写与最后的空格的,如: mysql> select 'a'='a ' , 'a'='A' , 'a'='A '; +----------+---------+----------+ | 'a'='a ' | 'a'='A' | 'a'='A ' | +----------+---------+----------+ | 1 | 1 | 1 | +----------+---------+----------+ 1 row in set (0.00 sec) 而binary及varbinary的字节比较中,所有的信息都不会被忽略,如: mysql> create table t (c BINARY(3)); Query OK, 0 rows affected (0.01 sec) mysql> insert into t set c = 'a'; Query OK, 1 row affected (0.01 sec) mysql> select hex(c), c = 'a', c ...
2023年10月04日

MongoDB基础教程

在mongodb中基本的概念是文档、集合、数据库 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table collection 数据库表/集合 row document 数据记录行/文档 column field 数据字段/域 index index 索引 table joins 表连接,MongoDB不支持 primary key primary key 主键,MongoDB自动将_id字段设置为主键 通过下图实例,我们也可以更直观的了解Mongo中的一些概念: 库的操作 > use test # use 库名, 创建库 switched to db test > db # 当前正在使用的库 test > show dbs # 没有刚创建的库,因为该库中没有任何数据 admin 0.000GB config 0.000GB local 0.000GB > db.dropDatabase() # 删除当前正在使用的库 { "dropped" : "test", "ok" ...
2023年10月04日

Elasticsearch基础教程(二)查询

请求地址参数查询 接下来我们将使用最简单的形式来演示search API。 索引、类型查询 首先,我们先通过搜索公司的所有员工来演示搜索API的应用。 GET /employee/_search 可以发现,在请求地址中使用了company索引,employee类型,但是并没有指定文档的ID,同时使用的是_search接口。 { "took" : 1, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 5, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "employee", "_type" : "_doc", "_id" : "rfZt238BJHOwMxbsnp3g", "_score" : 1.0, "_source" : { "firstName" : "Mily", "lastName" : "Smith", "age" : 22, "about" : "I love Python and Java", "interests" : [ "book", "music" ] } }, { "_index" : "employee", "_type" ...
2023年10月04日

Elasticsearch基础教程(一)文档

文档 在Elasticsearch中,文档这个词有特殊的含义。它指的是在Elasticsearch中被存储到唯一ID下的由最高级或者根对象(root object)序列化而来的JOSN。 一个文档不只包含了数据。它还包含了元数据(metadata)一关于文档的信息。有三个元数据元素是必须存在的,它们是: 名字 说明 _index 索引,文档存储的地方 _type 类型,文档代表的对象种类 _id 文档的唯一编号 在Elasticsearch中,文档属于一种类型,各种各样的类型存在于一个索引中。 在Elasticsearch7.x之前, 每类文档都需要定义一个类型对象,但是7.x之后,移除了_type,所有的文档类型都是默认为_doc。一个Elasticsearch集群包含多个索引,一个索引可以包含一个固定的_doc类型,类型包含了很多的文档(行),然后每个文档中又包含了很多的字段(列)。 注意:Elasticsearch 索引 在Elasticsearch中,索引这个词汇有太多的涵义,下面简单区分: 索引(名词) 如上文所说,一个索引就类似于传统关系型数据库的数据库,这里就是存储相关文档的地方。 索引(动词) 为一个文档创建索引是把一个文档存储到一个索引(名称)中的过程,这样才能被检索。这个过程非常类似SQL中的Insert语句,如果已经存在文档,新的文档则会覆盖旧的文档。 反向索引 在更新型数据库中的某列添加一个索引,比如多路搜索树(B-Tree)索引,就可以加快数据的查询速度。Elasticsearch以及Lucene使用的是一个叫做反省索引(inverted index)的结构来实现相同的功能。 索引 文档通过 索引(名词)API被索引(动词),简单地说就是将文档数据存储到索引中并使其可搜索。但是最开始需要决定将文档存储到哪里。 正如之前所说的,一个文档通过_index、_type、_id来确定它的唯一性。我们可以自己提供一个_id,也可以让index自动生成一个。 自己指定ID 为了创建员工名单,需要以下操作: 为每一个员工的文档创建索引,每个文档包含了员工的所有信息 每个文档都会被标记为employee类型 这种类型存在于company这个索引中 在实际的操作中,这些操作是非常简单的。可以将多步骤合为一个命令来完成: PUT /employee/_doc/1/ { "firstName": "John", "lastName": "Smith", "age": 25, "about": "I love Python", "interests": [ "sports", "music" ] } 在/company/empToyee/1/路径下,包含了三个部分: 名字 内容 employee 索引的名字 _doc ...
2023年10月04日