mysql如何更新索引_(六)6-4Mysql数据修改和索引
mysql修改、删除数据记录
⽤update修改记录
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
update⽤于对满⾜where条件的⾏进⾏修改,通过set之⼼column的新值
例如
update student set age=29 where stdid=10001;
如果不带where条件,将对全表更新
可以使⽤where_condition,结合order by和limit限定更新的⾏数
update 的limit⼀定要结合order by ,否则会导致数据不⼀致
delete语法
DELETE FROM table_name [WHERE Clause]
不带where条件的delete是对全表进⾏删除操作
可以结合order by和limit 做排序删除
对⽐不带where条件的delete,truncate table 和drop table
delete 不带条件,逐⾏删除记录
tuncate table 整体删除数据⽂件,但是保留scheama信息
drop table同时删除数据⽂件和schema
索引
MySQL索引的概念
索引是⼀种特殊的⽂件(InnoDB数据表上的索引是表空间的⼀个组成部分),它们包含着对数据表⾥所有记录的引⽤指针。更通俗的说,数据库索引好⽐是⼀本书前⾯的⽬录,能加快数据库的查询速度。
索引类别
1.普通索引
普通索引(由关键字 KEY 或 INDEX 定义的索引)的唯⼀任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE column =)或排序条件(ORDER BY column)中的数据列创建索引。只要有可能,就应该选择⼀个数据最整齐、最紧凑的数据列(如⼀个整数类型的数据列)来创建索引。
2.唯⼀索引
普通索引允许被索引的数据列包含重复的值。⽐如说,因为⼈有可能同名,所以同⼀个姓名在同⼀个“员⼯个⼈资料”数据表⾥可能出现两次或更多次。
如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该⽤关键字UNIQUE 把它定义为⼀个唯⼀索引。这么做的好处:⼀是简化了 MySQL 对这个索引的管理⼯作,这个索引也因此⽽变得更有效率;⼆是 MySQL 会在有新记录插⼊数据表时,⾃动检查新记录的这个字段的值是否已经在某个记录的这个字段⾥出现过了;如果是,MySQL 将拒绝插⼊那条新记录。也就是说,唯⼀索引可以保证数据记录的唯⼀性。事实上,在许多场合,⼈们创建唯⼀索引的⽬的往往不是为了提⾼访问速度,⽽只是为了避免数据出现重复。
3.主索引
在前⾯已经反复多次强调过:必须为主键字段创建⼀个索引,这个索引就是所谓的“主索引”。主索引与唯⼀索引的唯⼀区别是:前者在定义时使⽤的关键字是 PRIMARY ⽽不是 UNIQUE。
4.外键索引
如果为某个外键字段定义了⼀个外键约束条件,MySQL 就会定义⼀个内部索引来帮助⾃⼰以最有效率的⽅式去管理和使⽤外键约束条件。
5.复合索引
索引可以覆盖多个数据列,如像 INDEX (columnA, columnB) 索引。这种索引的特点是 MySQL 可以有选择地使⽤⼀个这样的索引。如果查询操作只需要⽤到 columnA 数据列上的⼀个索引,就可以使⽤复合索引 INDEX(columnA, columnB)。不过,这种⽤法仅适⽤于在复合索引中排列在前的数据列组合。⽐如说,INDEX (A,B,C) 可以当做 A 或 (A,B) 的索引来使⽤,但不能当做 B、C 或 (B,C) 的索引来使⽤。
普通索引
创建索引
这是最基本的索引,它没有任何限制。它有以下⼏种创建⽅式:
CREATE INDEX indexName ON mytable(username(length));
如果是CHAR,VARCHAR类型,length可以⼩于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。
修改表结构(添加索引)
ALTER table tableName ADD INDEX indexName(columnName)
创建表的时候直接指定
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);
删除索引的语法
DROP INDEX [indexName] ON mytable;
唯⼀索引mysql帮助文档
它与前⾯的普通索引类似,不同的就是:索引列的值必须唯⼀,但允许有空值。如果是组合索引,则列值的组合必须唯⼀。它有以下⼏种创建⽅式:
创建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
修改表结构
ALTER table mytable ADD UNIQUE [indexName] (username(length))
创建表的时候直接指定
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
UNIQUE [indexName] (username(length))
);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论