数据库主键

SQL Server数据库原理及部署

╄→尐↘猪︶ㄣ 提交于 2019-12-27 18:08:43
一、使用数据库的必要性 使用数据库可以高效且条理分明地存储数据,使工作人员能够更加迅速、方便地管理数据。数据库具有以下特点: 可以结构化的存储大量的数据信息,方便用户进行有效的检索和访问; 可以有效地保持数据信息的一致性、完整性、降低数据冗余; 可以满足应用的共享和安全方面的要求; 常见的数据库有:SQL Server、MySQL、Oracle等,SQL Server是运行在Windows操作环境中,拥有相对比较友好的图形化界面。 二、数据库的基本概念 1、数据 描述事物的符号记录称为数据,数据不仅仅包括数字、文字、图形、图像、声音、档案记录等都是数据。在数据库中,数据是以“记录”形式按统一的格式进行存储的,而不是杂乱无章的。 2、数据库和数据库表 不同的记录组织在一起,就形成了数据库的“表”。也可以说,表是用来存储具体数据的。简单地说,数据库就是表的集合,它是以一定的组织方式存储的相互有关的数据集合。通常,数据库并不是简单的存储这些数据的,还要表示他们之间的关系,因此,关系的描述也是数据库的一部分。 3、数据库管理系统和数据库系统 数据库管理系统(Database Management System,DBMS)是实现对数据库资源有效组织、管理和存取的系统软件。DBMS主要包括以下功能: 数据库的建立和维护功能; 数据定义功能; 数据操纵功能; 数据库的运行管理功能; 通信功能;

基于Python对数据库的操作

谁说我不能喝 提交于 2019-12-27 12:35:05
1.批量增 使用mysql向数据库中批量插图数据: conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='*******', database='wangyi') cur = conn.cursor(pymysql.cursors.DictCursor) 这里的cur指的是游标。游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了, 将游标放置到某行后,即可对该行数据进行操作。然而这些都是mysql内部的事情了,我们只需要知道要写上这么两句话, 在执行sql语句前实例化一个游标对象,并在执行完sql语句提交后,关掉这个游标就好了。 try: sql = "insert into news(title, content, keyword,type) values(%s, %s, %s,%s);" # 数据库中有id字段,使用executemany 向数据库中提交! print(sql) ret = self.cur.executemany(sql,[(item['new_title'],item['new_content'],word,type)])# 执行sql 语句    #有几个占位符 列表里面的元组就应该有几个元素,否则的就存不进去,   

MySQL索引(详细解释)

女生的网名这么多〃 提交于 2019-12-26 22:57:21
什么是索引 索引是一种 可以加快检索的数据结构 ,它 包含从表或者视图的一列或者多列生成的键 ,以及 映射到指定数据存储位置的指针 。 我们可以把数据库看成一本书,索引就是书的目录,借助目录查找信息,显然要比没有目录的书查起来要方便快捷。 索引的作用就是提高查询效率 那么索引能提高查询效率,我们就要创建很多索引么? 不是的,索引最终是存储在硬盘上的,索引越多,那么存储索引的文件就会越大,电脑在使用索引的时候,是先将索引文件加载到内存上,然后再加载到CPU上。所以,索引如果过多,会加重内存和磁盘的交互负担。 并且,数据的改动也会对索引造成影响。 总结:索引可以提高查询效率,但并不是越多越好,过多的索引会引起磁盘I/O的交互频繁,并且数据改动,索引也会受到影响。 索引分类 普通索引 :没有任何条件现制,可以给任意字段添加普通索引。 Student表中的字段有SID,Sname,Sage,Ssex, 对其中任意的一个字段都可以创建索引,没有任何现制,这就是普通索引 唯一性索引 :唯一性索引顾名思义,它可以保证索引中的所有的值都是唯一的,使得表中的每一行在某种方式上都具备唯一性。所以, 只有当唯一性是数据本身的特征的时候,指定唯一性索引才有意义。 例如:主键,在表中是不能重复的,主键索引,就是唯一性索引。 SID就是Student表的主键,SID是不会重复的字段,也就是唯一性字段

hinernate复合主键操作方法

孤街醉人 提交于 2019-12-26 21:21:43
目录: 1. 实现方式一 :将复合主键对应的属性与实体其他普通属性放在一起 2. 实现方式二 :将主键属性提取到一个主键类中,实体类只需包含主键类的一个引用   在日常开发中会遇到这样一种情况,数据库中的某张表需要多个字段列才能唯一确定一行记录,这时表需要使用复合主键。面对这样的情况Hibernate为我们提供了两种方式来解决复合主键问题。 方式一: 将复合主键对应的属性与实体其他普通属性放在一起 例如实体类People中"id"和"name"属性对应复合主键: People.java: /*实体类,使用复合主键必须实现Serializable接口*/ public class People implements Serializable { private static final long serialVersionUID = -4888836126783955019L; private String id; private String name; private int age; public People() { } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; }

MySQL设计之三范式

岁酱吖の 提交于 2019-12-26 05:39:24
网上查找了一些资料,记录如下并加入自己的理解。 设计关系 数据库 时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。但是有些时候一昧的追求范式减少冗余,反而会降低数据读写的效率,这个时候就要反范式,利用空间来换时间。 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。所以这里就只记录三范式相关的知识。 三范式 1NF:字段不可分; 2NF:有主键,非主键字段依赖主键; 3NF:非主键字段不能相互依赖; 解释: 1NF:原子性 字段不可再分,否则就不是关系数据库; 2NF:唯一性 一个表只说明一个事物; 3NF:每列都与主键有直接关系,不存在传递依赖; 第一范式(1NF) 即表的列的具有原子性,不可再分解,即列的信息,不能分解, 只要数据库是关系型数据库( MySQL / Oracle /db2/informix/sysbase/sql server),就自动的满足1NF。数据库表的每一列都是不可分割的原子数据项

数据库三范式

杀马特。学长 韩版系。学妹 提交于 2019-12-25 18:32:17
范式的概念   为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。 在实际开发中最为常见的设计范式有三个: 1 .第一范式(确保每列保持原子性) 第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。 第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第一范式,如下表所示。 上表所示的用户信息遵循了第一范式的要求,这样在对用户使用城市进行分类的时候就非常方便,也提高了数据库的性能。 2 .第二范式(确保表中的每列都和主键相关) 第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。 比如要设计一个订单信息表

PowerDesigner之PDM(物理概念模型)

ⅰ亾dé卋堺 提交于 2019-12-25 10:59:23
一、PDM概述   PDM(物理数据模型),通俗地理解,就是在PowerDesigner中以图形化的方式展示和设计数据库。   PDM中涉及到的基本概念包括: 表; 列; 视图; 主键; 候选键; 外键; 存储过程; 触发器; 索引; 完整性检查约束;   以上这些都是数据库的概念,不适合在PowerDesigner里面表述。 二、创建PDM   创建PDM有4中方法: 使用设计环境直接创建PDM; 从现有数据库或通过SQL脚本逆向工程创建PDM; 从CDM采用内部模型生成方法建立PDM; 从OOM中的类图采用模型的内部生成方法建立PDM;   利用CDM生成PDM是最符合设计思路的方法,但在很多企业开发过程中,都是在设计环境中直接建立PDM,因为大部分企业没钱发那么多工资你设计那么多图。    1、在设计环境直接建立PDM   在设计环境直接建立PDM的步骤如下:    1、在PowerDesigner主窗口选择File->New Model,在打开的创建左侧选择Physical Data Model选项       2、右侧选项的意义 Model name:模型名称; DBMS:数据库类型,也可以单击后面的文件夹按钮,选择“浏览文件夹”,选择xml文件作为目标(CDM转PDM); Share the DBMS definition:共享数据库定义; Copy the DBMS

【MySQL】索引

岁酱吖の 提交于 2019-12-24 19:01:17
什么是索引 索引就好比是书的目录,可以显著提高数据库查询的效率。例如像一本很厚的书,在没有目录的情况下要查到你想要看的知识点,都不知要找到什么时候,但通过目录我们可以很快的查询到对应的内容。 索引的数据结构 哈希表 哈希表是一种以K-V值存储的数据结构,这样,我们只需要输入K值,就会很快得到需要的V值。K值经过哈希计算得出,这样避免不了哈希碰撞问题,解决的方法是当K值哈希后一样时,可以采用列表的形式存储相应的数据,在查询时再经过列表逐一比对得到V值。哈希表在等值查询的时候非常快,但会存在下面问题: 1、无法进行范围查询 2、无法利用索引进行排序 3、存在哈希碰撞问题,当哈希碰撞过于严重时很影响效率 4、不支持最左前缀 有序数组 有序数组可以很好的解决范围查询的问题,查询数据也可以用二分法很快的找到对应的值。但在中间插入一条数据时,需要把后面的数据都往后移,代价太大。 二叉搜索树 二叉搜索树每个节点最多只有两个子节点,并且左节点小于等于父节点,右节点大于父节点。这样很好解决了等值查询、范围查询、数据插入的问题。但因为只有两个节点,这样数据量很大的时候,会产生很高的层级,并且数据库中这些层级不全是存放在内存中的(内存只会存放一级,有时还会存放进二级)而是存放磁盘中。这样就造成了多次IO操作,严重影响性能。 B+树 在二叉搜索树的基础上进行优化,每个节点至多可以达到拥有1200个子节点

唯一索引、聚集索引和聚集索引

烈酒焚心 提交于 2019-12-24 14:12:43
1.一个表只能有一个主索引-PRIMARY,且只有是数据库表才有主索引,后缀为.CDX,索引关键字是不可以重复的.哪怕是空记录也只可以有一条.2.候选索引可以有很多个,索引关键字同样不可以重复,同样只存在于数据库表.3.唯一索引,可以存在于自由表,但索引关键字不可以重复.4.普通索引简单的理解就是只起排序作用.索引关键字是可以重复的.可存在于自由表. 主键与唯一索引的区别 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。 唯一性索引列允许空值,而主键列不允许为空值。 主键列在创建时,已经默认为空值 + 唯一索引了。 主键可以被其他表引用为外键,而唯一索引不能。 一个表最多只能创建一个主键,但可以创建多个唯一索引。 主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。 在 RBO 模式下,主键的执行计划优先级要高于唯一索引。 两者可以提高查询的速度。 CREATE UNIQUE INDEX test_UniqueKey ON test (UniqueKey); 聚集索引: 聚集索引基于数据行的键值,在表内排序和存储这些数据行。每个表只能有一个聚集索引,应为数据行本分只能按一个顺序存储。 在聚集索引中,表中各行的物理顺序与索引键值的逻辑(索引)顺序相同

如何删除主键的聚集索引

独自空忆成欢 提交于 2019-12-24 06:30:07
当我们对一个表建立一个主键时,默认会给该主键列添加一条聚集索引,这是数据库内部自动建立的,唯一性约束也会默认创建一个非聚集索引。 create table MyTable ( id int identity(1,1) primary key, name nvarchar(10) unique ) exec sp_helpindex MyTable 上面我们建立了一个主键id 和唯一性约束的name列,查看表可以看到这时产生了两个索引 聚集索引是一个宝贵的资源,在一些表的中有时我们永远不会用到主键来作为查询条件,或者作为其他表的外键,这时主键的聚集索引 就显得大才小用了,我们希望将聚集索引建立在其他真正需要的字段,不过当我们执行删除操作时会报以下错误 消息 3723,级别 16,状态 4,第 1 行 不允许对索引 'MyTable.PK__MyTable__3213E83F145C0A3F' 显式地使用 DROP INDEX。该索引正用于 PRIMARY KEY 约束的强制执行 不过我们可以先删除主键约束,这样聚集所以就自动删除了 alter table MyTable drop constraint PK__MyTable__3213E83F145C0A3F 我们再看下聚集索引已经不存在了 当然唯一约束所引起的索引也可以同样的方式操作,先删除唯一约束 来源: https://www