第七章索引:入门安装 - 增删改查基本操作 - 外键(不同表之间的关联) - 数据库的建立和操作 - MySQL的查询操作(模糊、通配、限制符等) - MySQL的引擎 - MySQL的事物(数据回滚) - SQL的注入(漏洞的防范) - 触发器(同时操作两张表) - 索引(提高查找速度) - 慢日志(记录sql语句的执行时间,用来排查优化语句)
PS:所有指令的后面都需要加分号,告诉程序这条指令到这里为止结束了,否则会报错,只有少数特殊指令不需要加分号如use
PS:where 和having 的区别(都是用来过滤数据的),但是不同的where是过滤的原生的数据(没有经过处理的数据,比如分组等),having是过滤group by(分组)之后的数据进行二次筛选,这个程序设计者设计的,固定的
PS:where是可以和having配合使用的,但是必须在group by 分组之前使用,即select count(id) as cut,age from tablename where id > 6 group by age having cnt < 2 #查找tablename中age列下序号6以后的值,然后计算相同的数量,查找相同数量<2的数据
查询和进入
1、show databases; #查看data文件夹下的数据库
2、use db(test1); #进入指定的文件夹(数据库)
3、show tables; #查看当前数据库下的所有数据表
4、show databases; # 查看data文件夹下所有的数据库,确认自己想建立的表存不存在
5、select * from test1; #查看指定数据表(test1)的所有列,*是正则匹配所有 \ test1 就是数据表名
6、selece id from test ; #查看指定数据表中的指定列(id就是列名)的所有内容
7、select name,id from test1; #查看指定数据表(test1)中多项列名(name,id)的所有内容
8、select * from test1 where id = 1; #查看指定数据表(test1)中指定行数(id=1就是指定行数是1的行)的数据
9、show create table test1; #查看数据表的修改或者建立过程
10、desc test1; #查看数据表例的信息(包括格式、约束等条件)
11、select id,name from test1 where id<4; #查看数据表中指定多个列的一个范围的数据 \ id<4 就是查看4行之前的数值
12、select id,name from test1 where id<=4; #查看数据表中指定多个列的一个范围的数据 \ id<4 就是查看4行之前的数值也包括第四行
13、select id,name from test1 where id>4; #查看数据表中指定多个列的一个范围的数据 \ id>4 就是查看4行之后所有的数值
14、select id,name from test1 where id>=4; #查看数据表中指定多个列的一个范围的数据 \ id>4 就是查看4行之后所有的数值包括第四行
15、select id,name from test1 where id!=4; #查看数据表中指定多个列的一个范围的数据 \ id!=4 就是除了第四行的所有值
16、select id,name from test1 where id>1 and id <4; #查看数据表中指定多个列的一个范围的数据 \ id>1 and id <4 第一行至第四行中间的所有数据
17、select id,name from test1 where id>=1 and id <=4; #查看数据表中指定多个列的一个范围的数据 \ id>1 and id <4 第一行至第四行中间的所有数据包括第一行和第四行
18、select id,name from test1 where id betweeb 1 and 4; #查看数据表中指定多个列的一个范围的数据 \ id betweeb 1 and 4 第一行至第四行中间的所有数据,包括第一行和第三行
19、 select id,name from test1 where id in (1,2,3,4); #查看数据表中指定多个列的一个范围的数据 \ in(1,2,3,4) 列出在指定行内的所有数据
20、select id,name from test1 where id not in (1,2,3,4); #查看数据表中指定多个列的一个范围的数据 \ not in(1,2,3,4) 列出不在指定行内的所有数据
21、select * from tablename where 列名='值' and 列名=值; #查看数据表中同行的指定多个列下指定名称的值,如果符合就会返回,不符合就不会返回值
22、select * from test1 where name like 'x%'; #列出数据表中所有以x开头的数据
23、select * from test1 where name like '%x%' ; #列出数据表中所有中间含有x的数据
24、select * from test1 where name like '%x'; #列出数据表中所有以x结尾的数据
25、select * from test1 limit 2,2; #列出数据表中指定行后面指定行数的数据
26、select * from tablename limit 5; #tablename就是表名,数字 5 就是要取几行数据
27、select * from tablename limit offset(4),5; #offset就是偏移量,意思就是从第几行开始,数字 5 就是要取几行数据
28、select * from tablename order by age; #将列表中的数据通过age来进行升序排序,后面有asc和desc两个参数,如果不写,默认按照升序进行排序
29、select * from tablename order by age asc; #acs就是按照升序 排列
30、select * from tablename order by age desc; #desc就是按照降序排列
31、select * from tablename order by age desc,id asc; #优先按照age降序排列,如果age有相同的,就按照id进行升序排列
32、select count(id) as cnt,age from tablename group by age; #分组age并且计算这个组相同的条件的数量
33、select count(id) as cnt,age from tablename group by age having cnt < 2; #查询tablename表中age列然后计算相同age值的数量并且查找相同age数量<2的数据
34、select count(id) as cut,age from tablename where id > 6 group by age having cnt < 2 ;#查找tablename表中age列,且id列>6的值,并且分组,且计算相同的数量,查找相同数量<2的数据
连表查询(做好外键后查询关联)
35、select * from tablename1 inner join tablename2 on tablename1 .外键_id=tablenam2.id #将两张表的值所有列的值全部获取
36、select tablename1.列名, tablename2.列名 from tablename1 inner join tablename2 on tablename1.外键_id=tablename2.id #查询获取的不是id,而是值对应的值
37、select * from tablename1 left join tablename2 on tablename1.外键_id=tablename2.id #做好外键后查看对应的值,这个指令会将表对应表全部获取,左边的表数据全部显示
38、select * from tablename1 right join tablename2 on tablename1.外键_id=tablename2.id #做好外键后查看对应的值,这个指令会将表对应表全部获取,右边的表数据全显示
新建
1、tee D:\mysql.txt #建立一个数据库操作过程的记录文件,将数据库的所有操作记录在指定文件下,名称和路径可以自定
2、create database db1 default charset utf8; #建立db1数据库
3、create table test1( # 新建表的语句
#这里可以加注释,就是# + 内容
id int unsigned auto_increment primary key, #unsigned 就是类型,做外键的时候这个类型一定要一样 \ auto_increment就是自增的意思 \ primary key就是定义成主键
name char(32) not null default '',
age int #最后一列不能有逗号,有逗号会报错
) charset=utf8; #这里括号后面必须有分号,这个语法格式是新建数据表的固定语法,最后也可以加个charset utf8(加不加都可)
PS:创建数据表的固定格式,包括约束和数据类型
4、constraint depe_id foreign key user('deperment') references depertment('id') #创建一个外键的语句格式,这个条件实在创建表的时候使用的
PS:depe_id(就是外键的名字,自定义) \ user就是表的名字(需要加约束的列名) \ depertment 就是外键表的名字(外键表的id列)
5、 alter table tablename add foreign key(外键名) references tablename2(外键关联的列名) #这个是给已有表创建外键
PS:外键中子表就是使用约束规则的表,父表就是提供规则的表
删除
1、drop database db; # 删除数据库
1、drop table test1; #删除数据表
2、delete from test1; #将数据表(test1)中的数据清空
3、delete from test1 where id = 2 #删除指定数据表(test1)指定行数(id=1就是代表行数为1行)的数据
4、truncate test1 #清空数据表(test1)后将序号格式化自增时候从0开始
5、alter table test1 drop name #删除数据表指定列
增加
1、insert into test1(列名,列名) values(‘值','值'); #插入数据,字符类型要加 ‘’,int类型不需要 ‘’
2、insert into test1(列名) values('值'),('值'),('值'); #一列增加多行值
3、insert into test1(列名,列名) values('值','值'),('值','值'),('值','值'); #多列增加多行值
insert into 是固定语法
db1是要增加数据的表明,括号里就是要增加的列名
values()是和列对应的,括号里写列对应的数据
4、alter table test1 add mingzi varchar(32) not null default ''; # 在数据表中增加列 \ mingzi就是要增加的列名
PS:因为默认值default是空,所以查看的时候都是空的
5、alter table 表名 add column 列名 varchar(20) not null after 列名;#在指定列的后面增加一列
6、alter table 表名 add column 列名 varchar(20) not null first;#在第一列添加新列
修改
1、update test1 set name='bbbb' #直接将执行列名下的数据全部改成指定的值 \ test1就是数据表名 \ name就是列名 \ =后面的就是要改的新名
1、update test1 set name='bbbb' where id=1 #修改指定数据表下指定的列名下指定行数的值 \ id=1 就是指定行数(这个id不是固定,是根据自己写的主键的名称来定义的,就是表第一列的名称)
3、update test1 set name='bbbb',name='aaaa' where id=1 #同时修改多列指定行数的值
4、alter table test1 change name mingzi varchar(32) not null default ''; #修改指定列表下指定列名 \ mingzi就是要更新的名字
5、alter table tablename modify column 列名 类型; #修改列的属性,最后的类型可以是int,int unsigned,char等
事物
1、开启事务: start transaction;
2、A开始转账:update user1 set money=4500 where id=1;
3、B开始收钱:update user1 set monet=5500 where id=2;
4、提交事务: commit;
5、数据错误回滚: rollback
索引
unique(id) # id就是外键被约束的列的名字,意思就是这列内的数据不能重复,也叫唯一约束
unique(id,url) #这个是联合唯一索引
了解知识点
-----------------------------------------------------------------------------------------------------
视图的作用,就是限制查询者指令的权限,限制查询者能够看表的内容
---主表内的数据更新后视图也能同步,但是不能往视图里添加数据,会报错
创建视图:
creat view 视图名 as select name,age from tablename;
查看视图:
select * from 视图名;
删除视图:
drop view 视图名;
更新视图:
先删除视图,再创建视图
-----------------------------------------------------------------------------------------------------