1、常见数据库
oracle:和Java兼容性很好,适合中大型应用
sql server:window平台应用非常广泛,和C#,.net平台兼容非常好
DB2:IBM服务器 --> UNIX --> DB2 --> Websphere
Mysql:关系型数据库,免费,和Java语言兼容性非常好,适合中小型应用
MongoDB:非关系型数据库
2、Mysql数据库
2.1、管理数据库
增加:create database 数据库 default character utf-8
删除:drop database 数据库
修改:alter database 数据库 default character gbk
查询:show databases / show create database 数据库
2.2、管理表
增加:create table 表 (字段名1 字段类型,字段名2 字段类型……);
删除:drop table 表;
修改:alter table 表 rename [to] 新表名
查询:show tables / desc student;
2.3、数据管理
增加:insert into 表(字段1,字段2,…) values (值1,值2,…)
删除:delete from 表 where 条件;
修改:update 表 set 字段=值 where 条件;
查询:select * from 表;
2.4、sql语句分类
DDL:数据定义语言(create,drop,alert)
DML:数据操作语言(insert,delete,update,truncate)
DQL:数据查询语言(select,show)
3.数据约束
3.1、默认值default:对默认值字段可以插入null
3.3、非空not null:非空字符不能赋null
3.3、主键primary key:非空+唯一 (unique)
3.4、自增长:id int(4) zerofill primary key auto_increment
3.5、外键
部门表(主表)
员工表(从表/副表):constraint 外键名称 foreign key (外键(从表)) references 主表(参考字段)
添加数据:先添加主表,再添加副表
修改数据:先修改副表,在修改主表
删除数据:先删除副表,再删除主表
3.6、级联操作(在外键基础上使用)
级联修改:on update cascade
级联删除:on delete cascade
4、关联查询(多表查询)
内连接查询:inner join on
左外连接查询:left outer join on 使用左边表的数据去匹配右边表的数据,左表的数据一定会显示完成
右外连接查询:right outer join on 使用右边表的数据去匹配左边表的数据,右表的数据一定会完成显示
自连接查询
5、存储过程:带有逻辑的sql语句,相当于创建了一个快捷方式,有需要时直接使用
执行效率非常快,是在数据库的服务器端执行的;移植性很差,不同数据库的存储过程不能移植
5.1、存储过程语法
创建存储过程
delimiter $ 声明存储过程的结束符
create procedure 名称(参数) 存储过程名称(参数列表)
begin 开始
sql语句 sql语句+流程控制
end $ 结束
执行存储过程
call 名称(参数)
5.2、参数:
in输入参数,携带数据到存储过程中
DELIMITER $ CREATE PROCEDURE pro_findById(IN eid INT) -- IN: 输入参数 BEGIN SELECT * FROM employee WHERE id=eid; END $ -- 调用 CALL pro_findById(4);
out输出参数,从存储过程中返回结果
DELIMITER $ CREATE PROCEDURE pro_testOut(OUT str VARCHAR(20)) -- OUT:输出参数 BEGIN SET str='helljava'; -- 给参数赋值 END $ -- 删除存储过程 DROP PROCEDURE pro_testOut;
MySQL的变量
全局变量(内置变量):
show variables 查看所有全局变量
select @@变量名 查看某个全局变量
set 变量名=新值 修改全局变量
会话变量:只存在于当前客户端与数据库服务端的一次连接中,如果连接断开,会话变量全部丢失
set @变量=值 定义会话变量
select @变量 查看会话变量
局部变量:在存储过程中使用,存储过程执行完,变量丢失
inout输入输出参数,既可以输入又可以输出
DELIMITER $ CREATE PROCEDURE pro_testInOut(INOUT n INT) -- INOUT: 输入输出参数 BEGIN -- 查看变量 SELECT n; SET n =500; END $ -- 调用 SET @n=10; CALL pro_testInOut(@n); SELECT @n;
6、触发器
当操作某张表时,希望同时触发一些动作、行为
-- 创建触发器(添加) CREATE TRIGGER tri_empAdd AFTER INSERT ON employee FOR EACH ROW -- 当往员工表插入一条记录时 INSERT INTO test_log(content) VALUES('员工表插入了一条记录'); -- 插入数据 INSERT INTO employee(id,empName,deptId) VALUES(7,'扎古斯',1); INSERT INTO employee(id,empName,deptId) VALUES(8,'扎古斯2',1); -- 创建触发器(修改) CREATE TRIGGER tri_empUpd AFTER UPDATE ON employee FOR EACH ROW -- 当往员工表修改一条记录时 INSERT INTO test_log(content) VALUES('员工表修改了一条记录'); -- 修改 UPDATE employee SET empName='eric' WHERE id=7; -- 创建触发器(删除) CREATE TRIGGER tri_empDel AFTER DELETE ON employee FOR EACH ROW -- 当往员工表删除一条记录时 INSERT INTO test_log(content) VALUES('员工表删除了一条记录'); -- 删除 DELETE FROM employee WHERE id=7;