SQL基础语法及运用

SQL


仓库 database
星级需求方法
查询所有数据库SHOW DATABASES;
查询某个数据库的创建语句SHOW CREATE DATABASE 数据库名称;
创建数据库CREATE DATABASE 数据库名称;
创建数据库,判断、如果不存在则创建CREATE DATABASE IF NOT EXISTS 数据库名称;
创建数据库、并指定字符集CREATE DATABASE 数据库名称 CHARACTER SET 字符集名称;
修改数据库的字符集ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称;
删除数据库DROP DATABASE 数据库名称;
删除数据库,判断、如果存在则删除DROP DATABASE IF EXISTS 数据库名称;
使用数据库USE 数据库名称;
查询当前使用的数据库SELECT DATABASE();


数据表 TABLE

星级需求方法
查询所有数据表SHOW TABLES;
查询表结构DESC 表名;
查询数据表的字符集SHOW TABLE STATUS FROM 数据库名称 LIKE ‘表名’;
创建数据表CREATE TABLE 表名(
列名 数据类型 约束,列名 数据类型 约束,…);
修改表名ALTER TABLE 旧表名 RENAME TO 新表名;
修改表的字符集ALTER TABLE 表名 CHARACTER SET 字符集名称;
给表添加列ALTER TABLE 表名 ADD 列名 数据类型;
修改表中列的数据类型ALTER TABLE 表名 MODIFY 列名 数据类型;
修改表中列的名称和数据类型ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型;
删除表中的列ALTER TABLE 表名 DROP 列名;
删除表DROP TABLE 表名;
删除表,判断、如果存在则删除DROP TABLE IF EXISTS 表名;

总结

表格 使用

id INT, – 商品编号
NAME VARCHAR(30), – 商品名称
price DOUBLE, – 商品价格
stock INT, – 商品库存
insert_time DATE – 上架时间
);



数据的增删改


星级需求方法
给指定列添加数据INSERT INTO 表名(列名1,列名2,…) VALUES (值1,值2,…);
给全部列添加数据INSERT INTO 表名 VALUES (值1,值2,值3,…);
批量添加所有列数据INSERT INTO 表名 VALUES (值1,值2,值3,…),(值1,值2,值3,…),(值1,值2,值3,…);

星级需求方法
删除表数据DELETE FROM 表名 [WHERE 条件];

星级需求方法
修改表数据UPDATE 表名 SET 列名1 = 值1,列名2 = 值2,… [where 条件];

查(重点)
星级需求方法
查询全部数据SELECT * FROM 表名;
查询指定列SELECT 列名1,列名2,… FROM 表名;
去除重复查询SELECT DISTINCT 列名1,列名2,… FROM 表名;
计算列的值SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名;
起别名SELECT 列名1,列名2,… AS 别名 FROM 表名;
条件查询SELECT 列名列表 FROM 表名 WHERE 条件;
聚合函数SELECT 函数名(列名) FROM 表名 [WHERE 条件];
排序查询SELECT 列名 FROM 表名 [WHERE 条件] ORDER BY 列名1 排序方式1,列名2 排序方式2;
分组查询SELECT 列名 FROM 表名 [WHERE 条件] GROUP BY 分组列名 [HAVING 分组后条件过滤] [ORDER BY 排序列名 排序方式];
分页查询LIMIT 当前页数,每页显示的条数;
说明:
  1. 计算列的值:如果某一列为null,可以进行替换,ifnull(表达式1(表达式1:想替换的列),表达式2(表达式2:想替换的值))
  2. 分页查询:公式:当前页数 = (当前页数-1) * 每页显示的条数
总结:

查询的标准语法:
SELECT 列名 FROM 表名
[WHERE 条件]
[GROUP BY 分组列名]
[HAVING 分组后条件过滤]
[ORDER BY 排序列名 排序方式]
LIMIT 当前页数,每页显示的条数;


  • 条件分类
符号功能
>大于
<小于
>=大于等于
<=小于等于
=等于
<> 或 !=不等于
BETWEEN … AND …在某个范围之内(都包含)
IN(…)多选一
LIKE 占位符模糊查询 _单个任意字符 %多个任意字符
IS NULL是NULL
IS NOT NULL不是NULL
AND 或 &&并且
OR 或 |
NOT 或 !非,不是

聚合函数

  • 将一列数据作为一个整体,进行纵向的计算
  • 聚合函数分类
函数名功能
count(列名)统计数量(一般选用不为null的列)
max(列名)最大值
min(列名)最小值
sum(列名)求和
avg(列名)平均值
GROUP_CONCAT(cid order by cid separator ‘,’)将获取的值放入到新的

排序查询

  • 排序分类
    • 注意:多个排序条件,当前边的条件值一样时,才会判断第二条件
关键词功能
ORDER BY 列名1 排序方式1,列名2 排序方式2对指定列排序,ASC升序(默认的) DESC降序


约束

用来约束表格的

需求方法约束
建表后单独添加主键约束ALTER TABLE [表名] MODIFY [列名] INT PRIMARY KEY;PRIMARY KEY;
建表后单独添加自增约束ALTER TABLE [表名] MODIFY [列名] INT AUTO_INCREMENT;AUTO_INCREMENT;

建表后单独添加唯一约束
ALTER TABLE [表名] MODIFY [列名] UNIQUEUNIQUE
建表后单独添加非空约束ALTER TABLE [表名] MODIFY [列名] [数据类型] NOT NULL;NOT NULL;
说明:
  • 自增约束:
  1. 一般配合键(key)来使用
  2. 加了自增约束后,就算删除了改条数据,在添加其他数据不会覆盖被删除的自增约束

总结:

  • 自增和非空 删除和创建都是通过修改(MODIFY方法)完成的


外键约束

需求方法约束
外键约束CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主表主键列名)CONSTRAINT
删除外键约束ALTER TABLE 表名 DROP FOREIGN KEY 外键名;
建表后单独添加外键约束ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主键列名);

外键级联

需求方法约束
添加外键约束,同时添加级联更新 标准语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主键列名)
ON UPDATE CASCADE;

ON UPDATE CASCADE;
添加外键约束,同时添加级联删除 标准语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主键列名) ON DELETE CASCADE;
添加外键约束,同时添加级联更新和级联删除 标准语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主键列名) ON UPDATE CASCADE ON DELETE CASCADE;


sql常见语句

now获取当前时间
concat字符串拼接


存储过程

创建存储过程

-- ----------------------------------------------创建存储过程--------------------------------------------------------------
-- 修改分隔符为$
DELIMITER $

-- 标准语法
CREATE PROCEDURE 存储过程名称(参数列表)
BEGIN
    SQL 语句列表;
END$

-- 修改分隔符为分号
DELIMITER ;
-- ----------------------------------------------查询数据库中所有的存储过程--------------------------------------------------------------
	SELECT * FROM mysql.proc WHERE db='数据库名称';
	-- ----------------------------------------------删除存储过程--------------------------------------------------------------
	DROP PROCEDURE [IF EXISTS] 存储过程名称;
		-- ----------------------------------------------定义变量--------------------------------------------------------------
	-- 定义变量
	DECLARE 变量名 数据类型 [DEFAULT 默认值];
	-- 变量赋值-方式二
	SELECT 列名 INTO 变量名 FROM 表名 [WHERE 条件];
		-- ----------------------------------------------if语句--------------------------------------------------------------
-- if语句
	IF 判断条件1 THEN 执行的sql语句1;
	[ELSEIF 判断条件2 THEN 执行的sql语句2;]
	...
	[ELSE 执行的sql语句n;]
	END IF;
		-- ----------------------------------------------参数传递--------------------------------------------------------------
-- 参数传递
	CREATE PROCEDURE 存储过程名称([IN|OUT|INOUT] 参数名 数据类型)
	BEGIN
		SQL 语句列表;
	END$
			-- ----------------------------------------------	while循环--------------------------------------------------------------
-- 	while循环

	初始化语句;
	WHILE 条件判断语句 DO
		循环体语句;
		条件控制语句;
	END WHILE;
	-- 调用pro_test6存储过程
call pro_test6();
			-- ----------------------------------------------创建存储函数--------------------------------------------------------------
-- 	创建存储函数
	CREATE FUNCTION 函数名称([参数 数据类型])
	RETURNS 返回值类型
	BEGIN
		执行的sql语句;
		RETURN 结果;
	END$
--  调用函数
	SELECT 函数名称(实际参数);
	
	-- 删除函数
	DROP FUNCTION 函数名称;

定义方法:

-- 修改分隔符为$
DELIMITER $

-- 标准语法
CREATE PROCEDURE 存储过程名称(参数列表)
BEGIN
    SQL 语句列表;
END$

-- 修改分隔符为分号
DELIMITER ;


事务

:保证语句正确执行,一旦出问题,就会失败

说人话:就是将多条语句合并到一条,这样一个地方出错,就会执行失败

开启事务start transaction开启
回滚事务rollback回到代码之前
提交事务commit提交代码

事务提交方式

一旦修改完了提交方式,如果是0手动提交,他不会提交,我们看见的就只是暂存的数据

查看提交方式select @@autocommit
设置提交方式set @@autocommit=‘0/1’0:手动提交,1自动提交

事务的四大特征:

原子性同时成功,或者同时失败
一致性物质守恒定论,需要改变的到改变之后的要保存一致
隔离性出现并发操作时候,多个用户操作的数据相互独立
持久性一旦提交后就永久性保存数据
四种隔离级别
read uncommitted读未提交脏,不可重复,幻读
read committed读已提交不可重复,幻读
repeatable read可重复读幻读
serializable串行化
可能引发的现象
问题现象
脏读是指在一个事务处理过程中读取了另一个未提交的事务中的数据 , 导致两次查询结果不一致
不可重复读是指在一个事务处理过程中读取了另一个事务中修改并已提交的数据, 导致两次查询结果不一致
幻读select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无法插入。或不存在执行delete删除,却发现删除成功o
  1. 查询语句顺序selectfromwheregroup byhavingoprder bylimit
    查询条件判断分组分组条件过滤排序分页
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值