CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL,
PRIMARY KEY(ID) ); 当然也可以用 ALTER命令。记住:一个表只能有一个主键。
(4)组合索引
为了形象地对比单列索引和组合索引,为表添加多个字段:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL,
city VARCHAR(50) NOT NULL, age INT NOT NULL );
为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是将 name, city, age建到一个索引里:
ALTER TABLE mytable ADDINDEX name_city_age (name(10),city,age);
建表时,usernname长度为 16,这里用
10。这是因为一般情况下名字的长度不会超过10,这样会加速索引查询速度,还会减少索引文件的大小,提高INSERT的更新速度。
SELECT t.Name FROM mytable t LEFT JOINmytable m ON t.Name=m.username
WHERE m.age=20 AND m.city='郑州'
此时就需要对city和age建立索引,由于mytable表的userame也出现在了JOIN子句中,也有对它建立索引的必要。
CREATE UNIQUE INDEX indexName ON mytable(username(length))
◆修改表结构
ALTER mytable ADD UNIQUE [indexName] ON (username(length))
◆创建表的时候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );
(3)主键索引
它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) ); 当然也可以用 ALTER 命令。记住:一个表只能有一个主键。
(4)组合索引
为了形象地对比单列索引和组合索引,为表添加多个字段:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT NOT NULL ); 为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是将 name, city, age建到一个索引里:
ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age); 建表时,usernname长度为 16,这里用 10。这是因为一般情况下名字的长度不会超过10,这样会加速索引查询速度,还会减少索引文件的大小,提高INSERT的更新速度。
一.准备安装包官网下载:想亲自体验一下的,点击https://www.mysql.com/downloads/并按下面步骤来;步骤1:点击链接进入MySQL,光标向下滑到底部,点击community(GPL)Downloads>>,步骤2:可以看到有很多选择,点击MySQL Community Server进入步骤3:进入之...
数据库中的索引分为两种类型,分别是普通索引、唯一索引。下面让我们来分别介绍一下这两种索引。
第一种是普通索引,CREATE INDEX indexName ON mytable(username(length));创建表的时候直接指定。删除索引的语法:DROP INDEX [indexName] ON mytable;
第二种是唯一索引,它与普通索引是类似的,但也存在不同之处,不同之处在于索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
以上三张图分别为创建索引、修改表结构、创建表时直接指定的数据。而且还有四种方式来添加数据表的索引,下面来分别介绍一下。
第一种方式:ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
第二种方法:ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
第三种方法:ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。
第四种方法:ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。
索引的创建格式:
CREATE UNIUQE | BITMAP INDEX.
ON. | ASC | DESC,...)
| ASC | DESC:可以对多列进行联合索引,当为expression时即“基于函数的索引”
- 加载中...
樱田妮妮NiNi
4楼 · 2020-11-19 15:07
- 加载中...
小叮当
5楼 · 2020-11-19 15:17
- 加载中...
典典 - 给你一典典的学习帮助
6楼 · 2020-11-19 17:03
- 加载中...
小猪仔
7楼 · 2020-11-20 09:53
- 加载中...
茄子酱
8楼 · 2020-11-20 10:02
- 加载中...
爱学习的小巴
9楼 · 2020-11-20 15:20
- 加载中...
1
2
下一页
-
删除一些大文件时,不可避免地会对当前的I/O造成冲数据库
2021-11-10 09:46
回答 3
-
Redis数据库跟MongoDB数据库有什么区别呢数据库
2021-01-18 17:43
回答 2
-
【大数据基础】传统数据库发展方向数据库
2021-01-08 20:19
回答 5
-
【大数据基础】传统数据库结构主要有什么数据库
2021-01-08 20:15
回答 6
-
【数据库】mysql是用来做什么的数据库
mysql
2020-12-04 09:58
回答 11
-
【数据库】mysql常用查询命令数据库
mysql
2020-12-04 09:58
回答 8
-
【数据库】MySQL和sql的区别有哪些数据库
mysql
2020-12-03 09:45
回答 7
-
【数据库】MySQL怎么安装数据库
mysql
2020-12-03 09:44
回答 5
-
【Python基础】数据库如何修改视图数据库
2020-11-20 10:19
回答 10
-
常用的数据库有哪些数据库
2020-08-19 18:53
回答 4
已采纳
-
MySQL安装失败后如何完全卸载移除MySQLJAVA应用
数据库
2020-07-01 20:35
回答 3
-
mysql数据库主从复制的延迟问题怎么解决?数据库
2020-06-23 10:04
回答 1
-
Java数据库数据库
2020-04-26 18:56
回答 1
-
什么是数据库的数据独立性数据库
2020-04-16 10:53
回答 2
-
现在什么数据库最好用,哪个在企业中用的最多呢数据库
2020-04-14 10:15
回答 5
已采纳
没有解决我的问题,去提问
-
python中\n 是什么意思?
3 个回答
-
python中有哪些简单的算法
42 个回答
-
迭代器和生成器的区别?
28 个回答
-
请问python console是什么呢?
3 个回答
-
【Python基础】Python可以处理excel表格吗
27 个回答
-
【Python基础】Python是什么意思
27 个回答
-
python适合0基础学习吗?
29 个回答
-
编写python程序,解决公里与英里转换问题,要求输入英里数,计算出相应的公里数
5 个回答
-
【Python基础】Python多线程是什么意思
26 个回答
-
请问python 中三个点是什么意思啊?
10 个回答
-
0基础想从事编程,建议学习哪些编程语言,哪些好就业
39 个回答
- ChatGPT能否取代前端开发工程师?原来这些方面ChatGPT做不到!
0个评论
- 服务器从0搭建-【anaconda3+cuda+cudnn+conda环境创建+修改conda源】
0个评论
- Python基础实战100例第3期-判断闰年
0个评论
- Python自学教程第2期-求100以内奇数和
0个评论
- Python自学教程-Python基础实战100例
1个评论
- 学习Python基础教程-在线编程入门-Python教学
1个评论
- OA系统开发任务流程思考
2个评论
- 【Python爬虫】简单实现中英翻译器
2个评论
您已邀请15人回答
查看邀请
- 擅长该话题的人
- 回答过该话题的人
- 我关注的人
-
( | ASC | DESC,
TABLESPACE
STORAGE
LOGGING | NOLOGGING
COMPUTE STATISTICS
NOCOMPRESS | COMPRESS
NOSORT | REVERSE
PARTITION | GLOBAL PARTITION
UNIQUE | BITMAP:指定UNIQUE为唯一值索引,BITMAP为位图索引,省略为B-Tree索引。
TABLESPACE:指定存放索引的表空间(索引和原表不在一个表空间时效率更高)
STORAGE:可进一步设置表空间的存储参数
LOGGING | NOLOGGING:是否对索引产生重做日志(对大表尽量使用NOLOGGING来减少占用空间并提高效率)
COMPUTE STATISTICS:创建新索引时收集统计信息
NOCOMPRESS | COMPRESS:是否使用“键压缩”(使用键压缩可以删除一个键列中出现的重复值)
NOSORT | REVERSE:NOSORT表示与表中相同的顺序创建索引,REVERSE表示相反顺序存储索引值
PARTITION | NOPARTITION:可以在分区表和未分区表上对创建的索引进行分区
使用USER_IND_COLUMNS查询某个TABLE中的相应字段索引建立情况
使用DBA_INDEXES/USER_INDEXES查询所有索引的具体设置情况。
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。
索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。
一般是作为主键的性来建立索引
先说说一个误区:有人认1653为:只要建立索引就专能显著提高查属询速度。这个想法是很错误的。建立非聚集索引,确实,一般情况下可以提高速度,但是一般并不会达到你想要的速度。只有在适当的列建立适当的(聚集)索引,才能达到满意的效果。
下面的表总结了何时使用聚集索引或非聚集索引(很重要)。
动作描述
使用聚集索引
使用非聚集索引
列经常被分组排序
应
应
返回某范围内的数据
应
不应
一个或极少不同值
不应
不应
小数目的不同值
应
不应
大数目的不同值
不应
应
频繁更新的列
不应
应
外键列
应
应
主键列
应
应
频繁修改索引列
不应
应
别的就要看你的理解了。
索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。下面介绍几种常见的MySQL索引类型。
在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表:
CREATE TABLE mytable( IDINTNOT NULL, username VARCHAR(16) NOT NULL
); 我们随机向里面插入了10000条记录,其中有一条:5555, admin。
在查找username="admin"的记录 SELECT * FROMmytable WHERE
username='admin';时,如果在username上已经建立了索引,MySQL无须任何扫描,即准确可找到该记录。相反,MySQL会扫描所有记录,即要查询10000条记录。
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。
MySQL索引类型包括:
(1)普通索引
这是最基本的索引,它没有任何限制。它有以下几种创建方式:
◆创建索引
CREATE INDEXindexName ON mytable(username(length));
如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length,下同。
◆修改表结构
ALTERmytable ADDINDEX[indexName] ON (username(length))
◆创建表的时候直接指定
CREATE TABLE mytable( IDINTNOT NULL, username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length)) ); 删除索引的语法:
DROP INDEX [indexName] ON mytable;
(2)唯一索引
它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
◆创建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
◆修改表结构
ALTERmytable ADDUNIQUE [indexName] ON (username(length))
◆创建表的时候直接指定
CREATE TABLE mytable( IDINTNOT NULL, username VARCHAR(16) NOT NULL,
UNIQUE [indexName] (username(length)) );
(3)主键索引
它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL,
PRIMARY KEY(ID) ); 当然也可以用 ALTER命令。记住:一个表只能有一个主键。
(4)组合索引
为了形象地对比单列索引和组合索引,为表添加多个字段:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL,
city VARCHAR(50) NOT NULL, age INT NOT NULL );
为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是将 name, city, age建到一个索引里:
ALTER TABLE mytable ADDINDEX name_city_age (name(10),city,age);
建表时,usernname长度为 16,这里用
10。这是因为一般情况下名字的长度不会超过10,这样会加速索引查询速度,还会减少索引文件的大小,提高INSERT的更新速度。
如果分别在
usernname,city,age上建立单列索引,让该表有3个单列索引,查询时和上述的组合索引效率也会大不一样,远远低于我们的组合索引。虽然此时有了三个索引,但MySQL只能用到其中的那个它认为似乎是最有效率的单列索引。
建立这样的组合索引,其实是相当于分别建立了下面三组组合索引:
usernname,city,age usernname,city usernname 为什么没有
city,age这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个SQL就会用到这个组合索引:
SELECT * FROMmytable WHREE username="admin" AND city="郑州" SELECT * FROM
mytable WHREE username="admin" 而下面几个则不会用到:
SELECT * FROM mytable WHREE age=20 AND city="郑州" SELECT * FROM mytable WHREE
city="郑州"
(5)建立索引的时机
到这里我们已经学会了建立索引,那么我们需要在什么情况下建立索引呢?一般来说,在WHERE和JOIN中出现的列需要建立索引,但也不完全如此,因为MySQL只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引。例如:
SELECT t.Name FROM mytable t LEFT JOINmytable m ON t.Name=m.username
WHERE m.age=20 AND m.city='郑州'
此时就需要对city和age建立索引,由于mytable表的userame也出现在了JOIN子句中,也有对它建立索引的必要。
刚才提到只有某些时候的LIKE才需建立索引。因为在以通配符%和_开头作查询时,MySQL不会使用索引。例如下句会使用索引:
SELECT * FROM mytable WHERE username like'admin%' 而下句就不会使用:
SELECT * FROM mytable WHEREt Name like'?min' 因此,在使用LIKE时应注意以上的区别。
(6)索引的不足之处
上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:
◆虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
◆建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快。
索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。
(7)使用索引的注意事项
使用索引时,有以下一些技巧和注意事项:
◆索引不会包含有NULL值的列
只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。
◆使用短索引
对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。
◆索引列排序
MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order
by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
◆like语句操作
一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “?a%” 不会使用索引而like
“aaa%”可以使用索引。
◆不要在列上进行运算
select * from users where YEAR(adddate)<2007>将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成
select * from users where adddate<‘2007-01-01’;
◆不使用NOT IN和<>操作
以上,就对其中MySQL索引类型进行了介绍。
索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。下面介绍几种常见的MySQL索引类型。
在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录,其中有一条:5555, admin。
在查找username="admin"的记录 SELECT * FROM mytable WHERE username='admin';时,如果在username上已经建立了索引,MySQL无须任何扫描,即准确可找到该记录。相反,MySQL会扫描所有记录,即要查询10000条记录。
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。
MySQL索引类型包括:
(1)普通索引
这是最基本的索引,它没有任何限制。它有以下几种创建方式:
◆创建索引
CREATE INDEX indexName ON mytable(username(length)); 如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length,下同。
◆修改表结构
ALTER mytable ADD INDEX [indexName] ON (username(length))
◆创建表的时候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );
删除索引的语法:
DROP INDEX [indexName] ON mytable;
(2)唯一索引
它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
◆创建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
◆修改表结构
ALTER mytable ADD UNIQUE [indexName] ON (username(length))
◆创建表的时候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );
(3)主键索引
它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) ); 当然也可以用 ALTER 命令。记住:一个表只能有一个主键。
(4)组合索引
为了形象地对比单列索引和组合索引,为表添加多个字段:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT NOT NULL ); 为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是将 name, city, age建到一个索引里:
ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age); 建表时,usernname长度为 16,这里用 10。这是因为一般情况下名字的长度不会超过10,这样会加速索引查询速度,还会减少索引文件的大小,提高INSERT的更新速度。
如果分别在 usernname,city,age上建立单列索引,让该表有3个单列索引,查询时和上述的组合索引效率也会大不一样,远远低于我们的组合索引。虽然此时有了三个索引,但MySQL只能用到其中的那个它认为似乎是最有效率的单列索引。
建立这样的组合索引,其实是相当于分别建立了下面三组组合索引:
usernname,city,age usernname,city usernname 为什么没有 city,age这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个SQL就会用到这个组合索引:
SELECT * FROM mytable WHREE username="admin" AND city="郑州"
SELECT * FROM mytable WHREE username="admin"
而下面几个则不会用到:
SELECT * FROM mytable WHREE age=20 AND city="郑州"
SELECT * FROM mytable WHREE city="郑州"
比如有一条语句是这样的:select * from users where area=’beijing’ and age=22;
如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在area、age两列上创建复合索引的话将带来更高的效率。
如果我们创建了 (area, age,salary)的复合索引,那么其实相当于创建了 (area,age,salary)、(area,age)、(area)三个索引,这被称为“最佳左前缀”特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。
数据库中的索引分为两种类型,分别是普通索引、唯一索引。下面让我们来分别介绍一下这两种索引。
第一种是普通索引,CREATE INDEX indexName ON mytable(username(length));创建表的时候直接指定。删除索引的语法:DROP INDEX [indexName] ON mytable;
第二种是唯一索引,它与普通索引是类似的,但也存在不同之处,不同之处在于索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
还有四种方式来添加数据表的索引,下面来分别介绍一下。
第一种方式:ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
第二种方法:ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
第三种方法:ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。
第四种方法:ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。
进入查询窗口后,输入下面的语句:CREATE INDEX mycolumn_index ON mytable (myclumn)
这个语句建立了一个名为mycolumn_index的索引。你可以给一个索引起任何名字,但你应该在索引名中包含所索引的字段名,这对你将来弄清楚建立该索引的意图是有帮助的。
注意:在本书中你执行任何SQL语句,都会收到如下的信息:
This command did not return data,and it did not return any rows
这说明该语句执行成功了。
索引mycolumn_index对表mytable的mycolumn字段进行。这是个非聚簇索引,也是个非唯一索引。(这是一个索引的缺省属性)
如果你需要改变一个索引的类型,你必须删除原来的索引并重建 一个。建立了一个索引后,你可以用下面的SQL语句删除它:
DROP INDEX mytable.mycolumn_index
注意在DROP INDEX 语句中你要包含表的名字。在这个例子中,你删除的索引是mycolumn_index,它是表mytable的索引。
要建立一个聚簇索引,可以使用关键字CLUSTERED。)记住一个表只能有一个聚簇索引。(这里有一个如何对一个表建立聚簇索引的例子:
CREATE CLUSTERED INDEX mycolumn_clust_index ON mytable(mycolumn)
如果表中有重复的记录,当你试图用这个语句建立索引时,会出现错误。但是有重复记录的表也可以建立索引;你只要使用关键字ALLOW_DUP_ROW把这一点告诉SQL Sever即可:
CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)
WITH ALLOW_DUP_ROW
这个语句建立了一个允许重复记录的聚簇索引。你应该尽量避免在一个表中出现重复记录,但是,如果已经出现了,你可以使用这种方法。
要对一个表建立唯一索引,可以使用关键字UNIQUE。对聚簇索引和非聚簇索引都可以使用这个关键字。这里有一个例子:
CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)
这是你将经常使用的索引建立语句。无论何时,只要可以,你应该尽量对一个对一个表建立唯一聚簇索引来增强查询操作。
最后,要建立一个对多个字段的索引——复合索引——在索引建立语句中同时包含多个字段名。下面的例子对firstname和lastname两个字段建立索引:
CREATE INDEX name_index ON username(firstname,lastname)
这个例子对两个字段建立了单个索引。在一个复合索引中,你最多可以对16个字段进行索引。
用事务管理器建立索引
用事务管理器建立索引比用SQL语句容易的多。使用事务管理器,你可以看到已经建立的索引的列表,并可以通过图形界面选择索引选项。
使用事务管理器你可以用两种方式建立索引:使用Manage Tables窗口或使用Manage Indexes窗口。
要用Manage Tables 窗口建立一个新索引,单击按钮Advanced Options(它看起来象一个前面有一加号的表)。这样就打开了Advanced Options对话框。这个对话框有一部分标名为Primary Key(见图11.1)。
图11。1
要建立一个新索引,从下拉列表中选择你想对之建立索引的字段名。如果你想建立一个对多字段的索引,你可以选择多个字段名。你还可以选择索引是聚簇的还是非聚簇的。在保存表信息后,索引会自动被建立。在Manage Tables窗口中的字段名旁边,会出现一把钥匙。
你已经为你的表建立了“主索引”。主索引必须对不包含空值的字段建立。另外,主索引强制一个字段成为唯一值字段。
要建立没有这些限制的索引,你需要使用Manage Indexes窗口。从菜单中选择Manage|Indexes,打开Manage Indexes 窗口。在Manage Indexes 窗口中,你可以通过下拉框选择表和特定的索引。(见图11.2)。要建立一个新索引,从Index下拉框中选择New Index.,然后就可以选择要对之建立索引的字段。单击按钮Add,把字段加人到索引中。
图11。2
你可以为你的索引选择许多不同的选项。例如,你可以选择该索引是聚簇的还是非聚簇的。你还可以指定该索引为唯一索引。设计好索引后,单击按钮Build,建立该索引。
注意:
唯一索引是指该字段不能有重复的值,而不是只能建立这一个索引。
SQL核心语句
在第十章,你学会了如何用SQL SELECT 语句从一个表中取数据。但是,到现在为止,还没有讨论如何添加,修改或删除表中的数据。在这一节中,你将学习这些内容。
插入数据
向表中添加一个新记录,你要使用SQL INSERT 语句。这里有一个如何使用这种语句的例子:
INSERT mytable (mycolumn) VALUES (‘some data')
这个语句把字符串'some data'插入表mytable的mycolumn字段中。将要被插入数据的字段的名字在第一个括号中指定,实际的数据在第二个括号中给出。
INSERT 语句的完整句法如下:
INSERT [INTO] {table_name|view_name} [(column_list)] {DEFAULT VALUES |
Values_list | select_statement}
如果一个表有多个字段,通过把字段名和字段值用逗号隔开,你可以向所有的字段中插入数据。假设表mytable有三个字段first_column,second_column,和third_column。下面的INSERT语句添加了一条三个字段都有值的完整记录:
INSERT mytable (first_column,second_column,third_column)
VALUES (‘some data','some more data','yet more data')
注意:
你可以使用INSERT语句向文本型字段中插入数据。但是,如果你需要输入很长的字符串,你应该使用WRITETEXT语句。这部分内容对本书来说太高级了,因此不加讨论。要了解更多的信息,请参考Microsoft SQL Sever 的文档。
如果你在INSERT 语句中只指定两个字段和数据会怎么样呢?换句话说,你向一个表中插入一条新记录,但有一个字段没有提供数据。在这种情况下,有下面的四种可能:
如果该字段有一个缺省值,该值会被使用。例如,假设你插入新记录时没有给字段third_column提供数据,而这个字段有一个缺省值'some value'。在这种情况下,当新记录建立时会插入值'some value'。
如果该字段可以接受空值,而且没有缺省值,则会被插入空值。
如果该字段不能接受空值,而且没有缺省值,就会出现错误。你会收到错误信息:
The column in table mytable may not be null.
最后,如果该字段是一个标识字段,那么它会自动产生一个新值。当你向一个有标识字段的表中插入新记录时,只要忽略该字段,标识字段会给自己赋一个新值。
注意:
向一个有标识字段的表中插入新记录后,你可以用SQL变量@@identity来访问新记录
的标识字段的值。考虑如下的SQL语句:
INSERT mytable (first_column) VALUES(‘some value')
INSERT anothertable(another_first,another_second)
VALUES(@@identity,'some value')
如果表mytable有一个标识字段,该字段的值会被插入表anothertable的another_first字段。这是因为变量@@identity总是保存最后一次插入标识字段的值。
字段another_first应该与字段first_column有相同的数据类型。但是,字段another_first不能是应该标识字段。Another_first字段用来保存字段first_column的值。
删除记录
要从表中删除一个或多个记录,需要使用SQL DELETE语句。你可以给DELETE 语句提供WHERE 子句。WHERE子句用来选择要删除的记录。例如,下面的这个DELETE语句只删除字段first_column的值等于'Delete Me'的记录:
DELETE mytable WHERE first_column='Deltet Me'
DELETE 语句的完整句法如下:
DELETE [FROM] {table_name|view_name} [WHERE clause]
在SQL SELECT 语句中可以使用的任何条件都可以在DELECT 语句的WHERE子句中使用。例如,下面的这个DELETE语句只删除那些first_column字段的值为'goodbye'或 second_column字段的值为 'so long'的记录:
DELETE mytable WHERE first_column='goodby' OR second_column='so long'
如果你不给DELETE 语句提供WHERE 子句,表中的所有记录都将被删除。你不应该有这种想法。如果你想删除应该表中的所有记录,应使用第十章所讲的TRUNCATE TABLE语句。
注意:
为什么要用TRUNCATE TABLE 语句代替DELETE语句?当你使用TRUNCATE TABLE语句时,记录的删除是不作记录的。也就是说,这意味着TRUNCATE TABLE 要比DELETE快得多
相关问题推荐
体步骤如下。1)下载并安装truncate。wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.9.tar.gztar -zxvf coreutils-8.9.tar.gzcd coreutils-8.9./configuremakecp src/truncate /usr/bin/2)如下是一个删除大文件的脚本。cat rm_large_file.......
NoSQL 的全称是 Not Only SQL,也可以理解非关系型的数据库,是一种新型的革命式的数据库设计方式,不过它不是为了取代传统的关系型数据库而被设计的,它们分别代表了不同的数据库设计思路。MongoDB:它是一个内存数据库,数据都是放在内存里面的。对数据的操...
数据仓库系统长期以来一直是企业 IT 架构的重要组成部分。随着开源技术的不断发展以及云端部署方式的不断深入,传统数据仓库的局限性日益凸显,难以适应新技术带来的市场变革,如何面向大数据技术进行数据仓库的优化、转型是企业 IT 管理者面临的重要挑战。处...
Java可实现与绝大多数主流数据库的连接与操作。日常企业开发以使用开源数据库居多。1)、MySQL数据库是目前使用最广泛最好的免费开源数据库2)、MariaDB数据库是MySQL的一个分支,保持与MySQL的高度兼容性,确保具有库二进制奇偶校验的直接替换功能,以及与My...
mysql是存放discuz所有数据信息的,比如用户的注册信息,用户发表的贴子和回帖,以及版块信息,上传的图片并不是存放在数据库里的,数据库只是记录图片的存放目录和名字。
常用命令比较多,看下面介绍的吧MYSQL常用查命令:mysql> select version(); 查看MySQL的版本号mysql> select current_date(); 查看MySQL的当前日期mysql> select version(),current_date(); 同时查看MySQL的版本号和当前日期mysql> show database...
一:什么是SQLSQL是一种数据库语言,可以定义和操作数据库。SQL由ISO(国际标准化组织)标准化,和其他数据库中几乎是相同的方式运行,SQL大致分为三种语言。它在控制和操作数据库时使用,它是一种在所有语句中组合动词和对象的语法。二:什么是MySQLMySQL是...
一.准备安装包官网下载:想亲自体验一下的,点击https://www.mysql.com/downloads/并按下面步骤来;步骤1:点击链接进入MySQL,光标向下滑到底部,点击community(GPL)Downloads>>,步骤2:可以看到有很多选择,点击MySQL Community Server进入步骤3:进入之...
打开Navicat打开mysql数据库连接点击要视图所在的数据库,并选中视图菜单,此时会显示所有视图右击要修改的视图,然后选择【设计视图】选择【视图创建工具】修改视图中显示的表或字段点击【预览】,此时可显示视图的sql定义和预览数据,然后点击【保存】,视...
常见的关系型数据库有mysql 、SQL Server、Oracle、Sybase、DB2等。关系型数据库是目前最受欢迎的数据库管理系统,技术比较成熟。1、MySQLMySQL是目前最受欢迎开源的SQL数据库管理系统,与其他的大型数据库Oracle、DB2、SQL Server等相比,MySQL虽然有它的不...
(1)控制面板 ---> 程序和功能 ---> 卸载MySQL Installer;(2)删除MySQL软件安装路径下的MySQL目录,默认目录为 C:\Program Files (x86)\MySQL ;(3)删除ProgramData下的MySQL数据文件目录,默认目录为 C:\ProgramData\MySQL (注意:ProgramData为隐藏...
mysql5.7的主从复制是多线程了,阿里在这块也很早就做过优化,如果还是用5.7以下的社区版本的话,最简单的方式也就是垂直切分,按业务多分几个集群吧,然后一些读写频繁但对数据一致性要求不高的功能尽量扔redis实现...
数据抄独立性是 数据库系统的一个最重要的目标之一。它能使数据独立袭于 应用程序。数据独立性包括数据的物理独立性和逻辑独立性知。数据的独立性是数据库系统的最基本的特征之一 。数据独立性是指应用程序和数据结构之间相互独道立, 互不影响。...
互联网行业,使用MySQL社区版占绝大多数。金融,保险等对于数据安全及其敏感的行业,使用Oracle是主流,小部分使用IBM的DB2。其他实体行业,基本是Oracle和SQL Server平分天下。
等你来答
热门问答
相关文章
采纳回答
编辑标签
举报内容
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
付费偷看金额在0.1-10元之间