这篇文章我尽量写的全一点,希望能够帮助到看这篇文章的小伙伴们~~~~
可以配合java连接mysql数据库一起看
比较常用的类型:
# 数据类型(字符串)
# char 和 varchar 的区别?
CHAR(10) VARCHAR(30) TEXT
# char 一旦定义好大小后,大小不可变
# varchar 可变大小的字符串,根据插入数据的大小,自动调整所占据的资源
# text 大文本,用来存放大的文本信息 如(个人简介、新闻)
# DB中 字符串用 '' 表示。
# 数字类型
INT 整数
BIGINT 大整数
FLOAT 单精度
DOUBLE 双精度
DECIMAL(20,2) 定数(当前可以用来存放一共20位的数字,其中小数位2位)
# 日期类型
DATE yyyy-MM-dd (年-月-日)
TIME HH:mm:ss:SSS (时:分:秒:毫秒)
DATETIME yyyy-MM-dd HH:mm:ss:SSS
TIMESTAMP 时间戳 1970-1-1 到现在的毫秒数
创建数据库:create database wei1273356078
使用创建好的数据库:use wei1273356078
查看创建数据库的详细信息:show create database wei1273356078
查看所有的数据库:show databases
删除数据库:drop database wei1273356078
创建一个表:大整型bigint
、可变字符串varchar
、整型int
、日期date
、主键primary key
、自增长auto_increment
、描述comment
# 创建一个学生表
CREATE TABLE tb_student(
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
stu_no VARCHAR(30) COMMENT '学生编号',
stu_name VARCHAR(30) COMMENT '学生名称',
stu_age INT COMMENT '学生年龄',
stu_sex INT COMMENT '0表示女;1表示男',
stu_birthday DATE COMMENT '学生生日'
) COMMENT '学生表';
增删改查(CDUR)
- 增–C:
insert into
# value 与 values 的区别是 values可以多条数据增加
# value
INSERT INTO tb_student(stu_no,stu_name,stu_age,stu_sex,stu_birthday) VALUE
('001','张三',18,1,'2002-3-14');
# values
INSERT INTO tb_student(stu_no,stu_name,stu_age,stu_sex,stu_birthday) VALUES
('002','李四',21,0,'2012-6-14'),
('003','王五',24,1,'2021-5-11');
- 删–D:
delete
# 删除tb_student表中的数据
DELETE FROM tb_student;
# 根据条件删除
# delete 只是删除符合条件的数据,不影响主键的数据
DELETE FROM tb_student WHERE stu_age < 22;
- 改–U:
update
# 数据修改(全部修改)
UPDATE tb_student SET stu_age = 10;
# 根据给定的条件执行更新(使用where条件【条件一般使用主键】)
UPDATE tu_sudent SET stu_age=12 WHERE id=2;
# set 同时更新多个字段的信息,使用逗号隔开
UPDATE tb_student SET stu_birthday='2020-07-01',stu_name='马六' WHERE id=3;
- 查–R:
retrieve
花样最多的,我也懂皮毛
# * 代表表中所有的字段
SELECT * FROM tb_student;
# 默认就是 all
SELECT id FROM tb_student;
# 从学生表中查看 去重后的ID
SELECT DISTINCT id FROM tb_student;
# 模糊查询 like
SELECT * FROM tb_student WHERE stu_name like '%张';
# _ 表示匹配一个 下行代码表示美的前面必须有一个字
SELECT * FROM tb_student WHERE stu_name LIKE '_四';
where条件:
# and 同时满足
SELECT * FROM tb_student WHERE id=1 AND stu_no='001';
# or 满足任意一个条件都可以
SELECT * FROM tb_student WHERE stu_age > 18 OR id=5;
# <> 和 != 一样 都是不等于
SELECT * FROM tb_student WHERE id <>10;
# null只有 is null 与 is not null
SELECT * FROM tb_student WHERE stu_birthday IS NULL;
SELECT * FROM tb_student WHERE stu_birthday IS NOT NULL;
# 条件 是一个范围
SELECT * FROM tb_student WHERE stu_age>=10 AND stu_age<=20;
SELECT * FROM tb_student WHERE stu_age BETWEEN 10 AND 20;
分页 limit:
# LIMIT 0,3 从下标为0的数据开始查询,查询3条数据
SELECT * FROM tb_student LIMIT 0,3;
SELECT * FROM tb_student LIMIT 2,3;
常用的函数:
# AS 意思是取一个别名
# 常用的聚合函数 sum() avg() max() min() count()
# 计算学生年龄的总和
SELECT SUM(stu_age) AS AGE_SUM FROM tb_student;
# 计算学生年龄的平均值
SELECT AVG(stu_age) AS AGE_AVG FROM tb_student;
# 计算 数据的数量
SELECT COUNT(id) FROM tb_student;
# 取绝对值
SELECT ABS(-14);
# 得到字符串的长度
SELECT LENGTH('adsfklj') AS char_size;
# 字符串连接
SELECT CONCAT('aa','bb','vv','cc');
# 格式化小数点(四舍五入)
SELECT FORMAT(3.1415926,3);
# 当前日期
SELECT CURRENT_DATE();
分组 group by:
# 根据学生表查看学生的平均年龄 先分组再计算聚合函数
SELECT id,AVG(stu_age) FROM tb_student GROUP BY stu_sex;
# as 是起别名的
# 根据不同的性别查看 年龄总和
SELECT stu_sex,SUM(stu_age) AS AGE_SUM FROM tb_student GROUP BY stu_sex;
# 根据不同的性别查看 年龄 总和大于50岁的记录,having 对分组之后等到的数据再进行筛选
SELECT stu_sex,SUM(stu_age) AS AGE_SUM FROM tb_student GROUP BY stu_sex HAVING AGE_SUM>50;
排序:
# 排序 ASC(默认) DESC(倒序)
SELECT * FROM tb_student ORDER BY stu_age ASC;
SELECT * FROM tb_student ORDER BY stu_age DESC;
# 多个排序条件,在满足了第一个排序条件的基础上,再根据第二个条件进行排序
SELECT * FROM tb_student ORDER BY stu_age ASC,stu_no DESC;
自定义函数:
# 将默认的结束符 ; 改为 $$ 当然也可以改为自己喜欢的符号
# 作用是在执行时,不会被 ; 结束掉
DELIMITER $$
CREATE
# 反引号 用来标识这是一个变量而不是关键字
FUNCTION `wei1273356078`.`func`()
# 返回一个整型
RETURNS INT
# 开始
BEGIN
# 声明一个变量
DECLARE age INT;
# 对变量进行赋值
SET age = 18;
# 返回一个变量
RETURN age;
# 结束
END$$
# 最后再将 $$ 改回来
DELIMITER ;
# 可以测试以下自己的函数可不可以用
SELECT func();
想要实现存储过程就需要再创建一个表dt_user
,并且表中有id
(自增长)、name
和pwd
这三列,类型除了id
是int
外,别的都是varchar
。要想看到效果,需要向dt_user
表中添加内容。
存储过程:
# 判断表中是否有 p_login 存储过程
DROP PROCEDURE IF EXISTS `p_login`;
# 将分隔符改为 $$
DELIMITER $$
# 创建一个存储过程
CREATE PROCEDURE `p_login`
(
_name VARCHAR(20),
_pwd VARCHAR(20)
)
BEGIN
# 声明辅助变量
DECLARE _count INT;
# 为辅助变量赋值(mysql中没有print,只有select)
SELECT COUNT(*) INTO _count FROM `dt_user` WHERE `name` = _name AND `pwd` = _pwd;
# 判断成功或失败 并返回结果
IF _count > 0 THEN
SELECT '' AS result;
ELSE
SELECT '用户名或密码错误' AS result;
END IF;
END;
$$
# 将分隔符再改回来
DELIMITER ;
# 调用存储过程测试是否可以执行
CALL p_login('user1', '123');
# 如果输出为空,说明账号密码正确
# 如果输出为'用户名或密码错误',说明账号密码错误
触发器:以下代码执行增加sql语句就会使学生表的id
为1的学生年龄加1
DELIMITER $$
CREATE
# BEFORE/AFTER 触发触发器的动作 的前面/后面
# INSERT/UPDATE/DELETE 触发触发器的动作
# 当向学生表中添加一条数据的时候,相对于的学生数量应该+1
TRIGGER `wei1273356078`.`tri_update_stucount` AFTER INSERT
ON `wei1273356078`.`tb_student`
FOR EACH ROW
BEGIN
UPDATE tb_student SET stu_age = stu_age+1 WHERE id=1;
END$$
DELIMITER ;
# 可以增加一条sql语句来验证
INSERT INTO tb_student(stu_no,stu_name,stu_age,stu_sex,stu_birthday) VALUE
('004','wei',15,0,'2020-3-14');
# 再执行前看下id为1的学生年龄是多少,执行完之后又是多少。。