Day02----MySql

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;
原文地址:https://www.cnblogs.com/rosehuang/p/7269131.html