大家好,我是曜耀。
今天发一下关于mysql的知识点,是曜耀当时学习mysql时记录的,记得当时学mysql时没有理解mysql学的非常艰苦,对此真是怀念啊。
不说了上知识。希望对个位有用。
mysQl指令
- select current_user(); #查询当前登录的用户名
- Select now(); #查询数据库当前时间
- Show databases; #查询数据库系统中的数据库
- Selectversion(); #查询数据库版本信息
数据库的相关指令
- Create database student_db; #创建名字为student_db的数据库
- Drop database student_db; #删除名字为student_bd的数据库
- Drop database if exists student_db #如果存在名字为student_dbdede的数据库就删除
- Create database student_db; #创建名字为student_db的数据库
- Use student_db; #选择使用student_db数据库
- PRIMARY KEY #主键
- FOREIGN KEY #外键
- NOT NULL #不为空
- UNIQUE #唯一
- AUTO_INCREMNT #自动增加
- DEFAULT #默认值
- CHECK #检查约束
常见指令
查看所有表 show tables;
查看表结构 desc 表名;
如果表存在则删除表 drop table if exists 表名;
数据类型
数字 int,float decimal()
字符 char varchar
日期 datetime
往表中增加数据
insert into 表名(列1,列2,列3) values(列1的值,列2的值,列3的值);
还可以一次录入多条
查询数据
select * from 表名
select * from 表名 where 主键=值 主键代表着唯一
*表示通配符,所有列都查询,也可以具体写列名
条件查询:
select * from 表名 where 列名=值
修改
update 表名 set 列1=新值,列2=新值,列3=新值 where 主键=值
4.删除
delete from 表名 where 主键=值
修改和删除不带where后边的条件,就会出现整表被改或者整表删除
聚合函数
个数 count() 参数一般是*或者是主键列,会忽略空
求和 sum()
最大 max()
最小 min()
平均 avg()
括号内是参数,写的是列名
查询
1.大于小于,等于,不等于大于等于,小于等于
2.多条件并列,使用and,多态件满足一个,or
3.between and
4.
排序 order by 列名 desc(降序) asc(升序)
分页 limit 从几开始 显示几条
别名 as
排序和分页
select * from books order by price desc limit 2;
去重
select distinct 参数 from 表名;
模糊查询 like
占位符 % 表示占位占0-无数位 _ 一个占一位
高级查询
查询学生表的男生
select * from student where sex='男';
-- 按年龄对学生表进行倒叙查询
select * from student order by stuno desc;
-- 统计学生表男女生的个数。
select sex,count(*) from student group by sex;
-- 查询班级表中企业信息化相关的班级。
select * from class where classname like '%企%信%'
2.连接查询,也叫多表查询,跨表查询。
两张表肯定是有一个列是一样的。但是不一定是外键约束。
语句
等值链接
select 表1.*,表2.* from 表1,表2 where 表1.列=表2.列
select * from 表1,表2,表3 where 表1.列=表2.列 and 表2.列=表3.列,
内连接
select * from 表1 inner join 表2 on 表1.列=表2.列
左外
select * from 表1 left join 表2 on 表1.列=表2.列
右外
select * from 表1 right join 表2 on 表1.列=表2.列
前边显示的列,如果两张表一样的列,记得写表名.列名
查询的原则:看到的是各种各样,表还是原样。
交叉连接
select * from 表1 cross join 表2
财务,数学常用,也叫笛卡尔积
●数值型函数
round(x,y)四舍五入。返回数值x带有y为小数结果的数值(四舍五入)
floor(x)向下取整。返回x的向下取整的整数
ceil(x)向上取整。返回x的向上取整的整数
truncate(x,y)数值截取。返回数值x截取y位小数的结果(不四舍五入)●时间日期函数
curdate()。返回当前日期;
now()。返回当前日期时间;
year(date)。从日期中选择出年份;
date_ format(date, '%Y-%m-%d)。把日期格式调整成年月-日的格式;
●字符串函数
concat(str1,str2.st.3...)合并字符串。将多个字符串合并成一个字符串;
upper(x)。用于将字母转成大写;
lower(x)。用于将字母转成小写;
reverse(x)。用于将字符串翻转;
●流程控制函数
(1) lF(y,t,f) 如果v为真返回t,否则返回f
例如: SELECT IF(1!=1,'1';2') FROM DUAL;
输出: 2
(2) IFNULL(v1,v2) 如果v1不为null返回v1,否则返回v2
例如: SELECT IFNULL(NULL,'1') FROM DUAL;
输出: 1
(3) CASE WHEN v then v1 end判断如果v为真返回v1
例如: SELECT CASE WHEN 1=1 THEN 'true' ELSE 'false' END FROM DUAL;
输出: true
视图
语法:CREATE VIEW 视图名称
AS
Select 语句
举例:建立用于查阅记录人姓名,借阅书籍名称,节约时间的视图
Select name 借读人姓名 ,bname as 借读书籍名称 ,rdate as 借读时间
From books a ,card b,info c where a.bno=b.cno=c.cno;
CREATE VIEW view_info
As
Select name 借读人姓名 ,bname as 借读书籍名称 ,rdate as 借读时间
From books a ,card b,info c where a.bno=b.cno=c.cno;
修改视图
语法:
Alter vlew 视图语句
As
select 语句
举例:建立用于查询借阅记录人姓名,借阅书籍名称的视图
Alter vlew view_info
As
Select name 借读人姓名 ,bname as 借读书籍名称
From books a ,card b,info c where a.bno=b.cno=c.cno;
创建存储过程
CREATE PROCEDURE 存储过程名字(参数列表)
BEGIN
存储操作的过程语句
END
调用:call 存储过程名字
列1: 建立一个无参无返回值得存储过程, 用于查询所有的阅读记录。
存储过程实现能够查询所有的借阅记录
Select * from info;
#修改sql语句结束的标识符
Delimiter //
CREATE PROCEDURE pro_info()
BEGIN
Select * from info;
END//
_ _调用存储过程
Call pro_info;
列:有参无返
Select * from books where price between 20 and 200; 10 1000
Delimiter //
CREATE PROCEDURE pro_info(in price1 float,in price2 float)
BEGIN
Select * from books where price between price1 and price2;
END//
_ _调用存储过程
Call pro_info1(10,200);
列:无参有返回
Select avg(price) as 平均价格 from books;
DELIMTER //
CREATE PROCEDURE pro_info2(out priceAvg float)
BEGIN
Select avg(prince) INTO priceAvg from books;
END//
Call pro_info2(@priceAvg);
_ _ 查看所有得存储过程
Show PROCEDURE status;
_ _ 删除存储过程
Drop PROCEDURE pro_info;
Drop PROCEDURE if exists pro_info1;
触发器
当一件事件发生的时候,会引发其他相关的事件发生
只要当一个预定的事件发生的时候,就会被MYSQL自动调用
CRATE tringger 触发器名称 {before\after} {insert\update\delete} on
表名
For each row
Begin
触发器执行的语句块
End
列如:创建insert触发器。当在card表中新增加一个借阅用户的时候,显示“新增用户成功”。
DELIMITER//
Create tringger tri_ins_card after insert on card
For each row
Begin
Select”新增用户成功” into @result;
end