索引
索引依赖于表建立的,其中注明了表的各个值所在的位置。
实际上,一个表的存储是由两部分组成的,一部分用来存放表的数据页面;另一部分存放索引页面,索引就存放在索引页面上。
索引的优点
通过创建唯一索引,保证数据库表每行数据的唯一性
大大加快数据查询速度
在使用分组和排序进行数据查询时,可以显著减少查询中分组和排序的时间
索引的缺点
当数据表中的记录被添加、删除、修改时,数据库系统需要维护索引。因此,有一定的系统开销。
存储索引信息需要一定的磁盘空间
创建索引:
自动:在表上定义主键、唯一约束、外键约束时,系统会为该数据列自动创建对应的索引。
手动创建索引:
用户可以通过create index ..语句来创建索引
create index 索引名 on 表名(列名1,列名2,...);
删除索引:
自动:数据表被删除时,该表上的索引自动被删除。
手动:用户可以通过drop index ...语句来删除指定数据表上的指定索引。
drop index 索引名 on 表名;
查看索引
show index from tablename;
DDL语言
DDL语句用于操作表,主要由create、alter、drop 和 truncate 四个关键字完成
创建表:
1.直接创建表
create table 表名
(
--可以有多个列 定义
字段名1 数据类型(域值) [非空约束][缺省值],
...
字段名1 数据类型(域值) [非空约束][缺省值]
);
2.复制表结构建立表
create table 新建表名 like 已有表名; -- 将已有表复制表结构到新建表
3.根据数据集直接建表
create table 新建表名 as (select 已有表名某的字段,已有表名某的字段... from 已有表名);
重命名表
alter table 表名 rename to 新表名;
删除表
drop table 表名;
清空表数据,保留表结构
truncate 表名;清除彻底不留痕
修改表结构
包括增加列定义、修改列定义、重命名列、删除列 等操作。
1.增加列
alter table 表名
add
(
字段名 字段类型 [非空约束] [默认值],
...
字段名 字段类型 [非空约束] [默认值]
);
2.修改列定义:
如果列里有数据:
1.修改的列范围不能小于列里目前字段的最大长度。
2.不能跨类型修改
alter table 表名
modify 列名 数据类型 [默认值];
3.修改列名
alter table 表名 change 旧列名 新列名 列类型 [默认值];
列类型可以更改,但是如果换了类型的话必须要给长度
如果不更改类型,那么只给原类型,可以不给长度
ALTER TABLE stu_hehetwo change stuu_age stu_age varchar(4);
4.从数据表中删除列
alter table 表名 drop 列名;
DML用于添加、修改和删除表中的行。主要由insert、update 和 delete 三个关键字完成。
DML-insert into 语句:用于向指定数据表中插入记录。
注意:主键必须要唯一
单条插入
Insert into 表名(属性列表)values (值列表)
如果是插入所有列,可以写成 Insert into 表名 values(值列表)
属性列表和值列表要一一对应。
如果字段设置可以为null,那么插入记录不给值的话,默认为null
如果字段设置不可以为null,那么插入时应该给值。
注意: 添加数据时要忽略自增列。如果插入自增列数据,不报错,但改变了之前的序列,下一个默认序列就从你插入的序列值开始。值列表的数据类 型和取值范围要和表定义一致,主键值不能重复
格式: INSERT INTO 表名 [属性列表,这里可以省略] VALUES (字段值1,字段值2...字段值n);
例如: INSERT INTO student
VALUES (2001,'nibuhao',19,'nan',3);
多条插入
values后面可以跟多个值列表,逗号分隔
insert into 表名 (属性列表)values
(值列表1),(值列表2),...;
例如
INSERT INTO student
(stu_name,class_id)
VALUES
('张三',3),
('wangwu',3),
('maliu',3);
将查询结果插入—— Insert into select
Insert into 表名(字段,字段) select 字段,字段 from 查询表;
将student 表里的student_name 值 查出,放到test表里
insert into test (name) (select student_name from student);//不能加values
DML-update语句:用于修改数据表的记录,通常使用where子句限定修改哪些记录。
update 表名
set 列名1=值1, 列名2=值2,... [where 条件];
注意 如果不加条件,那么修改的是整个表的所有记录
DML-
用于删除指定数据表的记录。通常使用where子句限定要删除哪些记录。
delete from 表名 [where 条件];
注意 如果不加条件,那么删除的是整个表的所有记录