索引
1索引 用index表示
2索引分为 普通索引 唯一索引 主键索引
3 select * student
普通索引
create index aa on student (math) 给student表的math字段创建名为aa
show index from student 查看student有哪些索引
create index bb on student (math,age) 同时给多个字段创建普通索引,同一个字段可以存在多个不同的普通索引
alter table student drop index bb 删除索引名为bb的普通索引
唯一索引
唯一索引与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值
creat unique index cc on student(math) 给math创建唯一索引math字段不重复
show index from student 查看索引
alter table student dorp index cc 删除索引
视图:起到保护表数据的作用
show tables;
select * from student;
create view dcs as(select id, class ,math from student);5根据student表创建视图,dcs为视图名字,比如我只想把这三个字段暴露出去;
show tables; 查看视图
select * from dcs; 查看创建了视图的这个虚拟表,给三个字段创建了视图
B show create view dcs;查看视图的结构
CREATE ALGORITHM=UNDEFINED DEFINER=i rooti @~ %^ SQL SECURITY DEFINER VIEWdcs AS ( select studenti . idi AS、 id^ , student. classi AS、 classi , student . mathi AS、 math 、from
student~)这句是在视图结构的第二个字段复制出来的内容,创建视图的详细过程
selete from dcs where id=10;
删除视图里面的数据,然后分别查询视图表和原表的数据,同步被删除。
update dcs set math=100 where id=1 ;
update student set math=99 where id=1 ;
分别改视图表和原表的数据,验证数据同步被修改。
drop view dcs;
showcreateviewdcs;查看创建视图的结构,报不存视图表
. 2021/9/26 20:19:34
外键约束
主键约束 pr imary key
非空约束 not null
自增长约束 auto_ increment
默认值约束default
总结:这里的4个约束,主要是约束表的字段
外键约束 foreign key约束的 是表与表之间的关系
create table dcs1(id int(4) primary key, name varchar(10)) engine=innodb; 主表
create table dcs2(sid int(4) primary key , sname varchar(10) , CONSTRAINT dcs foreign key( sid) references dcs1(id)) engine=innodb; 子表
给dcs1创建一 -个名称为dcs的外键约束在dcs2的sid字段。
dcs1 主表
dcs2 子表.
constraint dcs:约束 外键约束名称叫dcs
foreign key(sid):创建在dcs2表的sid字段上面
references dcs1(id): 引用和参考的是dcs1表的id字段
engine=innodb: 数据库的存储引擎为innodb
如果不指定引擎,默认使用myisam, 使用的这个默认引擎不起作用
show engines; 查看MySQL数据库所有引擎。
. 2021/9/26 20:19:40
show create table dcs1 ;
show create table dcs2; #查看表结 构
CREATE TABLE、dcs2 (sid int(4) NOT NULL,sname varchar(10) DEFAULT NULL,PRIMARY KEY (sid),CONSTRAINT、dcs FOREIGN KEY (i sid~) REFERENCES 、 dcs1 ( id )ENGINE=InnoDB DEFAULT CHARSET=utf8
select * from dcs1;
select * from dcs2;
插入数据
insert into dcs1 values(1, 'xiaoyi'),(2,'xiaoer');
insert into dcs2 values(1, ' xiaosan'),(3, ' xiaosi');
插入数据报错,在dcs1里 面id只存在1和2,那么往dcs2表插入数据也之只能插入1和2;
insert into dcs2 values(1, ' xiaosan'),(2,' xiaosi') ;插入1和2就可以插入成功38结论:主表不存在的数据,在任何的子表当中无法插入与之相关的数据
. 2021/9/26 20:26:30
delete from dcs1 where id=1; 第一次删除主表的数据失败,报错提示存在一个子表里面有无它相关的外键
delete from dcs2 where sid=1 ;先删除子表的数据,在执行上面删除主表数据的sql就能删除成功
alter table dcs2 drop foreign key dcs; 删除外键,使他们不存在约束
show create table dcs2 ;
CREATE TABLE dcs2( sid int(4) not null,sname varchar(10) DEFAULT NULL,PRIMARY KEY ( sid )
ENGINE=InnoDB DEFAULT CHARSET=utf8
删除之后,可以看出dcs2表没有外键了
delete from dcs1 where id=2;
alter table dcs2 add constraint dcs foreign key(sid) references dcs1(id);
创建外键约束必须保证两个表有相同属性字段对应的相同数据
|
|