-
数据库SQL实践37:对first_name创建唯一索引uniq_idx_firstname
2018-11-27 09:47:38用create函数创建唯一索引和普通索引。 create unique index uniq_idx_firstname on actor(first_name); create index idx_lastname on actor(last_name); mysql数据库还可以 alter table actor add unique ...思路:
用create函数创建唯一索引和普通索引。
create unique index uniq_idx_firstname on actor(first_name); create index idx_lastname on actor(last_name);
mysql数据库还可以
alter table actor add unique index uniq_idx_firstname(first_name); alter table actor add index idx_lastname(last_name)
-
唯一索引
2019-12-03 05:00:18唯一性索引可以用以下几种方式创建: 创建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表); 修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表); 创建表的时候...唯一索引
这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。唯一性索引可以用以下几种方式创建:
创建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );
创建表结构
create table ddd(id int primary key auto_increment , name varchar(32) unique);
注意
unique字段可以为NULL,并可以有多NULL, 但是如果是具体内容,则不能重复,
但是不能存有重复的空字符串’’
-
创建非唯一索引脚本的方法
2010-07-02 09:44:46导出创建非唯一索引脚本的方法 在ORACLE里用逻辑备份工具exp导出数据时,如果使用默认参数, 会把索引一起导出来。当数据和索引小的时候,我们可能不太会计较导入时间; 如果数据和索引大的时候,就应该考虑导入时间的...导出创建非唯一索引脚本的方法
在ORACLE里用逻辑备份工具exp导出数据时,如果使用默认参数, 会把索引一起导出来。当数据和索引小的时候,我们可能不
太会计较导入时间; 如果数据和索引大的时候,就应该考虑导入时间的问题了。
实际地说,二进制dmp备份文件里有些索引对备份是用处不大的, 导出时完全可以选择indexes=n的参数, 不备份它们。这样
不仅可以缩短导入导出时间,还可以节省备份文件的存储空间。这种索引类型是非唯一(nounique)的。我们可以根据ORACLE数
据字典dba_indexes和dba_ind_columns里的信息生成创建索引的脚本。在导入完成后再运行这些创建索引的脚本。
dba_indexes里记录了索引类型和存储参数等信息。
dba_ind_columns里记录了索引的字段信息, 它的结构如下:
SQL> desc dba_ind_columns;
name null? type
----------------------------------------- -------- -------------------------
index_owner not null varchar2(30)
index_name not null varchar2(30)
table_owner not null varchar2(30)
table_name not null varchar2(30)
column_name varchar2(4000)
column_position not null number
column_length not null number
descend varchar2(4)
column_name记录着有索引的字段, column_position标记着字段在创建索引时的位置, descend指索引的排序, 有asc和desc
两种,而desc排序方法用的较少,本文只考虑asc的情况。
步骤一:先创建一个视图index_nouniq_column_num列出非系统用户nonunique索引的用户名, 索引名和字段数量。
SQL> create view index_nouniq_column_num as select t1.owner,t1.index_name,count(0) as column_num
from dba_indexes t1,dba_ind_columns t2 where t1.uniqueness='NONUNIQUE'
and instr(t1.owner,'sys')=0 and t1.owner=t2.index_owner and t1.index_name=t2.index_name
group by t1.owner,t1.index_name order by t1.owner,column_num;
步骤二:为了处理方便,建一个索引字段临时表index_columns, 它的column_names记录了以逗号分隔,顺序排列的索引字段。
SQL> create table index_columns(
index_owner varchar2(30) not null,
index_name varchar2(30) not null,
column_names varchar2(512) not null)
tablespace users;
步骤三:把只有一个字段的索引内容插入索引字段临时表index_columns。
SQL> insert into index_columns select t1.owner,t1.index_name,t2.column_name from
index_nouniq_column_num t1,dba_ind_columns t2
where t1.column_num=1 and t1.owner=t2.index_owner and t1.index_name=t2.index_name
order by t1.owner,t1.index_name;
SQL> commit;
步骤四:把多个字段的索引内容插入索引字段临时表index_columns。
用到以下一个函数getcloumns和过程select_index_columns。
函数getcloumns:
create or replace function getcloumns(
index_owner1 in varchar2,
index_name1 in varchar2,
column_nums1 in number) return varchar2
is
all_columns varchar2(512);
total_num number;
i number;
cursor c1 is select column_name from dba_ind_columns where index_owner=index_owner1 and
index_name=index_name1 order by column_position;
dummy c1%rowtype;
begin
total_num:=column_nums1;
open c1;
fetch c1 into dummy;
i:=0;
while c1%found loop
i:=i+1;
if (i=total_num) then
all_columns:= all_columns||dummy.column_name;
else
all_columns:= all_columns||dummy.column_name||',';
end if;
fetch c1 into dummy;
end loop;
close c1;
return all_columns;
exception
when no_data_found then
return all_columns;
end;
/
过程select_index_columns:
create or replace procedure select_index_columns
is
all_columns varchar2(2000);
cursor c1 is select * from index_nouniq_column_num where column_num>=2;
dummy c1%rowtype;
begin
open c1;
fetch c1 into dummy;
while c1%found loop
select getcloumns(dummy.owner,dummy.index_name,dummy.column_num) into all_columns from dual;
insert into index_columns values(dummy.owner,dummy.index_name,all_columns);
fetch c1 into dummy;
end loop;
commit;
close c1;
exception
when others then
rollback;
end;
/
SQL> exec select_index_columns;
执行select_index_columns过程就可以把多个字段的索引内容插入索引字段临时表了。
步骤五:最后运行create_now_index.sql,根据索引字段临时表index_columns和dba_indexes在路径/oracle_backup/log
下生成创建非唯一索引脚本create_index.sql。
create_now_index.sql内容:
set heading off;
set pagesize 5000;
truncate table index_columns;
-- 把多个字段的索引内容插入索引字段临时表
exec select_index_columns;
-- 把只有一个字段的索引内容插入索引字段临时表
insert into index_columns select t1.owner,t1.index_name,t2.column_name
from index_nouniq_column_num t1,dba_ind_columns t2
where t1.column_num=1 and t1.owner=t2.index_owner and t1.index_name=t2.index_name
order by t1.owner,t1.index_name;
commit;
spool /oracle_backup/log/create_index.sql;
SELECT 'CREATE INDEX '||t1.owner||'.'||t1.index_name|| chr(10) ||' ON '||t1.table_name||
' ('||column_names||')'|| chr(10) ||' TABLESPACE '||t1.tablespace_name|| chr(10) ||
' PCTFREE '||t1.pct_free || chr(10) ||' STORAGE (INITIAL '||t1.initial_extent||
' NEXT '||t1.next_extent||' PCTINCREASE '||t1.pct_increase||');'|| chr(10) || chr(10)
FROM dba_indexes t1,index_columns t2
WHERE t1.owner=t2.index_owner and t1.index_name=t2.index_name
ORDER BY t1.owner, t1.table_name;
spool off; -
创建了联合索引还用在单个字段上创建索引吗_MySQL数据库索引与数据完整性
2020-11-30 21:57:10在使用group by order by子句进行数据检索时,利用索引可以减少排序和分组的时间; 注意:一个表最多可以有16个索引;可以由单个字段创建索引,也可以在多个字段的组合上创建索引,最多不超过15个字段。 二、索引的...一、索引的作用:
快速读取数据;
保证数据记录的唯一性;
实现表与表之间的参照完整性;
在使用group by order by子句进行数据检索时,利用索引可以减少排序和分组的时间; 注意:
一个表最多可以有16个索引;
可以由单个字段创建索引,也可以在多个字段的组合上创建索引,最多不超过15个字段。 二、索引的分类: 按B-树形式存储的主要索引的分类: 1、普通索引(index)没有唯一性要求; 2、唯一索引(unique)必须具有唯一性; 3、主键(primary key)是一种唯一性索引,可以通过修改表的方式加入主键,但每个只能有一个主键。 三、索引的利弊: 1、索引可加快查询的速度(利) 2、索引会增大表文件的容量(弊) 3、在更新含有索引列的数据时,由于索引也要更新,所以会降低添加、删除、修改和其他写入操作的效率(弊) 四、创建索引 1、在创建表时指定索引: 例:在当前数据库创建一个xs表,包含学号、姓名、身份证三个字段,要求: 学号为主索引、姓名为普通索引、sfz为唯一索引: Create table if not exists xs( 学号 char(6) not null primary key, 姓名 char(4),身份证 char(18), Index xm_xs(姓名), Unique index sfz_xs(身份证)); 2、为已建好的表添加索引: 2.1使用create index语句创建索引 使用create index语句可以在一个已创建好的表上创建索引,一个表可以创建多个索引。 2.2创建命令: Create [unique] index index_name On tb_name(col_name); Create index 索引名 on 表名(字段名) 注意:此命令语句不能创建主索引,创建索引时必须为它取名。 例:为xsl表的姓名字段创建一个名为xm_xsl的索引索引,并查看 Create index xm_xsl on xsl(姓名); Desc xsl; 可以使用整个字段作为索引,也可以使用字段的一部分作为一个索引; 例2:使用xs表的学号前3位数字,创建一个索引xh_xsl,并查看 Create index xh_xsl on xsl (学号(3)); Show index from xsl; 五、使用alter table语句添加索引 由两个以上的字段组合而成的索引叫复合索引。 Alter table tb_name add index In_name(index_xol_name,………) 例:在xs表中,为学号添加一个主索引,为出生日期和姓名添加一个复合索引mark,并查看 Create table xs6 as select * from xsl; Alter table xs6 Add primary key(学号), Add index mark(出生日期,姓名); 例2:在kb中为课程名添加一个候选索引kcm_kb,并查看 Alter table kb add unique index kcm_kb(课程名); 或create unique index kcm_kb on kb(课程名); 例3:在cjb中为成绩字段创建一个普通索引cj_cj,并查看 Alter table cjb add index cj_cjb(成绩 desc); 查看索引的方法: 1、 desc 表名; 2、 show index from 表名; 3、 show create table 表名; 删除索引: 当一个索引不需要是可以用drop index语句或alter table语句删除;
使用drop index 索引名 on 表名; 例:删除xsl表中的xh_xsl索引 drop index xh_xsl on xsl;
使用alter table 表名 drop index 索引名; 例:删除xsl表中的xm_xsl索引 alter table xsl drop index xm_xsl;
使用alter table 语句删除索引语法: Alter table tb_name(表名) Drop primaty key //删除主键 Drop index index_name(索引名) //删除索引 Drop foreign key fk_name(索引名) //删除外键 例:删除xs表中的主键和mark索引 Alter table xs Drop primary key, Drop index mark; 注意:不能使用drop来创建主键,也不能使用drop命令删除主键 数据完整性约束 在了解数据完整性约束先了解什么是子表什么是父表: 子表与父表: 例:1:n(一对多关系) 1:1方为父表 n:n方为字表 查看外键:show crate table 表名 数据完整性约束 参照完整性约束 外键(foreign key)约束标识表之间的关系,用于强制参照完整性。 可在创建表时定义外键,也可在修改表时添加外键。 当两个表存在一对多关系时,一方是父表,多方是子表,如果父子表中相同的这段,在父表中主键,则在子表中创建外键,以保证子表外键字段的值必须来自父表,同时可设置两个表中数据的一致性,实现参照完整性。 -
mysql 唯一索引_MySQL 唯一索引的使用
2021-01-18 18:19:25如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:1)简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率;2).... -
mysql唯一索引什么意思_MySQL唯一索引什么意思
2021-02-02 06:52:12如果确定某个数据列只包含彼此各不相同的值,在为这个数据列创建索引的时候,就应该用关键字UNIQUE把它定义为一个...事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现... -
mysql如何用alter创建索引_MySQL使用ALTER TABLE创建索引
2021-01-29 18:06:35在已经存在的表中创建索引,除了使用CREATE INDEX,还可以使用ALTER TABLE语句,语法格式ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX索引名 (字段名 [(长度)] [ASC|DESC])参数说明UNIQUE、FULLTEXT和... -
mysql联合唯一索引的区别_mysql中,索引,主键,唯一索引,联合索引的区别
2021-01-19 07:47:36索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是...也就是说,唯一索引可以保证数据记录的唯一... -
如何删除通过主键和唯一约束创建的索引
2011-03-24 18:03:00普通的索引可以用drop来删除: drop index idx_table; 但是在建立表的时候,主键自动在主键列上建立一个聚集索引,以及通过给表增加的一个唯一约束也会自动增加一个唯一索引,... -
arcmap创建空间索引_mysql搜索引擎你会用了么
2020-12-14 20:11:45使用 UNIQUE 参数可以设置,创建唯一索引时,限制索引值,必须唯一(比如我们建表时的主键,就是默认的唯一索引);3,全文索引;使用 FULLTEXT 参数可以设置,全文索引只能创建在 CHAR,VARCHAR,TEXT 类型的字段上。... -
mysql唯一索引和联合索引的区别_mysql中,索引,主键,唯一索引,联合索引的区别...
2021-02-07 11:15:50索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是...也就是说,唯一索引可以保证数据记录的唯一... -
什么是索引?如何创建索引,索引的类型
2021-01-21 14:32:50在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX 或 ALTER TABLE来为表增加索引。 1.ALTER TABLE可以用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。 2.CREATE INDEX可对表增加普通索引或UNIQUE... -
MySQL创建索引、重建索引、查询索引、删除索引
2019-05-31 16:27:391、创建索引 索引的创建可以在CREATE TABLE语句... 以下命令语句分别展示了如何创建主键索引(PRIMARY KEY)、 唯一索引(UNIQUE)、 全文索引(FULLTEXT)、 普通索引(INDEX)的方法。 mysql>ALTER TABLE `ta... -
索引,主键,唯一索引,联合索引 的区别
2020-05-25 10:35:40简单描述MySQL中,索引,主键,唯一索引,联合索引 的区别,对数据库的性能有什么影响 索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们 包含着对...也就是说,唯一索引可以保证数据记录的唯 -
索引,主键,唯一索引,联合索引的区别
2018-05-07 08:41:28索引是一种特殊的文件,它们包含着对所有记录的引用指针。 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。 普通索引允许被索引...也就是说,唯一索引可以保证数据记录的唯一性。 ... -
创建索引
2009-09-10 18:41:00今天用mysql 的时候,感觉很简单的sql语句,竟然跑的那么慢...这是因为,创建索引可以大大提高系统的性能。 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快 数据的检索速度,这 -
MySQL创建索引
2018-05-07 14:11:06创建索引直接用工具 navicatformysql 就可以了,选择要创建的表点设计表按钮,在索引里面填写名字、选择索引字段、索引类型、索引方式。简单介绍下:类型Normal和Unique Normal普通索引, Unique 唯一索引,不同的... -
mysql去掉索引命令_mysql 创建索引、修改索引、删除索引的命令
2021-01-18 22:57:26mysql中的所以分为:主键索引(primary key),唯一索引(unique),全文索引(fulltext),普通索引(index)创建和删除索引索引的创建可以在CREATETABLE语句中进行,也可以单独用CREATE INDEX或ALTER TABLE来给表增加索引... -
发现mysql一个表可以有几个唯一索引
2018-04-26 09:07:44如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:一是简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率。... -
mysql 如何创建索引
2019-07-08 23:15:32唯一索引 普通索引 全文索引 … 创建索引 在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX或ALTER TABLE来为表增加索引。 ALTER TABLE 1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE ... -
MongoDB中唯一索引(Unique)的那些事
2021-01-19 22:55:36缺省情况下,MongoDB的_id字段在创建集合的时候会自动创建一个唯一索引。本文主要描述唯一索引的用法。 关于什么是索引以及唯一索引这里就不做说明了,不清楚的可以自行谷歌或者百度。是什么引起我写这篇文章呢,这... -
mysql中,索引,主键,唯一索引,联合索引的区别
2015-08-17 20:15:27索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问...也就是说,唯一索引可以保 -
唯一约束 和 唯一索引 有什么区别?
2015-09-10 16:50:00尽管唯一的、系统要求的索引是用来加强唯一约束,但是定义唯一约束和创建唯一索引之间还是有区别的。即使这二者之间都可以增强唯一性,唯一索引允许NULL值并且一般不能用在指示性约束中。换句话说,唯一约束不允许... -
判断是否需要创建索引
2021-01-15 15:11:14主键自动建立唯一索引 频繁作为查询条件的字段应该创建索引 查询中与其他表关联的字段,外键关系建立索引 频繁更新的字段不适合创建索引 – 因为每次更新不只更新记录还会更新索引 Where里用不到的字段的不创建索引 ... -
MYSQL索引创建与删除
2020-10-16 16:15:09一、创建索引 索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER TABLE来给表...// 创建唯一索引 alter table table_name add unique index_name (column_list) ; // 创建主键索引 alter ta -
唯一索引、主键、Unique约束
2017-07-08 11:31:57若要为admin_id创建唯一索引,则语句为: Create [Unique] Index 索引名 on 表名 (列名) create [Unique] Index IDX_admin_id on Admin(admin_id) 也可以用图形化界面,如MySQL中,设计表->索引, -
mysql 创建索引、修改索引、删除索引的命令
2012-09-26 22:19:00mysql中的所以分为:主键索引(primary key),唯一索引(unique),全文索引(fulltext),普通索引(index) 创建和删除索引索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER TABLE来...