1.表结构
//创建表
creat table tb_emp1(
id int(11);
name varchar(25);
deptld int(11);
salary float;
);
//修改表结构
alter table <表名> [修改选项];
修改选项:
add column <列名> <列类型>
drop column <列名>
change column <旧列名> <新列名> <新列类型>
alter column <列名> {set default <默认值>|drop default}
rename to <新表名>
add primary key (<字段名>)
drop primary key
//删除表
drop table [if exists] 表1[,表2,表3....];
//主键约束:主键是表的一个特殊字段,可以唯一标识该表中的每条信息。
//外键约束:外键约束经常与主键约束一起使用,用来确保数据的一致性。
//设置单字段主键且自增长
creat table tb_emp1(
id int(11) primary key auto_increment;
name varchar(25);
deptld int(11);
salary float;
);
//设置联合主键 例如:成绩表中学号+课程号
creat table tb_emp1(
id int(11);
name varchar(25);
deptld int(11);
salary float;
primary key(name,depld)
);
//算数运算符:+ - * / %和mod
//逻辑运算符:not和!,and和&& ,or和||,xor
between and, in, not in
//聚合函数
max,min,count(统计查询结果行数),sum,avg
2.表数据
//查询
select {*|<字段列名>}
[
from <表1>,<表1>....
[
[where <表达式>
[group by <group by definition>
[having <expression> [{<operator> <experssion>....}]]
[order by <order by definition>]
[limit [<offset>],] <row count>]
]
order by:按什么样的顺序显示查询出来的数据,可以进行的排序有升序(ASC)和降序(DESC),默认情况下是升序。order by <字段名> [asc|desc]
distinct:去重,selcet distinct <字段名> from <表名>
as:设置别名,<字段名> as <别名>
条件查询:where 查询条件
查询条件:
带比较运算符和逻辑运算符的查询条件
带 between and的查询条件
带 is null的查询条件
带 in的查询条件
带 like的查询条件 like “字符串”;
group by:如何显示查询出来的数据, 并按照指定的字段分组。
where 和 HAVING 关键字也存在以下几点差异:
一般情况下,WHERE 用于过滤数据行,而 HAVING 用于过滤分组。
where 查询条件中不可以使用聚合函数,而 HAVING 查询条件中可以使用聚合函数。
WHERE 在数据分组前进行过滤,而 HAVING 在数据分组后进行过滤 。
WHERE 针对数据库文件进行过滤,而 HAVING 针对查询结果进行过滤。也就是说,WHERE 根据数据表中的字段直接进行过滤,而 HAVING 是根据前面已经查询出的字段进行过滤。
WHERE 查询条件中不可以使用字段别名,而 HAVING 查询条件中可以使用字段别名。
//多表查询
select <字段名> from <表1> cross join <表2> [where子句] 交叉连接一般不采用
select <字段名> from <表1> inner join <表2> [on子句] 内连接一般采用,inner可省略 on 子句:用来设置内连接的连接条件
select <字段名> from <表1> left join 或 right join <表2> <on子句> 使用外连接查询时,一定要分清需要查询的结果,是需要显示左表的全部记录还是右表的全部记录,然后选择相应的左连接和右连接。
//子查询
where <表达式> <操作符> (子查询)操作符可以是比较运算符和 in、not in、 exists、 not exists 等关键字。
//插入数据
insert into <表名> [ <列名1> [ , … <列名n>] ] VALUES (值1) [… , (值n) ]; 数据清单中数据的顺序要和列的顺序相对应。
//修改数据
update <表名> set 字段1=值1 [,...] [where 子句] [order by 子句] [limit 子句]
//删除数据
delete from <表名> [where 子句] [order by 子句] [limit 子句]
3.视图
//创建视图
create view <视图名> as <select 语句>
//查看视图
desc 视图名
//修改视图
alter view <视图名> as <select 语句>
//删除视图
drop view <视图名1> [ , <视图名2> …]
4.存储过程和触发器
一个存储过程是一个可编程的函数,它在数据库中创建并保存,一般由 SQL 语句和一些特殊的控制结构组成。
//创建存储过程
create procedure <过程名> ( [过程参数[,…] ] ) <过程体> //过程体以 begin end //
[过程参数[,…] ] 格式
[ in | out | inout ] <参数名> <类型>
create procedure getScore
begin
select student_score from tb
where st_name=name;
end
//修改存储过程
alter procedure 存储过程名 [ 特征 ... ]
//删除存储过程
drop procedure [ if exists ] <过程名>
存储函数和存储过程一样,都是在数据库中定义一些 SQL 语句的集合。存储函数可以通过 return 语句返回函数值,主要用于计算并返回一个值。而存储过程没有直接返回值,主要用于执行操作。
create function 函数名 ([参数[...]])
returns type
[characteristic ...] SQL 代码
create function func_student(id INT(11))
returns VARCHAR(20)
comment '查询某个学生的姓名'
begin
return(select name from tb_student where tb_student.id = id);
end //
//调用存储过程
call 函数名([参数[...]]);
//定义变量
declare 变量名[,...] 类型 [default 值]
//变量赋值
set 变量=值
个人理解游标就是一个标识,用来标识数据取到了什么地方。
IF语句
if search_condition then statement_list
[elseif search_condition then statement_list]...
[else statement_list]
end if
CASE语句
case case_value
when when_value then statement_list
[when when_value then statement_list]...
[else statement_list]
end case
MySQL 的触发器和存储过程一样,都是嵌入到 MySQL 中的一段程序,通过对数据表的相关操作来触发、激活从而实现执行。
//创建触发器
create trigger <触发器名> < before | after >
<insert | update | delete >
on <表名> for each row<触发器主体>
//删除触发器
drop trigger [ if exists ] [数据库名] <触发器名>