3、常用数据库查询命令:
show databases; 查看数据库服务器上的全部数据库
create database test; 创建一个名称为test的数据库
use test;使用test数据库
show tables;查看当前数据库中所有表
创建表:
create table 表名(
属性名数据类型列选项,
……
)
其中,列选项可以为AUTO_INCREMENT(自增),DEFAULT '默认值',INDEX(定义为索引),[NOT]NULL(允许/禁止NULL),PRIMARY KEY(定义为主键),UNIQUE(定义为唯一性),CHECK(定义可以输入的值的范围/选项)。
alter table 表名 modify 列名 数据类型;修改表中列的定义
alter table 表名 add 列名 数据类型;追加新列
alter table 表名 drop 列名;删除列
DESC 表名;显示表的结构
DROP TABLE 表名; 删除表
Insert into 表名(列名1,列名2,...) values (数据1,数据2,...); 向表里插入数据
Select 列名1,列名2,... from 表名[条件表达式等]; 显示表中的数据
Update 表名 set 列名1=值1,列名1=值1,.... where 条件表达式; 更新标志的记录
Delete from 表名 where 条件表达式; 删除表中的记录
4、数据检索
①推荐明确指定列名:使用
来无条件地获得所有列数据,第一,获取到不需要的列就会浪费很多内存;第二,获得的数据会按表定义的列的顺序,如果修改了表列的顺序,对应的程序也必须进行修改。
②条件检索:必须使用WHERE语句。比较运算符有:=、、=、(不等于)、IS[NOT] NULL(是否为空)、[NOT]LIKE(指定目标一致)、[NOT] BETWEEN(指定范围)、[NOT] IN(在指定候补值内)。
③模糊检索:select name from customer where name like '李%';
④ 多条件组合查询:使用and(并)、or(或)连接。理论运算符的优先顺序:NOT->AND->OR。
⑤结果排序:使用order by进行数据排序,可以指定ASC(升序)或DESC(降序),默认是ASC。
如:select name,age from customer where age>21 order by age DESC;
⑥取得指定数间的记录:LIMIT;
limit 2:从起始位置开始取出两件;
limit 1,2:从1开始取出两件。
⑦数据分组:GROUP BY,通常GROUP BY语句与统计函数一起使用。主要统计函数:AVG(列名)平均值、COUNT(列名)件数、MAX(列名)最大值、MIN(列名)最小值、SUM(列名)合计值。
⑧列的别名:select sex,COUNT(mid) as cnt from customer group by sex;其中as可以省略。
5、运算符与数据库函数
①运算符:+、-、*、/、DIV(除法返回结果的整数部分)、%(求余)、AND、OR。
②部分数据库函数
LENGTH函数:返回字符串的字节数
FLOOR/GEILING/TRUNCATE函数:用于小数四舍五入处理
DATE_ADD函数:对日期date进行指定值的加算处理
NOW()当前时间、CURDATE()当前日期、CURTIME()当前时刻、EXTRACT(YEAR_MONTH '2013-11-20 21:02:00')从给定的日期/时刻中取得任意元素(如年、月等)
CASE函数:条件判断
17、事务处理的机制简单的说就是留下更新日志,数据库会根据这些日志信息,在必要时将就数据取回,或在发生错误是将数据恢复到原先的状态。与事务处理相关的日志可以分为两个类型:UNDO和REDO。 =====>>索引
18、索引就是表中所有记录的搜索引导,索引的经过排序的。有索引后,先查找索引再根据索引查找相应的记录。
19、大多数数据库中用B树(平衡树)的结果来保存索引的。
20、创建索引:create [unique] index 索引名 on 表名(列名,……);
查看表中所有的索引信息:show index from 表名 [\G];
删除索引:drop index 索引名 on 表名;
确认索引的使用情况(优劣):explain 调查对象 select 语句;
如:explain select * from employee where name='wang' \G;
复合索引:create index> 唯一索引:create unique index idx_employee_name on employee(name);
索引名建议[idx_]的形式开头。
21、不适合使用索引的场合:
①模糊查询要求后方一致或部分一致检索;如:select * from employee where name like '%w%'或'%w';是不适合的。
②使用了IS NOT NULL、比较运算符的场合;如:select * from employee where name is not null;是不适合的。
③对列使用了运算/函数的场合;
④复合索引的第一列没被包含在where条件语句中的场合。如:select * from employee where name='wang' or age='1';是不适合的。 ======>>视图
22、视图是伪表,视图本事不包含如何数据的,将多个物理表的数据通过视图动态地组织在一起,用户可以像使用普通物理表那样使用它。
23、视图具有以下特性:①可以公开表中特定的行和列;②简化复杂的SQL查询;③可以限制可插入/更新的值范围。
24、创建视图:create view 视图名(列名,...) as select 语句 [with check point];
删除视图:drop view 视图名;
查看视图所有列信息:show fields from 视图名;
视图名建议[v_]的形式开头。
25、不能进行插入/更新/删除操作的场合:
①视图列中含有统计函数
②视图定义使用了GROUP BY/HAVING语句,DISTINCT语句,UNION语句的情况
注:HAVING是对group by设置查询条件;distinct是要求查询结果没有重复项。
③视图定义时使用了子查询
④跨越多个表进行数据的变更操作
26、创建视图时使用[with check option]命令,将不能插入或更新不符合视图的检索条件的数据。
如: [sql] view plaincopyhttps://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg
注:上面delimiter命令改变分隔符为//,因为在存储过中使用到";"。
30、存储过程中可使用的控制语句:
①if...elseif...else...end if
②case when 值1 then 执行命令 when 值2 then 执行命令 else 执行名 end case
③循环控制(后置判断):repeat 直至条件表达式为true时才执行的命令 until 条件表达式 end repeat
④循环控制(前置判断):while 条件表达式 do 系列命令 end while
31、查看存储过程是否存在:show procedure status [\G];
查看存储过程信息:show create procedure 存储过程名;
删除存储过程:drop procedure 存储过程名;
执行存储过程名:call 存储过程名(参数,……);
32、定义存储过程可以声明局部变量:declare 变量名 数据类型[初始值];
赋值给变量:set 变量名=值; =====>>存储函数
33、存储函数是保存在数据库中的函数(Function)。所谓函数就是按照事先决定的规则进行处理,然后将结果返回的单功能机制。
34、定义存储函数:
create function 函数名(
参数1 数据类型1
[,数据2 数据类型2...]
)returns 返回值类型
begin
任意系列SQL语句
return 返回值;
end
注:①参数只有输入型IN
②向调用返回结果值
③存储函数给定[fn_]的前缀
35、查看全部已创建的存储函数:show function status;
查看存储函数的信息:show create function 函数名 [\G];
存储函数调用:select 函数名(参数);
如:
delimiter //
create function fn_factorial(
f_num int
)returns int
begin
declare f_result int default 1;--定义局部变量并初始化为1
while f_num>1 do
set f_result=f_result*f_num;
set f_num=f_num-1;
end while;
retrun f_result;
delimiter ;
调用存储函数:
select fn_factorial(5), fn_factorial(0); ======>>触发器
36、触发器是在操作数据库时,执行一个动作,而触发了另一个动作。如删除表1的一条记录,在表2中插入一条日志记录。
37、创建触发器:
create trigger 触发器名 发生时刻 事件名
on 表名 for each row
begin
任意系列SQL语句
end
说明:①触发器不是直接与运行的,而是针对具体表的操作事时被调用的;
②决定触发器运行时刻具体是指发生在insert、update、delete等操作的前还是后,用before或after表示。
③for each row 表示以行为单位执行的,为固定值。
确认已创建完成的触发器列表和触发器的信息:show trigger [\G];
删除触发器:drop trigger 触发器名;
delimiter //
create trigger trg_customer_history after delete(
on customer for each row
begin
insert into customer_history(mid,name,birth,sex,updated)