navicat连接满足条件:账号密码正确,端口3306,域名要正确,可能是IP,也可能是localhost,数据库要重新启动,要关闭防火墙对应的指令:关闭防火墙:service iptables stop 重启数据库:service mysqld restart
且对应的账号要有%权限:grant all privileges on *.* to 'root'@'%'identified by '123456'
左右连接的区别:左连接以左边表为主表,如果主表的值大于字表的值,字表缺省的值自动补齐,null,如果主表的值小于字表的值,只取和主表相同的值,其他不显示。
有链接是以右边表为主表
如果主表的值大于字表的值,字表缺省的值自动补齐Null,如果主表的值小于字表的值,只取和主表相同的值,其他不显示
数据库去重:distinct group by
union 连接发,此方法连接必须地段相同
索引的作用?(记住)
1.快速读取数据
2.保证数据记录的唯一性
3.实现表与表之间的参照完整性
4.在使用group by, order by 字句进行检索的时候,索引可以大大减少排序和分组的时间
优点:1.大大加快数据的检索速度 2.创建唯一索引 保证数据库中的每一行数据的唯一性 3.加速表与表之间的连接 4.在使用分组和排序进行检索时,可以显著减少查询的时间
缺点:1.索引占用物理空间
2.当对表中的数据进行增加,删除和修改的时候,索引也要动态的维护,降低了数据的维护速度
普通索引----创建后不会对字段有任何约束,可以为空,不为空,相同
index==索引 创建普通索引:index
create index a on aa(id) 给aa表中的id字段创建了一个普通索引 别名:a
唯一索引:值相同,可以为空 unique index create unique index a on aa(id)
主键索引:不能为空,不能相同(常见)
区别:普通唯一索引在表中可以有多个存在(但是一般不会这样做)
2.主键索引在表中只能有一个
3.普通索引没有任何约束,唯一索引不能相同但是可以为空
逐渐索引----不能为空,不能相同
外键的主要作用:保证数据的一致性,完整性
创建外键关联表和表 primary key 主键
engine=innodb---创建外键或者事务的时候回使用到
主表:create table dcs1(id int(4)primary key,name char(4)) engine=innodb;
基于主表来创建字表(字表关联主表)
constraint aa(词语发的作用就是来定义一个外键的名称,后续要解除,外键关系可以通过删除掉这个名称来解除)
foreing key(sid)设置外键约束:dcs2中的sid
references dcs1(id)和dcs1中的id关联,dcs1为主,dcs2为子
create table dcs2(sid int(4)primary key,score int(10)),constraint aa foreign key(sid) references dcs(cid) engine=innodb
删除外键:alter table 子表名 drop foreign key 外键名
alter table dcs2 drop foreign key a;
当创建后:dcs1和dcs2是外键关关系
其中dcs1是主,dcs2是子
注意:1.主表中有数据,子表才能拥有数据
2.子表有多少行数据,子表才能有对应行的数据,不能超过主表的数据
3.如果你要删除主表中的数据,必须要删除子表中的数据
4.如果不要删除主表,必须要删除子表
视图:view
1.对视图的操作以基本表的操作都是一样的(包括alter,create,instert into,update,delete,select)
2.二者任意一方的字段值被修改,都会实时影响到对方(如修改view的字段值,会童虎修改table响应的字段值)
3.视图的创建是基于基本表的,它的作用可以对基本表的敏感信息进行保护,在实际工作中,处于安全考虑,将用户常用的信息穿件成视图给用户调用
避免了直接操作基本表
数据库保护视图。view保护铭感信息:create view yy as(select id name from dcs);dcs表 id name score age sex
视图表:yy
id name 将查询结构创建为视图yy
show create view yy(视图名)
也能查看到视图 show tables 查看视图
drop view 视图名 ://删除视图
存储过程:创建大量的测试数据,用这个数据进行相关的测试 简称:造数据
使用评率也不是很高对测试岗位
开发使用的比较多
一个存储代码写好后是可以给其他同事调用
1000订单用户---insert into
传一个参数:1000执行
第一:了解存储基本架构
create procedure + 存储架构的名称()
begin 开始
代码块
end 结束
call 存储的名称();
create procedure dcs(); 创建一个存储名称是dcs
begin 开始
end 结束
call dcs();调用dcs这个存储
第二是一个实例
CREATE PROCEDURE dada() 创建一个存储
BEGIN 开始
CREATE TABLE lol(id int(2)PRIMARY KEY,score int(4)); 代码块
INSERT INTO lol(id,score)VALUES(1,22),(2,33),(3,44);
SELECT * FROM lol;
END 结束
CALL dada(); 调用存储
第二次调用出出现异常,因为已经存在这个表和存储过程,不能重复使用,健壮性和容错性不是很好
第三
DROP PROCEDURE IF EXISTS dada;解决了限制只能调用执行一次,增强了代码的容错性和健壮性 如果存在则删除,不存在则不删除
CREATE PROCEDURE dada()
BEGIN
DROP TABLE IF EXISTS lol; 如果存在则删除,不存在则不删除
CREATE TABLE lol(id int(2)PRIMARY KEY,score int(4));
INSERT INTO lol(id,score)VALUES(1,22),(2,33),(3,44);
SELECT * FROM lol;
END
CALL dada();
第四:了解形参和实参,还有做增删改查的相关操作
DROP PROCEDURE IF EXISTS dada;
CREATE PROCEDURE dada(n int) 创建存储定义一个形参n,类型是整形
BEGIN
DROP TABLE IF EXISTS lol;
CREATE TABLE lol(id int(2)PRIMARY KEY,score int(4));
INSERT INTO lol(id,score)VALUES(1,22),(2,33),(3,44);
SELECT * FROM lol where id=n; 查询
END
CALL dada(2); 调用
第五 if的判断(第二个月常用)单分支
DROP PROCEDURE IF EXISTS dada;
CREATE PROCEDURE dada(n int)
BEGIN
DROP TABLE IF EXISTS lol;
CREATE TABLE lol(id int(2)PRIMARY KEY,score int(4));
INSERT INTO lol(id,score)VALUES(1,22),(2,33),(3,44);
IF n=0 THEN 如果条件满足查询所有
SELECT * FROM lol;
ELSE 不满足查询最小分数
SELECT min(score) from lol;
END IF; 结束if判断
END
CALL dada(0);
第六: if的多分支判断
DROP PROCEDURE IF EXISTS dada;
CREATE PROCEDURE dada(n int)
BEGIN
DROP TABLE IF EXISTS lol;
CREATE TABLE lol(id int(2)PRIMARY KEY,score int(4));
INSERT INTO lol(id,score)VALUES(1,22),(2,33),(3,44);
IF n=0 THEN
SELECT * FROM lol;
ELSE IF n>2 THEN if分支
SELECT min(score) from lol;
ELSE
SELECT max(score) from lol;
END IF; 结束if判断
END IF; 结束if判断
END
CALL dada(3);
第七 死 while 循环语句(一个实例来验证死循环)
DROP PROCEDURE IF EXISTS dada;
CREATE PROCEDURE dada(n int)
BEGIN
DECLARE i INT DEFAULT 1;
DROP TABLE IF EXISTS lol;
CREATE TABLE lol(id int(2)PRIMARY KEY,score int(4));
while循环如果条件满足则进入循环体,不满足退出循环体,一直满足一直循环(死循环)
WHILE n>=1 DO 条件满足进入循环体
n=2 i=1
2>=1
INSERT INTO lol(score)VALUES(i);
END WHILE; 结束
SELECT *FROM lol;
END
CALL dada(2); 调用 当前的执行是一个死循环
第八:设置变量和while循环语句 创造数据
DROP PROCEDURE IF EXISTS dada;
CREATE PROCEDURE dada(n int)
BEGIN
DECLARE i INT DEFAULT 1;
DROP TABLE IF EXISTS lol;
CREATE TABLE lol(id int(2)PRIMARY KEY auto_increment,score int(4));
while循环如果条件满足则进入循环体,不满足退出循环体,一直满足一直循环(死循环)
WHILE n>=i DO
INSERT INTO lol(score)VALUES(i); 满足条件进入循环体
n=10 i =1
10>=1 1+1=2 1+2=3 .....i=11
10>=11 不满足 退出循环
SET i=i+1;
END WHILE;
SELECT *FROM lol;
END
CALL dada(4);
|
|