外键:
外键是用来干什么的:为了一张表记录的数据不要太过冗余。这和软件project的模块化思想差点儿相同类似,仅仅只是在数据库中是对表关系进行解耦,尽量让表 记录的数据单一化。
外键的主要作用是:保持数据的一致性、完整性
mysql常见约束
主键约束:primar key
非空约束:not null
默认约束:default
外键约束:foreign key 表于表之间的约束
mysql数据库有两大数据库引擎:
INNODB
myisam
CREATE table dcs50(id int(4) PRIMARY KEY,name VARCHAR(20)) ENGINE=INNODB; --主表
CREATE table dcs51(sid int(4) PRIMARY KEY,sname VARCHAR(20),CONSTRAINT wj_dcs FOREIGN KEY(sid) REFERENCES dcs50(id)) ENGINE=INNODB; --子表
wj_dcs:外键名
ENGINE=INNODB:引擎类型,INNODB
CONSTRAINT:创建外键名
FOREIGN KEY(子表的外键字段):外键约束
REFERENCES(父表的主键的字段名):关联
show create table dcs51; --查询是否设置外键
CREATE TABLE `dcs50` (
`id` int(4) NOT NULL,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
show create table dcs51;
CREATE TABLE `dcs51` (
`sid` int(4) NOT NULL,
`sname` varchar(20) DEFAULT NULL,
PRIMARY KEY (`sid`),
CONSTRAINT `wj_dcs` FOREIGN KEY (`sid`) REFERENCES `dcs50` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
主表:主表在公司一般都是存放基础数据的
外键之增加数据:
主表和子表之间如果存在外键的约束,在主表不存在的数据,在字表无法插入与之相关的任何数据。
主表在公司一般都是存放基础数据的
外键名不能重复
外键之删除数据:
dcs50是父表,dcs51是字表,两个表形成关联,必须子表的数据删除后,才能删除父表中的对应数据
删除外键:
alter table 子表名drop foreign key 外键名
删除主键:删除之前先删除自增长 alter table dcs1 change id id int(10);
alter table 表名 drop primary key;
注意:
只有在定义外键时,用constraint 外键名 foreign key .... 方便进行外键的删除
alter table dcs51 drop FOREIGN key wj_name --删除外键
alter table dcs51 add CONSTRAINT wkk_name FOREIGN key(sid) REFERENCES dcs50(id) --新增外键
面试题目:你对外键是怎么理解的,你们公司为什么使用外键?
公司的数据过多,会造成数据库中的数据有较多重复,而且新旧数据的更新和维护需要巨大的维护成本,使用外键可以让公司的数据进行模块化的分类和管理,尽量让主表存放基础数据,让字表单一化,这样可以避免数据的冗(rong)余,而且主表和子表之间还可以双向进行约束,想要删除主表的数据需要把主表相关的任何子表的数据删除,才能删除主表。想在字表插入数据,需要主要与之相关的基础的数据。
数据库视图 VIEW
create view yy as (select id,name from dcs); //将查询结果集创建为视图yy
Show tables 视图名; //也能查看到视图
Select * from miao; 查看视图里面的内容 只显示id,name
Show create view miao; 查看视图
ALGORITHM=UNDEFINED :加密算法
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `miao` AS (select `student`.`id` AS `id`,`student`.`class` AS `class`,`student`.`name` AS `name` from `student`)
update miao set name='xiaoer' where id=1; --视图‘miao’中数据,原始数据也删除
注意:对视图的操作与对基本表的操作都是一样的(包括alter,create,insert into ,update ,delete ,select),且二者任意一方的字段值被修改,都会实时影响到对方(如修改view的字段值,会同步修改table相应的字段值);但是视图的创建是基于基本表的,它的作用可以对基本表的敏感信息进行保护;在实际工作中,出于安全考虑,将用户常用的信息创建成视图给用户调用,避免了直接操作基本表!
索引:可以利用索引快速访问数据库表中的特定信息,索引有助于更快地获取信息。
索引提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些
针。数据库使用索引的方式与使用书的目录很相似:通过搜索索引找到特定的值,然后
随指针到达包含该值的行。
遍历:把所有的数据都查询一遍。
建索引的方法:
三种索引:普通索引 唯一索引 主键索引
普通索引:这是最基本的索引,它没有任何限制
创建索引:create index abc on student(class);给class创建索引;
查索引:show index from student
删除索引:alter table student drop index abc
唯一索引:它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值
创建索引:create unique index abd on student(id,class)
查索引:show index from student
删除索引:alter table student drop index abd
主键索引:它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引
创建索引:alter table student add PRIMARY key(id)
查索引:show index from student
删除索引:alter table student drop PRIMARY KEY
主键索引和主键约束其实是绑在一起的,如果有了主键索引,那么必会产生主键约束,或者说主键约束是主键索引的一个特征
删除索引。
删除索引可以使用ALTER TABLE语句来实现。
其格式如下:
alter table table_name drop index index_name ;
alter table table_name drop primary key ;
如:alter table student drop index S_sid_index;
如果删除表中的主键约束,需取消该字段的自增长
alter table dcs25 change id sid int(4) #取消自增长
|
|