提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
很多事情,没有答案
一、函数
1、语句说明
select:要返回的列或表达式
from:从中检索数据的表
where:行级过滤
group by:分组说明
having:组级过滤,Having跟where的功能差不多,只不过他是在分完组之后,再对分组数据进行过滤,having只能用在group by之后
order by:对于查询出来的数据按照规则进行排序。通常放置在一个查询语句的最后部分 ==>asc升序(默认),desc降序
例如:select * from tableName order by lst desc;
limit m [,n]:要搜索的行数,m表示要从第几条记录开始查询,n表示要查询记录的数目
2、聚合函数
count:统计数量,返回int类型整数
max:求最大值
min:求最小值
sum:返回表达式中所有值的和
avg:组级过滤:计算一组或表达式的平均值
3、多表查询
语法1:select * from A,B;
语法2:select * from A join B;
第一种是在from字句中,直接写多个表名,表名之间使用逗号隔开
select A.* ,B.* ,C.* from A, B, C where 关联条件
第二种是在from字句中,多个表名之间使用join关键字连接,并在on关键字后面添加关联条件
select A.* ,B.* from A join B on 关联条件
select A.* ,B.* ,C.* from A join B on AB关联条件 join C on AC或BC关联条件
select A.* ,B.* ,C.* from A join B join C on AB的关联条件 and BC或AC关联条件
内连接: [inner] join
外连接:(outer join ) :引出一个驱动表的概念,驱动表里的数据全部显示
左外连接: left [outer] join ,左表是驱动表
右外连接: right [outer] join ,右表是驱动表
全外连接: full [outer] join ,mysql不支持,两张表里的数据全部显示出来
4、集合查询
关键字:union(去重) / union all(不去重)
两个查询语句使用上述的关键字连接即可
注意:两个查询语句的字段名,字段个数,必须对应上
二、索引
1、创建索引
建表时创建索引:
CREATE TABLE 表名(
字段名 数据类型 [完整性约束条件],
……,
[UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY
[索引名](字段名1 [(长度)] [ASC | DESC]) [USING 索引方法]);
说明:
UNIQUE:可选。表示索引为唯一性索引。
FULLTEXT:可选。表示索引为全文索引。
SPATIAL:可选。表示索引为空间索引。
INDEX和KEY:用于指定字段为索引,两者选择其中之一就可以了,作用是 一样的。
索引名:可选。给创建的索引取一个新名称。
字段名1:指定索引对应的字段的名称,该字段必须是前面定义好的字段。
长度:可选。指索引的长度,必须是字符串类型才可以使用。
ASC:可选。表示升序排列。
DESC:可选。表示降序排列。
建表后创建索引:
ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY [索引名] (字段名1 [(长度)] [ASC | DESC]) [USING 索引方法];
或
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名 ON 表名(字段名) [USING 索引方法];
例如:alter table tablename add index indexname(字段名)
2、查看索引
show index from tb_name
3、创建视图
CREATE[OR REPLACE] VIEW viewname[(columnlist)] AS SELECT statement
例:create view view_name as select * from tbname;
4、查看视图
select * from view_name;
5、删除视图
drop view view view_name
6、修改视图
alter view view_name as select_statement ==>与修改视图方法类似
三、数据完整性约束
1、参照完整性
也称为引用完整性,在关系模型中实体及实体间的联系是用关系来描述的,存在着关系与关系间的引用。通过外键(外码)实现参照完整性;
mysql给表增加外键约束:
外键约束可以在修改表时添加,但是添加外键约束的前提是:从表中外键列中的数据必须与主表中主键列中的数据一致或者是没有数据。
· 修改表时添加外键:alter table stu_scroe add foreign key(外键字段) references stu(被引用的表的字段)
2、在创建表时设置主键和外键后可以加入以下
on delete restrict ==>删除外键的表时会被限制 on delete cascade ==>删除外键的表时会将主键的表也给删掉
on update restrict ==>单外键的表发生变化时,主表也会相应的做出变化
3、用户定义的完整性
也称为域完整性,通常是在创建数据库表的同时定义,mysql支出的用户定义完整性约束分别是非空约束、check约束和触发器
非空约束和check约束
not null check(约束条件,例如age>=18 and age <=20)
mysql不支持check约束,语法通过,但是没有效果
4、命名完整性约束
在完整性约束的定义说明之前加上关键字constraing和改约束的名字
语法:constraint [symbol]
例如:
create table student(
s_id int not null auto_increment,
constraint pk_student primary key(s_id), ==>命名完整性约束
constraint fk_student foreigh key(s_id) references customers(s_id),
on delete restrict ==>删除外键的表时会被限制
on update restrict ==>单外键的表发生变化时,主表也会相应的做出变化
);
修改表时条件外键约束:
alter table student add constraint [9fk_sustid] foreign key (s_id) references sustomers(s_id);
四、触发器
1、概念
触发器是一个被指定关联到一个表的数据库对象,当对一个表的特定事件出现时,它将会被激活。
触发器具有mysql语句在需要是才会被执行的特点,即某些mysql语句在特定事件发生时自动执行
触发器用于保护表中的数据,当具有操作影响到触发器所保护的数据时。
触发器就会自动执行,从而保障数据库中数据的完整性以及多个表之间数据的一致性
触发器就是mysql响应insert、update和delete语句而自动执行的一条mysql语句
(或位于begin和end语句之间的一组mysql语句)。其他mysql语句是不支持触发器的
2、触发器的创建
create [ definer={user | current_user}]
trigger trigger_name trigger_time trigger_event
on tb_name for each row trigger_body
defuiner:指定触发器被触发时满足事件执行权限的安全上下文
trigger_time:触发器被触发的时刻,有两个选项,before 和 after ,分别表示触发器在激活它的语句之前或者之后触发
如果希望验证新数据是否蛮子使用的权限,则使用before,如果希望在激活触发器的语句执行之后完成几个或更多的改变,通常使用after。
trigger_event:触发事件,用于指定激活触发器语句的种类,可以是下述之一:
insert:将新行插入表时激活触发器
update:更改表中某一行是激活触发器
delete:从表中删除某一行
tb_naem:和触发器关联的表明,必须引用永久性表,不能将触发器与临时表或视图关联起来,这样在改表上触发事件时才会激活触发器,同一个表不能拥有两个具有相同触发时刻和时间的触发器
for each row : 用来指定对于受触发事件影响的每一行都要激活触发器的动作,例如使用一条insert语句向一个表中插入多行数据时,触发器会对每一行数据的插入都执行相应的触发器动作
trigger_body :触发器动作主体,包含触发器激活时将要执行的mysql语句,如果要执行多个语句,可以使用begin...end复合语句结构,这样可以使存储过程中允许的相同语句
案例:在表中创建一个触发器stu_insert_trigger,用于每次向表student中插入一行数据时将用户变量str设置为'one student added!'
create trigger stu_insert_trigger after insert
on student
for each row
set @set='one student added ! ';
3、触发器的查看
show triggers from db_name
4、删除触发器
drop trigger [db_name] trigger_name;
注意:删除一个表的同时,也会自动删除该表上的触发器,另外触发器不能更新或覆盖,为了修改一个触发器,必须先删除它,然后再重新创建
5、mysql支持的触发器