主键约束

主键和唯一索引的区别

与世无争的帅哥 提交于 2019-12-12 13:08:19
1、主键 主键ID,可以一列或多列,主键既是约束也是索引且是唯一索引,同时也用于对象缓存的键值。 2、索引 组合或者引用关系的子表(数据量较大的时候),需要在关联主表的列上建立非聚集索引(如订单明细表中的产品ID字段、订单明细表中关联的订单ID字段) 索引键的大小不能超过900个字节,当列表的大小超过900个字节或者若干列的和超过900个字节时,数据库将报错。 表中如果建有大量索引将会影响INSERT、UPDATET、DELETE语句的性能,因为在表中的数据更改时,所有的索引都将必须进行适当的调整。需要避免对经常更新的表进行过多的索引,并且索引应保持较窄,列要尽可能的少。 为经常用于查询的谓词创建索引,如用于下拉参照快速查找的code、name等。在平台现有下拉参照的查询sql语句中的like条件语句要改成不带前置通配符。还有需要关注Order By和Group By谓词的索引设计,Order By和Group By的谓词是需要排序的,某些情况下为Order By和Group By的谓词建立索引,会避免查询时的排序动作。 对于内容基本重复的列,比如只有1和0,禁止建立索引,因为该索引选择性极差,在特定的情况下会误导优化器做出错误的选择,导致查询速度极大下降。 当一个索引有多个列构成时,应注意将选择性强的列放在前面。仅仅前后次序的不同,性能上就可能出现数量级的差异。

Oracle主键约束、唯一约束和唯一索引

三世轮回 提交于 2019-12-10 18:25:04
总结如下: (1)主键约束和唯一键约束均会隐式创建同名的唯一索引,当主键约束或者唯一键约束失效时,隐式创建的唯一索引会被删除; --建表 create table student( stu_name varchar2(30) not null, age varchar2(4), gender varchar2(2), stuno varchar2(10), class varchar2(5), grade varchar2(5), tno varchar2(10) ); --在创建主键约束、唯一约束的时候,Oracle会隐式的创建一个和该主键约束名字相同的唯一索引 --主键 alter table student add constraint PK_STUNO primary key (stuno); --删除主键约束 alter table student drop constraint PK_STUNO; --唯一约束 alter table student add constraint UK_STUNO unique (stuno); --删除 alter table student drop constraint UK_STUNO; --如果先在列上创建唯一索引,然后再创建唯一约束,这时Oracle发现此列已经存在唯一索引,就不再自己创建 create unique

字段约束,索引,主外键

£可爱£侵袭症+ 提交于 2019-12-10 10:27:23
第 二 节 字段约束,索引,主外键 字段约束条件 1.1 作用:限制如何给字段赋值的 1.2 包括内容有: NULL Key Default Extra NULL 是否允许给字段赋 null 值 null 默认允许赋 null 值 not null 不允许赋 null 值 key 键值类型:普通索引唯一索引全文索引主键外键 Default 默认值作用:当不被字段赋值时,使用默认值给字段赋值 不设置默认值是系统定义的是 null default 值 Extra 额外设置,字段是否设置为自动增加 , 默认没有自动增长功能 案例: 1)建库 Mysql>create database db2; 2)进库 use db2; 3)建表 Mysql>create table t2( >name char(3), >level int(3)zerofill ); Mysql>create table t5( >classroom char(7)default"nsd1801", >name char(5)not null, >age tinyint(2)unsigned zerofill default 18, >sex enum("boy","girl")not null default"boy" ); 4) 表里建值 insert into db2.t1 values("bob",1);

ORACLE支持五种类型的完整性约束

不羁的心 提交于 2019-12-10 05:15:40
ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CHECK (检查)--检查在约束中指定的条件是否得到了满足. UNIQUE (唯一)--保证在指定的列中没有重复值.在该表中每一个值或者每一组值都将是唯一的. PRIMARY KEY (主键)--用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束. POREIGN KEY (外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键. 来源: oschina 链接: https://my.oschina.net/u/2277088/blog/691714

【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)

心不动则不痛 提交于 2019-12-09 13:45:51
【SSH进阶之路】Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,采用对象化的思维操作关系型数据库。 【SSH进阶之路】Hibernate搭建开发环境+简单实例(二) ,小编搭建了基本Hibernate的开发环境,并做了一个简单实例,对它的基本原理有了一个理性的认识。 【SSH进阶之路】Hibernate基本映射(三) ,我们介绍了Hibernate的基本映射(即对一个实体进行映射)的相关概念,并给大家实现相关实例,比较简单。 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四) ,我们介绍了多对一的关联映射,并详细了解说了,映射技巧,这篇我们依旧使用此映射技巧,帮助大家更好的理解。 下面开始今天的愉快之旅。 映射原理 两个实体对象之间是一对一的关联映射,即一个对象只能与另外唯一的一个对象相对应。例如:一个人(Person)只有一张身份证(IdCard)。我们看一下这个例子的对象模型,如下图所示: 对象模型 从上图中可以看出: 1、一个人只有一张身份证,唯一的一个身份证号,对象之间是一对一的关系; 2、人(Person)持有身份证(IdCard)的引用,所以,两个对象关系维护由person端决定。 从对象模型映射成关系模型,有两种方式:主键关联和唯一外键关联,我们继续看下面的内容。 分类: 主键关联: 1

JPA注解大全详解参考手册

♀尐吖头ヾ 提交于 2019-12-09 10:47:37
JPA注释详解参考手册 JPA和Hibernate的关系 JPA(Java Persistence API) ,是Java EE 5的标准ORM接口,也是ejb3规范的一部分。 Hibernate 是之前很流行的ORM框架,也是JPA的一个实现,其它还有Toplink之类的ROM框架。 JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现。 Hibernate主要是通过三个组件来实现的: hibernate-core :Hibernate的核心实现,提供了Hibernate所有的核心功能。 hibernate-entitymanager :Hibernate实现了标准的JPA,可以把它看成hibernate-core和JPA之间的适配器,它并不直接提供ORM的功能,而是对hibernate-core进行封装,使得Hibernate符合JPA的规范。 hibernate-annotation :Hibernate支持annotation方式配置的基础,它包括了标准的JPA annotation以及Hibernate自身特殊功能的annotation。 Entity @Entity说明这个class是实体类,并且使用默认的orm规则,即class名对应数据库表中表名,class字段名即表中的字段名。 (如果想改变这种默认的orm规则,就要使用

sqlite rowid与主键

谁说我不能喝 提交于 2019-12-07 16:22:39
rowid和 Integer主键及自增属性 大多数情况下,sqlite3的表都有一个rowid(也叫oid,_rowid_),这是一个64位的整数,并作为sqlite存储结构B树的主键.因此使用rowid查询会比以其他设定的主键查询,速度会非常快. 在做插入操作的时候,对于rowid的值通常情况下不要去指定,让系统自己去决定该去何值。因为sqlite会通过SQLITE_SEQUENCE来追踪表的rowid取值情况.而且sqlite定义了rowid的取值算法:在未超出rowid的范围内,待插入记录的rowid总是表中存在过的的rowid最大值+1。比如依次插入5条记录,此时最后一条记录的rowid是5,如果把这条记录删除再插入新记录,此时新纪录的rowid是6.而当rowid达到所能表达的最大值时,这时如果有新纪录要插入,系统就会随机从之前的没有使用过的正整数中随机取一个作为rowid(就是之前删除过的).若没有未使用的正整数并且你没有在插入的时候制定rowid为某一个负数的话,系统就会抛出SQLITE_FULL的错误. 如果在创建表的时候设置了主键,并且设置主键的那列是integer(不是int,short integer等等),并且主键没有设定降序时,这时的主键是rowid的别名,换言之,主键和rowid没有区别.如果我们再设定主键autoincrement属性时

SQL语句修改数据库表结构

点点圈 提交于 2019-12-07 16:12:37
一、查看表结构 1 、查看表的基本结构语句: DESCRIBE `DEPT` ; 2 、查看表详细结构语句: SHOW CREATE TABLE `DEPT` ; 二、对表的操作 1、增加表 CREATE TABLE `dept` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `description` varchar(255) DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 2、删除表 DROP TABLE `DEPT`; 注意: 删除被其他表关联的父表则先要删除外键约束,然后再删除父表。 3、重命名表 ALTER TABLE `DEPT` RENAME `DEPT1`; 三、对数据的操作 1、插入数据 INSERT INTO `DEPT` VALUES(NULL,'ZHANGSAN',NULL); 遇到问题: 问题 1 1366 - Incorrect string value: '\xBF\xE9' for column 'name' at row 1 解决方法: 修改编码格式,因为插入的中文字符编码不是UTF-8。打开文本框,选择另存为

数据库----mysql表的约束和查询

江枫思渺然 提交于 2019-12-06 16:16:30
一,mysql中表的约束   为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以 确保数据库中存储的数据正确、有效、相容。 约束条件与数据类型的宽度一样,都是可选参数,主要分为以下几种: NOT NULL :非空约束,指定某列不能为空; 是否可空,null表示空,非字符串 not null - 不可空 null - 可空 mysql> create table t12 (id int not null); Query OK, 0 rows affected (0.02 sec) mysql> select * from t12; Empty set (0.00 sec) mysql> desc t12; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | NO | | NULL | | +-------+---------+------+-----+---------+-------+ 1 row

1000行MySQL学习笔记,不怕你不会,就怕你不学!

旧时模样 提交于 2019-12-06 12:47:49
🔸Windows服务 -- 启动MySQL net start mysql-- 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意:等号与值之间有空格) 🔸连接与断开服务器 mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- 显示系统变量信息 🔸数据库操作 -- 查看当前数据库 SELECT DATABASE();-- 显示当前时间、用户名、数据库版本 SELECT now(), user(), version()-- 创建库 CREATE DATABASE[ IF NOT EXISTS] 数据库名 数据库选项 数据库选项: CHARACTER SET charset_name COLLATE collation_name-- 查看已有库 SHOW DATABASES[ LIKE PATTERN ]-- 查看当前库信息 SHOW CREATE DATABASE 数据库名-- 修改库的选项信息 ALTER DATABASE 库名 选项信息-- 删除库 DROP DATABASE[ IF EXISTS] 数据库名 同时删除该数据库相关的目录及其目录内容 🔸表的操作 *请左右滑动阅览 -- 创建表 CREATE [