1.mySql基础

USE day15;

-- 创建表
CREATE TABLE teacher(
id INT,
NAME VARCHAR()
)
-- 查看所有表
SHOW TABLES; DESC student; DROP TABLE student; CREATE TABLE student(
id INT,
NAME VARCHAR(),
gender VARCHAR(),
age INT
) -- ********一、增删改数据********* ---
-- 1.1 增加数据
-- 插入所有字段。一定依次按顺序插入
INSERT INTO student VALUES(,'张三','男',);
-- 注意不能少或多字段值
-- INSERT INTO student VALUES(,'李四','女');
-- 插入部分字段
INSERT INTO student(id,NAME) VALUES(,'李四'); -- 1.2 修改数据
-- 修改所有数据(建议少用)
UPDATE student SET gender='女';
-- 带条件的修改(推荐使用)
UPDATE student SET gender='男' WHERE id=; -- 修改id为1的学生,修改性别为男
-- 修改多个字段,注意: SET 字段名=值,字段名=值,....
UPDATE student SET gender='男',age= WHERE id=; -- 1.3 删除数据
-- 删除所有数据(建议少用)
DELETE FROM student;
-- 带条件的删除(推荐使用)
DELETE FROM student WHERE id=;
-- 另一种方式
-- delete from: 可以全表删除 )可以带条件删除 )只能删除表的数据,不能删除表的约束 )使用delete from删除的数据可以回滚(事务)
-- truncate table: 可以全表删除 )不能带条件删除 )即可以删除表的数据,也可以删除表的约束 )使用truncate table删除的数据不能回滚
TRUNCATE TABLE student; CREATE TABLE test(
id INT PRIMARY KEY AUTO_INCREMENT, -- 自增长约束
NAME VARCHAR()
)
DESC test; -- .
DELETE FROM test;
--
TRUNCATE TABLE test; INSERT INTO test(NAME) VALUES('张三');
INSERT INTO test(NAME) VALUES('张三2');
INSERT INTO test(NAME) VALUES('张三3'); SELECT * FROM test; -- truncate table student where id=; 不能带条件 -- 查询数据
SELECT * FROM student; -- ********二、查询数据(select)*******--
-- 2.1 查询所有列
SELECT * FROM student; -- 2.2 查询指定列
SELECT id,NAME,gender FROM student; -- 2.3 查询时指定别名(as)
-- 注意: 在多表查询是经常使用表的别名
SELECT id AS '编号',NAME AS '姓名' FROM student; -- 2.4 查询时添加常量列
-- 需求: 在查询student表时添加一个班级列,内容为“java就业班”
SELECT id,NAME,gender,age,'java就业班' AS '年级' FROM student; -- 2.5 查询时合并列
-- 需求: 查询每个学生的servlet和jsp的总成绩
SELECT id,NAME,(servlet+jsp) AS '总成绩' FROM student;
-- 注意:合并列只能合并数值类型的字段
SELECT id,(NAME+servlet) FROM student; -- 2.6 查询时去除重复记录(DISTINCT)
-- 需求: 查询学生的性别 男 女
SELECT DISTINCT gender FROM student;
-- 另一种语法
SELECT DISTINCT(gender) FROM student;
-- 需求: 查询学生所在的地区
SELECT DISTINCT address FROM student; -- 2.7 条件查询(where)
-- 2.7. 逻辑条件: and(与) or(或)
-- 需求: 查询id为2,且姓名为李四的学生
SELECT * FROM student WHERE id= AND NAME='李四'; -- 交集 -- 需求: 查询id为2,或姓名为张三的学生
SELECT * FROM student WHERE id= OR NAME='张三'; -- 并集 -- 2.7. 比较条件: > < >= <= = <>(不等于) between and (等价于>= 且 <=)
-- 需求: 查询servlet成绩大于70分的学生
SELECT * FROM student WHERE servlet>; -- 需求: 查询jsp成绩大于等于75,且小于等于90分的学生
SELECT * FROM student WHERE jsp>= AND jsp<=;
-- 另一个语法
SELECT * FROM student WHERE jsp BETWEEN AND ; -- (包前包后) SELECT * FROM student WHERE gender<>'男'; -- 2.7. 判空条件(null 空字符串): is null / is not null / ='' / <>''
-- 需求: 查询地址为空的学生(包括null和空字符串)
-- null vs 空字符串
-- null:表示没有值
-- 空字符串:有值的!
-- 判断null
SELECT * FROM student WHERE address IS NULL ;
-- 判断空字符串
SELECT * FROM student WHERE address=''; SELECT * FROM student WHERE address IS NULL OR address=''; -- (包括null和空字符串) -- 需求: 查询有地址的学生(不包括null和空字符串)
SELECT * FROM student WHERE address IS NOT NULL AND address<>''; -- 2.7. 模糊条件: like
-- 通常使用以下替换标记:
-- % : 表示任意个字符
-- _ : 表示一个字符
-- 需求: 查询姓‘张’的学生
SELECT * FROM student WHERE NAME LIKE '李%'; -- 需求: 查询姓‘李’,且姓名只有两个字的学生
SELECT * FROM student WHERE NAME LIKE '李_'; --- 练习 --
CREATE TABLE student2(
id INT,
NAME VARCHAR(),
chinese FLOAT,
english FLOAT,
math FLOAT
); INSERT INTO student2(id,NAME,chinese,english,math) VALUES(,'张小明',,,);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(,'李进',,,);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(,'王五',,,);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(,'李一',,,);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(,'李来财',,,);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(,'张进宝',,,);
INSERT INTO student2(id,NAME,chinese,english,math) VALUES(,'黄蓉',,,); -- 查询表中所有学生的信息。
SELECT * FROM student2; -- 查询表中所有学生的姓名和对应的英语成绩。
SELECT NAME,english FROM student2; -- 过滤表中英语成绩的重复数据
SELECT DISTINCT(english) FROM student2; -- 使用别名表示学生分数。
SELECT NAME AS '姓名',chinese AS '语文',english AS '英语',math AS '数学' FROM student2; -- 查询姓名为李一的学生成绩
SELECT * FROM student2 WHERE NAME='李一'; -- 查询英语成绩大于等于90分的同学
SELECT * FROM student2 WHERE english>=; -- 查询总分大于200分的所有同学
SELECT * FROM student2 WHERE (chinese+english+math)>; -- 查询所有姓李的学生英语成绩。
SELECT NAME,english FROM student2 WHERE NAME LIKE '李%'; -- 查询英语>80或者总分>200的同学
SELECT * FROM student2 WHERE english> OR (chinese+english+math)> -- 统计每个学生的总分。
SELECT id,NAME,(chinese+english+math) AS '总成绩' FROM student2; -- 在所有学生总分数上加10分特长分。
SELECT id,NAME,(chinese+english+math+) AS '总成绩' FROM student2; SELECT * FROM student; -- 2.8 聚合查询(使用聚合函数的查询)
-- 常用的聚合函数: sum() avg() max() min() count()
-- 需求:查询学生的servlet的总成绩 (sum() :求和函数)
SELECT SUM(servlet) AS 'servlet的总成绩' FROM student; -- 需求: 查询学生的servlet的平均分
SELECT AVG(servlet) AS 'servlet的平均分' FROM student; -- 需求: 查询当前servlet最高分
SELECT MAX(servlet) AS '最高分' FROM student; -- 需求: 查询最低分
SELECT MIN(servlet) AS '最低分' FROM student; -- 需求: 统计当前有多少学生(count(字段))
SELECT COUNT(*) FROM student; SELECT COUNT(id) FROM student; -- 注意:count()函数统计的数量不包含null的数据
-- 使用count统计表的记录数,要使用不包含null值的字段
SELECT COUNT(age) FROM student; SELECT * FROM student;
-- 2.9 分页查询(limit 起始行,查询几行)
-- 起始行从0开始
-- 分页:当前页 每页显示多少条
-- 分页查询当前页的数据的sql: SELECT * FROM student LIMIT (当前页-)*每页显示多少条,每页显示多少条; -- 需求: 查询第1,2条记录(第1页的数据)
SELECT * FROM student LIMIT ,;
-- 查询第3,4条记录(第2页的数据)
SELECT * FROM student LIMIT ,;
-- 查询第5,6条记录(第3页的数据)
SELECT * FROM student LIMIT ,;
-- 查询第7,8条记录 (没有记录不显示)
SELECT * FROM student LIMIT ,; -- 2.10 查询排序(order by )
-- 语法 :order by 字段 asc/desc
-- asc: 顺序,正序。数值:递增,字母:自然顺序(a-z)
-- desc: 倒序,反序。数值:递减,字母:自然反序(z-a) -- 默认情况下,按照插入记录顺序排序
SELECT * FROM student; -- 需求: 按照id顺序排序
SELECT * FROM student ORDER BY id ASC;
SELECT * FROM student ORDER BY id; -- 默认正序 SELECT * FROM student ORDER BY id DESC;-- 反序 -- 注意:多个排序条件
-- 需求: 按照servlet正序,按照jsp的倒序
SELECT * FROM student ORDER BY servlet ASC,jsp DESC; -- 2.11 分组查询(group by)
-- 需求: 查询男女的人数
-- 预期结果:
-- 男
--- 女
-- ) 把学生按照性别分组(GROUP BY gender)
-- ) 统计每组的人数(COUNT(*))
SELECT gender,COUNT(*) FROM student GROUP BY gender; -- 2.12 分组查询后筛选
-- 需求: 查询总人数大于2的性别
-- ) 查询男女的人数
-- )筛选出人数大于2的记录(having)
--- 注意: 分组之前条件使用where关键字,分组之前条件使用having关键字
SELECT gender,COUNT(*) FROM student WHERE GROUP BY gender HAVING COUNT(*)>; -- 给student表添加servlet和jsp成绩列
ALTER TABLE student ADD servlet INT,ADD jsp INT;
ALTER TABLE student ADD servlet INT;
ALTER TABLE student ADD address VARCHAR();
DESC student;
UPDATE student SET servlet=,jsp= WHERE id=;
UPDATE student SET servlet=,jsp= WHERE id=;
UPDATE student SET gender='女' WHERE id=;
UPDATE student SET address='广州天河' WHERE id=;
UPDATE student SET address='广州天河' WHERE id=;
UPDATE student SET address='广州番禺' WHERE id=; INSERT INTO student VALUES(,'陈六','男',,,,'');
INSERT INTO student VALUES(,'李七','男',,,,NULL);
INSERT INTO student VALUES(,'李八八','男',,,,'广州天河');

1)mysql存储结构: 数据库 -> 表 -> 数据   sql语句

2)管理数据库:

  增加: create database 数据库 default character utf8;

  删除: drop database 数据库;

  修改: alter database 数据库 default character gbk;

  查询: show databases / show create database 数据库;

3) 管理表:

   选择数据库:use 数据库;

   增加: create table 表(字段名1 字段类型,字段名2 字段类型......);

   删除: drop table 表;

   修改:

    添加字段: alter table 表 add [column] 字段名 字段类型;

    删除字段:   alter table 表 drop [column] 字段名;

    修改字段类型: alter table 表 modify 字段名 新的字段类型;

    修改字段名称 : alter table 表 change 旧字段名 新字段名 字段类型;

      修改表名称:   alter table 表 rename [to] 新表名;

   查询:

    show tables  /  desc student;

4) 管理数据:

增加: insert into 表(字段1,字段2,。。。) values(值1,值2.。。。。);

删除: delete from 表 where 条件;

修改: update 表 set 字段1=值1,字段2=值2...... where 条件;

查询:

   4.1)所有字段: select * from 表;

  4.2)指定字段: select 字段1,字段2.... from 表;

  4.3)指定别名: select 字段1 as 别名 from 表;

4.4 )合并列: select (字段1+字段2) from 表;

   4.5)去重: select distinct 字段 from 表;

   4.6)条件查询:

    a)逻辑条件 :and(与)     or(或)

    select * from 表 where 条件1 and/or 条件2

    b)比较条件: >  <  >=  <=  =  <>   between and(在。。。之间)

    select * from 表 where servlet>=90;

    c)判空条件:

     判断null: is null   /  is not null

     判断空字符串: =''    /  <>''

    d)模糊条件: like

        %:  替换任意个字符

      _:   替换一个字符

  4.7 分页查询:limit 起始行,查询行数

    起始行从0开始

  4.8 排序: order by 字段 asc/desc

      asc: 正序,顺序

      desc:反序,倒序

  4.9 分组查询:group by 字段

  4.10: 分组后筛选: having 条件

SQL语句的分类:

  DDL: 数据定义语言

  create / drop / alter

  DML:数据操作语句

  insert / delete /update / truncate

  DQL: 数据查询语言:

select / show

2.加强

-- day16课程内容 --
CREATE DATABASE day16;
USE day16; -- *************一、数据约束********************----
-- 1.1 默认值
CREATE TABLE student(
id INT,
NAME VARCHAR(),
address VARCHAR() DEFAULT '广州天河' -- 默认值
) DROP TABLE student;
-- 当字段没有插入值的时候,mysql自动给该字段分配默认值
INSERT INTO student(id,NAME) VALUES(,'张三'); -- 注意:默认值的字段允许为null
INSERT INTO student(id,NAME,address) VALUE(,'李四',NULL);
INSERT INTO student(id,NAME,address) VALUE(,'王五','广州番禺'); SELECT * FROM student; -- 1.2 非空
-- 需求: gender字段必须有值(不为null)
CREATE TABLE student(
id INT,
NAME VARCHAR(),
gender VARCHAR() NOT NULL -- 非空
) -- 非空字段必须赋值
INSERT INTO student(id,NAME) VALUES(,'李四');
-- 非空字符不能插入null
INSERT INTO student(id,NAME,gender) VALUES(,'李四',NULL); SELECT * FROM student; -- 1.3 唯一
CREATE TABLE student(
id INT UNIQUE, -- 唯一
NAME VARCHAR()
) INSERT INTO student(id,NAME) VALUES(,'zs');
INSERT INTO student(id,NAME) VALUES(,'lisi'); -- ERROR (): Duplicate entry '' for key 'id' INSERT INTO student(id,NAME) VALUES(,'lisi'); SELECT * FROM student; -- 1.4 主键(非空+唯一)
DROP TABLE student; CREATE TABLE student(
id INT PRIMARY KEY, -- 主键
NAME VARCHAR()
) INSERT INTO student(id,NAME) VALUES(,'张三');
INSERT INTO student(id,NAME) VALUES(,'张三');
-- INSERT INTO student(id,NAME) VALUES(,'李四'); -- 违反唯一约束: Duplicate entry '' for key 'PRIMARY' -- insert into student(name) value('李四'); -- 违反非空约束: ERROR (): Column 'id' cannot be null -- 1.5 自增长
CREATE TABLE student(
id INT() ZEROFILL PRIMARY KEY AUTO_INCREMENT, -- 自增长,从0开始 ZEROFILL 零填充
NAME VARCHAR()
) -- 自增长字段可以不赋值,自动递增
INSERT INTO student(NAME) VALUES('张三');
INSERT INTO student(NAME) VALUES('李四');
INSERT INTO student(NAME) VALUES('王五'); SELECT * FROM student;
-- 不能影响自增长约束
DELETE FROM student;
-- 可以影响自增长约束
TRUNCATE TABLE student; -- 1.6 外键约束
-- 员工表
CREATE TABLE employee(
id INT PRIMARY KEY,
empName VARCHAR(),
deptName VARCHAR() -- 部门名称
) INSERT INTO employee VALUES(,'张三','软件开发部');
INSERT INTO employee VALUES(,'李四','软件开发部');
INSERT INTO employee VALUES(,'王五','应用维护部'); SELECT * FROM employee; -- 添加员工,部门名称的数据冗余高
INSERT INTO employee VALUES(,'陈六','软件开发部'); -- 解决数据冗余高的问题:给冗余的字段放到一张独立表中
-- 独立设计一张部门表
CREATE TABLE dept(
id INT PRIMARY KEY,
deptName VARCHAR()
) DROP TABLE employee; -- 修改员工表
CREATE TABLE employee(
id INT PRIMARY KEY,
empName VARCHAR(),
deptId INT,-- 把部门名称改为部门ID
-- 声明一个外键约束
CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE -- ON CASCADE UPDATE :级联修改
-- 外键名称 外键 参考表(参考字段)
) INSERT INTO dept(id,deptName) VALUES(,'软件开发部');
INSERT INTO dept(id,deptName) VALUES(,'应用维护部');
INSERT INTO dept(id,deptName) VALUES(,'秘书部'); INSERT INTO employee VALUES(,'张三',);
INSERT INTO employee VALUES(,'李四',);
INSERT INTO employee VALUES(,'王五',);
INSERT INTO employee VALUES(,'陈六',); -- 问题: 该记录业务上不合法,员工插入了一个不存在的部门数据
INSERT INTO employee VALUES(,'陈六',); -- 违反外键约束: Cannot add or update a child row: a foreign key constraint fails (`day16`.`employee`, CONSTRAINT `emlyee_dept_fk` FOREIGN KEY (`deptId`) REFERENCES `dept` (`id`)) -- )当有了外键约束,添加数据的顺序: 先添加主表,再添加副表数据
-- )当有了外键约束,修改数据的顺序: 先修改副表,再修改主表数据
-- )当有了外键约束,删除数据的顺序: 先删除副表,再删除主表数据
-- 修改部门(不能直接修改主表)
UPDATE dept SET id= WHERE id=;
-- 先修改员工表
UPDATE employee SET deptId= WHERE id=; -- 删除部门
DELETE FROM dept WHERE id=; -- 先删除员工表
DELETE FROM employee WHERE deptId=; SELECT * FROM dept;
SELECT * FROM employee; -- 级联修改(修改)
-- 直接修改部门
UPDATE dept SET id= WHERE id=; -- 级联删除
-- 直接删除部门
DELETE FROM dept WHERE id=; -- **************二、关联查询(多表查询)****************----
-- 需求:查询员工及其所在部门(显示员工姓名,部门名称)
-- 2.1 交叉连接查询(不推荐。产生笛卡尔乘积现象: * =,有些是重复记录)
SELECT empName,deptName FROM employee,dept; -- 需求:查询员工及其所在部门(显示员工姓名,部门名称)
-- 多表查询规则:)确定查询哪些表 )确定哪些哪些字段 )表与表之间连接条件 (规律:连接条件数量是表数量-)
-- 2.2 内连接查询:只有满足条件的结果才会显示(使用最频繁)
SELECT empName,deptName -- )确定哪些哪些字段
FROM employee,dept -- )确定查询哪些表
WHERE employee.deptId=dept.id -- )表与表之间连接条件 -- 内连接的另一种语法
SELECT empName,deptName
FROM employee
INNER JOIN dept
ON employee.deptId=dept.id; -- 使用别名
SELECT e.empName,d.deptName
FROM employee e
INNER JOIN dept d
ON e.deptId=d.id; -- 需求: 查询每个部门的员工
-- 预期结果:
-- 软件开发部 张三
-- 软件开发部 李四
-- 应用维护部 王五
-- 秘书部 陈六
-- 总经办 null
-- 2.2 左[外]连接查询: 使用左边表的数据去匹配右边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null
-- (注意: 左外连接:左表的数据一定会完成显示!)
SELECT d.deptName,e.empName
FROM dept d
LEFT OUTER JOIN employee e
ON d.id=e.deptId; -- 2.3 右[外]连接查询: 使用右边表的数据去匹配左边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null
-- (注意: 右外连接:右表的数据一定会完成显示!)
SELECT d.deptName,e.empName
FROM employee e
RIGHT OUTER JOIN dept d
ON d.id=e.deptId; -- 2.4 自连接查询
-- 需求:查询员工及其上司
-- 预期结果:
-- 张三 null
-- 李四 张三
-- 王五 李四
-- 陈六 王五
SELECT e.empName,b.empName
FROM employee e
LEFT OUTER JOIN employee b
ON e.bossId=b.id; SELECT * FROM employee;
SELECT * FROM dept;
-- 添加上司ID
ALTER TABLE employee ADD bossId INT;
UPDATE employee SET bossId= WHERE id=;
UPDATE employee SET bossId= WHERE id=;
UPDATE employee SET bossId= WHERE id=; -- **************三、存储过程*******************-
-- 声明结束符
-- 创建存储过程
DELIMITER $
CREATE PROCEDURE pro_test()
BEGIN
-- 可以写多个sql语句;
SELECT * FROM employee;
END $ -- 执行存储过程
CALL pro_test(); -- 3.1 带有输入参数的存储过程
-- 需求:传入一个员工的id,查询员工信息
DELIMITER $
CREATE PROCEDURE pro_findById(IN eid INT) -- IN: 输入参数
BEGIN
SELECT * FROM employee WHERE id=eid;
END $ -- 调用
CALL pro_findById(); -- 3.2 带有输出参数的存储过程
DELIMITER $
CREATE PROCEDURE pro_testOut(OUT str VARCHAR()) -- OUT:输出参数
BEGIN
-- 给参数赋值
SET str='helljava';
END $ -- 删除存储过程
DROP PROCEDURE pro_testOut;
-- 调用
-- 如何接受返回参数的值??
-- ***mysql的变量******
-- 全局变量(内置变量):mysql数据库内置的变量 (所有连接都起作用)
-- 查看所有全局变量: show variables
-- 查看某个全局变量: select @@变量名
-- 修改全局变量: set 变量名=新值
-- character_set_client: mysql服务器的接收数据的编码
-- character_set_results:mysql服务器输出数据的编码 -- 会话变量: 只存在于当前客户端与数据库服务器端的一次连接当中。如果连接断开,那么会话变量全部丢失!
-- 定义会话变量: set @变量=值
-- 查看会话变量: select @变量 -- 局部变量: 在存储过程中使用的变量就叫局部变量。只要存储过程执行完毕,局部变量就丢失!! -- )定义一个会话变量name, )使用name会话变量接收存储过程的返回值
CALL pro_testOut(@NAME);
-- 查看变量值
SELECT @NAME; -- 3.3 带有输入输出参数的存储过程
DELIMITER $
CREATE PROCEDURE pro_testInOut(INOUT n INT) -- INOUT: 输入输出参数
BEGIN
-- 查看变量
SELECT n;
SET n =;
END $ -- 调用
SET @n=; CALL pro_testInOut(@n); SELECT @n; -- 3.4 带有条件判断的存储过程
-- 需求:输入一个整数,如果1,则返回“星期一”,如果2,返回“星期二”,如果3,返回“星期三”。其他数字,返回“错误输入”;
DELIMITER $
CREATE PROCEDURE pro_testIf(IN num INT,OUT str VARCHAR())
BEGIN
IF num= THEN
SET str='星期一';
ELSEIF num= THEN
SET str='星期二';
ELSEIF num= THEN
SET str='星期三';
ELSE
SET str='输入错误';
END IF;
END $ CALL pro_testIf(,@str); SELECT @str; -- 3.5 带有循环功能的存储过程
-- 需求: 输入一个整数,求和。例如,输入100,统计1-100的和
DELIMITER $
CREATE PROCEDURE pro_testWhile(IN num INT,OUT result INT)
BEGIN
-- 定义一个局部变量
DECLARE i INT DEFAULT ;
DECLARE vsum INT DEFAULT ;
WHILE i<=num DO
SET vsum = vsum+i;
SET i=i+;
END WHILE;
SET result=vsum;
END $ DROP PROCEDURE pro_testWhile; CALL pro_testWhile(,@result); SELECT @result; USE day16; -- 3.6 使用查询的结果赋值给变量(INTO)
DELIMITER $
CREATE PROCEDURE pro_findById2(IN eid INT,OUT vname VARCHAR() )
BEGIN
SELECT empName INTO vname FROM employee WHERE id=eid;
END $ CALL pro_findById2(,@NAME); SELECT @NAME; USE day15; SELECT * FROM student2; -- 练习: 编写一个存储过程
如果学生的英语平均分小于等于70分,则输出'一般'
如果学生的英语平均分大于70分,且小于等于90分,则输出‘良好’
如果学生的英语平均分大于90分,则输出‘优秀’ DELIMITER $
CREATE PROCEDURE pro_testAvg(OUT str VARCHAR())
BEGIN
-- 定义局部变量,接收平均分
DECLARE savg DOUBLE;
-- 计算英语平方分
SELECT AVG(english) INTO savg FROM student2;
IF savg<= THEN
SET str='一般';
ELSEIF savg> AND savg<= THEN
SET str='良好';
ELSE
SET str='优秀';
END IF;
END $ CALL pro_testAvg(@str); SELECT @str; -- ************四、触发器*****************
SELECT * FROM employee; -- 日志表
CREATE TABLE test_log(
id INT PRIMARY KEY AUTO_INCREMENT,
content VARCHAR()
) -- 需求: 当向员工表插入一条记录时,希望mysql自动同时往日志表插入数据
-- 创建触发器(添加)
CREATE TRIGGER tri_empAdd AFTER INSERT ON employee FOR EACH ROW -- 当往员工表插入一条记录时
INSERT INTO test_log(content) VALUES('员工表插入了一条记录'); -- 插入数据
INSERT INTO employee(id,empName,deptId) VALUES(,'扎古斯',);
INSERT INTO employee(id,empName,deptId) VALUES(,'扎古斯2',); -- 创建触发器(修改)
CREATE TRIGGER tri_empUpd AFTER UPDATE ON employee FOR EACH ROW -- 当往员工表修改一条记录时
INSERT INTO test_log(content) VALUES('员工表修改了一条记录'); -- 修改
UPDATE employee SET empName='eric' WHERE id=; -- 创建触发器(删除)
CREATE TRIGGER tri_empDel AFTER DELETE ON employee FOR EACH ROW -- 当往员工表删除一条记录时
INSERT INTO test_log(content) VALUES('员工表删除了一条记录'); -- 删除
DELETE FROM employee WHERE id=; SELECT * FROM employee;
SELECT * FROM test_log; -- ***********五、mysql权限问题****************
-- mysql数据库权限问题:root :拥有所有权限(可以干任何事情)
-- 权限账户,只拥有部分权限(CURD)例如,只能操作某个数据库的某张表
-- 如何修改mysql的用户密码?
-- password: md5加密函数(单向加密)
SELECT PASSWORD('root'); -- *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B -- mysql数据库,用户配置 : user表
USE mysql; SELECT * FROM USER; -- 修改密码
UPDATE USER SET PASSWORD=PASSWORD('') WHERE USER='root'; -- 分配权限账户
GRANT SELECT ON day16.employee TO 'eric'@'localhost' IDENTIFIED BY '';
GRANT DELETE ON day16.employee TO 'eric'@'localhost' IDENTIFIED BY ''; -- ****** 六,mysql备份和还原********

1)数据约束(表约束)

  默认值: default 默认值

  非空:   not null

  唯一: unique

  主键: primary key (非空+唯一)

  自增长: auto_increment

  外键: foreign key   约束两种表

2)关联查询(多表查询)

  2.1 交叉连接(产生笛卡尔积:原因:连接条件不足够)  表数量-1

  2.2 内连接查询: inner join

    只有满足连接条件的数据才会显示!!!

  2.3 左【外】连接查询:left [outer] join

    左表的数据必须全部显示,用左表去匹配右表的数据,如果右表有符号条件的数据则显示符 合条件的数据;如果不符合条件,则显示null。

  2.4 右【外】连接查询: right [outer] join

    右表的数据必须全部显示,用右表去匹配左表的数据,如果左表有符号条件的数据则显示符 合条件的数据;如果不符合条件,则显示null。

  2.5 自连接查询

    3)存储过程

    -- 创建存储过程语法

    delimeter 结束符号

    create procedure 名称(IN/OUT/INOUT  参数名称 参数类型)

    begin

      带逻辑的sql语句

    end 结束符号

    --调用存储过程

    CALL 存储过程名称(实际参数);

MySql-rules的更多相关文章

  1. Prometheus 监控MySQL

    目录 0.简介 1.mysql_exporter部署 2.mysql报警规则 0.简介 文中主要监控MySQL/MySQL主从信息 版本:mysql-5.7,mysql_exporter-0.12.1 ...

  2. Docker监控平台prometheus和grafana,监控redis,mysql,docker,服务器信息

    Docker监控平台prometheus和grafana,监控redis,mysql,docker,服务器信息 一.通过redis_exporter监控redis 1.1 下载镜像 1.2 运行服务 ...

  3. prometheus告警规则模板:MySQL,nginx,node

    rules_up.yml groups: - name: up rules: - alert: mysql expr: up{instance="db1",job="my ...

  4. Snort - 配置文件

    Snort.conf 版本 2.9.8.3 编译可用选项: --enable-gre --enable-mpls --enable-targetbased --enable-ppm --enable- ...

  5. Snort里的规则目录文件解读(图文详解)

    不多说,直接上干货! snort的规则啊,是基于文本的,它通常存在于snort程序目录中或者子目录中,规则文件按照不同的组,进行分类存放的. snort的安装目录 [root@datatest sno ...

  6. mysql编译时报的一个警告warning: type-punning to incomplete type might break strict-aliasing rules,可能是bug

    cmake的时候报了一个警告: /softdb/mysql-5.5.37/storage/innobase/handler/ha_innodb.cc:11870: warning: type-punn ...

  7. 学习笔记:Rick's RoTs -- Rules of Thumb for MySQL

    Table of Contents SELECTs -- do's and don'tsINDEXingENGINE DifferencesOptimizations, and notPARTITIO ...

  8. Differences between INDEX, PRIMARY, UNIQUE, FULLTEXT in MySQL?

    487down vote Differences KEY or INDEX refers to a normal non-unique index.  Non-distinct values for ...

  9. mysql apach php

    一.MySql MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的.如果是msi格式的可以直接点击安装,按照它给出的安装提示进行安装(相信大家的英文可以看懂英文提示),一般MySQL将 ...

  10. Asp.Net Core 项目搭建 基础配置 和MySql 的使用

    一.开发环境准备 1.安装Visual Studio 2015,我这里安装的是专业版. 2.安装.NET Core SDK相关 需要安装  Visual Studio 2015 update3和NET ...

随机推荐

  1. Python中运算符与while初识

    一.运算符 1.算术运算: 2.比较运算: 3.赋值运算: 4.位运算: 注: ~  举例: ~5 = -6  解释: 将二进制数+1之后乘以-1,即~x = -(x+1),-(101 + 1) = ...

  2. 点击单选button后的文字就可以选定相应单选button

    比方我想点击单选button后的文字就选中对应的button: <input type="radio" name="sex" value="1& ...

  3. java -cp 命令 java jar 命令和 hadoop jar 命令

     -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;”  java -cp .;myClass.jar pa ...

  4. Oracle的substr函数简单用法与substring区别

    substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H'  *从字符串第一个字符开始截取长度为1的字符串 subst ...

  5. Educational Codeforces Round 27 F. Guards In The Storehouse

    F. Guards In The Storehouse time limit per test 1.5 seconds memory limit per test 512 megabytes inpu ...

  6. dedecms织梦如何调用指定的多个栏目导航

    {dede:channelartlist row='2' typeid='1,2这里输入多个指定的栏目ID' } <li><a href='{dede:field name='typ ...

  7. Linux高并发应用类型对系统内核的优化

    Linux操作系统内核参数优化 net.ipv4.tcp_max_tw_buckets = net.ipv4.ip_local_port_range = net.ipv4.tcp_tw_recycle ...

  8. Coursera machine learning 第二周 quiz 答案 Linear Regression with Multiple Variables

    https://www.coursera.org/learn/machine-learning/exam/7pytE/linear-regression-with-multiple-variables ...

  9. centos7.0 安转mysql5.7

    安装mysql5.7需要boost依赖包groupadd mysql useradd -r -g mysql -s /bin/false mysql cmake . -DCMAKE_INSTALL_P ...

  10. 替换jar包内指定的文件

    用Java jar 工具来替换. ① jar uvf test.jar test.class 把test.class 直接添加到jar包的根目录,也就是替换到根目录文件. ②jar uvf test. ...