一、视图+触发器+存储函数+存储过程+创建索引+创建用户+授权+各种创建
1.视图
DROP VIEW IF EXISTS xuegongbu_view1;
CREATE VIEW xuegongbu_view1
AS
SELECT nation_place AS '籍贯',sno AS '学号',sname AS '姓名',major AS '所属专业',career AS '就业去向' FROM student
ORDER BY sno,nation_place
SELECT *FROM xuegongbu_view1;
2.触发器
DROP TRIGGER IF EXISTS ins_stu
DELIMITER $$
CREATE TRIGGER ins_stu
AFTER INSERT ON student FOR EACH ROW
BEGIN
INSERT INTO cj ( stu_id, stu_name)VALUES( new.stu_id, new.stu_name);
END
$$
DELIMITER ;
3.存储函数
有输出 return,不能return集合
使用存储函数
4.存储过程
DROP PROCEDURE IF EXISTS pay_cost;
DELIMITER //
CREATE PROCEDURE pay_cost(sno INT,dno INT,cost INT) #传入学号sno,宿舍号dno,缴费金额cost
BEGIN
IF (SELECT COUNT(*) FROM move_in m WHERE m.dno=dno)=6 THEN
SELECT '宿舍已满员,缴费失败!'缴费结果; #这里为什么一定要加封号
ELSEIF cost<1200 THEN
SELECT '缴费失败!金额小于1200..'缴费结果;
ELSE
INSERT INTO move_in VALUES(sno,dno,1200);
SELECT '缴费成功!'缴费结果;
END IF;
END //
DELIMITER ;
call test.pay_cost(1218043601,0101101,1200)
5.创建索引
CREATE INDEX sno_index ON student(sno)
6.创建用户
CREATE USER 'xuegongbu'@'host' IDENTIFIED BY '123456'
7.授权
GRANT SELECT,INSERT,UPDATE,DELETE ON test.student TO xuegognbu@'localhost'
GRANT SELECT ON test.teacher TO xuegognbu@'localhost'
8.各种创建
#1.建库,删库,切换库
create database test #创建数据库test
drop database test #删除数据库test
use test1 #切换到数据库test1
#2.建表,删表
create table student(
id int(3) primary key,
name varchar(8) not null,
pass varchar(20) not null
)
drop table student
二、小知识点
1.增删改查
增:insert into table values(110,'110')
删:delete from table where (不加条件就是全表删除)
改:update table set sno=11111
查:select *from table where....
2.mysql日期
https://www.cnblogs.com/ldwnana/p/8401577.html
完整的日期格式: YYYY-MM-DD HH:MM:SS[.fraction] //中括号为分数
包括date和time
date对应YYYY-MM-DD time对应HH:MM:SS[.fraction]
mysql中可以便是时间的数据类型有三种:date,TIMESTAMP和DATETIME
date只有date部分,没有time部分
举例:
create table test(id int,hiredate date)
插入方式: insert into test values(1,'19960812000000')
time部分插入不是000000会报错,但是能够插入成功
TIMESTAMP和DATETIME类似,可表示YYYY-MM-DD HH:MM:SS[.fraction]
timestamp(时间戳)更正式,查询时会看客户端的当前时区
datetime怎么输入,怎么输出
测试:(见原文)
show variables like 'time_zone'
set time_zone='+0.00' //修改时区为0号时区(英国)-本初子午线位置:英国伦敦格林尼治天文台原址,我国是东八区 time_zone='+8.00'
3.comment-备注
sno int comment '我是猪'
4.mysql中check属性无效,改用enum()和set()
枚举类型enum(),集合类型set()曲线救国
sex char(2) NOT NULL DEFAULT '男' CHECK (Sex IN ('男','女'))
枚举类型:sex enum('男','女') not null defalut '男'
5.升序和降序
升序:asc
降序:desc
6.创建表,存储过程,触发器之前,检查是否存在当前实例
drop table if exists 实例名称;
7.平均数,保留两位小数(应用场景:算平均分)
round(avg(分数),2)
8.嵌套查询,父查询被子查询引用实例
9.视图的查询from语句后面不能添加子查询,可以把子查询包装成视图
10.if表达式和if流程控制
#1.if表达式
if(condition,A,B)
condition为true时,返回A
#2.if流程控制(注意,elseif是连起来写的,巨坑)
if a>b then
elseif a<b then
else
end if
11.select当做print使用
select '我是猪'
12.查看数据库当前用户
select user()