什么是 SQL?
-
- SQL 指结构化查询语言
- SQL 使我们有能力访问数据库
- SQL 是一种 ANSI 的标准计算机语言
-
sql注释:
第一种:--
第二种:#
Sql分类:
DDL:数据定义语言(库,表) 关键字:CREATE(创建) drop(删除) alter(更新)
创建库 CREATE DATABASE 库名;
删除库 DROP DATABASE test;
CREATE TABLE 表名(
字段 数据类型,
VARCHAR相当于String,CHAR
多个字段之间用,隔开最后一个不要,
)
增加字段
ALTER TABLE 库名 add COLUMN 字段名 int
删除字段
ALTER TABLE 库名 DROP COLUMN 字段名
DML:数据操作语言(记录,相当于new java对象) 关键字: insert update delete
主键:唯一标识
id int PRIMARY key auto_increment, 设置主键自增
添加数据值要与列一一对应
语法:INSERT INTO 表名 (字段列) values(值...);
语法:INSERT INTO 表名 values(值...);
MODIFY修改数据类型
语法:ALTER TABLE 表名 MODIFY 字段名 数据类型
CHANGE修改列名
语法:ALTER TABLE 表名 CHANGE 旧名 新名 数据类型
更改数据update
UPDATE 表名 set 字段=值 条件
删除数据delete
DELETE FROM 表名 WHERE 条件
TRUNCATE新建一张与原表结构一摸一样的表
TRUNCATE 表名
DCL:数据控制语言
DQL:数据查询语言 关键字: select
查询表中所有的字段
SELECT * from 表名
#运算符 > < >= <= != null ISNULL null与任何值相加都为null
SELECT * from 表名 where 条件
SELECT * from emp WHERE common is not NULL
SELECT * from emp WHERE not common is NULL
BETWEEN AND (选取在两数之间的值)
SELECT * from emp
WHERE salay BETWEEN 4500 AND 5000
IN
SELECT * from emp WHERE id in (1,3,5,7)
模糊查询 like一般与通配符一起使用
通配符:_单个字符 %任意个数的字符
SELECT * from emp WHERE e_name LIKE "张_"
SELECT * from emp WHERE e_name LIKE "张%"
SELECT * from emp WHERE e_name LIKE "%三%"
排序 ORDER BY
ASC升序也可省略 DESC降序
SELECT * from emp ORDER BY salay ASC
SELECT * from emp ORDER BY salay DESC
聚合函数 sum avg count max min
统计总提成
SELECT sum(字段名) from emp
求提成的平均值
SELECT avg(字段名) from emp
只能统计不为null的个数
函数中的参数为数字代表统计的是记录
统计记录的数量
SELECT count(1) from emp
SELECT count(*) from emp
求最大值
SELECT max(common) from emp
求最小值
SELECT min(common) from emp
分组GROUP BY一般与聚合函数一块使用
-- 按部门总成本排序
SELECT depart,sum(salay) a,sum(common) b
,sum(salay+IFNULL(common,0)) c
FROM emp GROUP BY depart ORDER BY c
-- 查询部门成本大于12000
where 与 HAVING
-- where放在表名后过滤大的条件
-- having一般与分组合用过滤分组后的条件
SELECT depart,sum(salay) a,sum(common) b
,sum(salay+IFNULL(common,0)) c
FROM emp
GROUP BY depart
HAVING sum(salay+IFNULL(common,0))>=12000
分页limit
-- limit一个参数代表查询的数量
SELECT * FROM emp LIMIT 5
-- limit两个参数:
-- 第一个代表开始搜索的位置,位置从0开始
-- 第二个参数代表查询的数量
SELECT * FROM emp LIMIT 1,4
多表联查
子查询:以一个结果为另一个查询的条件
SELECT*FROM 表名 where 字段名 in(select *from 表名 where 条件)
内连接:隐式内连接
select 字段名 别名 , 别名.字段名 别名 from 表名 别名 ,表名 别名 where 条件 group by 分完组的字段名
显示 内连接 innerjoin on 后加条件 内链接只能查询出匹配上的数据
SELECT * FROM 表名 a INNER JOIN 表名 b ON a.字段名=b.字段名
外连接
笛卡尔积:多表联查没条件,多张表中记录相乘
左连接:以左表为基础表
select * from 表名 left outer(可省略) join 表名 on 条件
右链接:以由表为基础表
select* from 表名 right outer join 表名 on 条件
交叉链接:一般出现笛卡尔积现象
select*from 表名 cross outer join 表名 on 条件
外键。一句话概括:如果一个表A的主键还存在与另一个表B中,那么B中这个字端可以作为A表的外键。
(有一种好记的方法是,存在与外面的主键就是外键)。比如上面成绩表的学号是学生表的外键,成绩表的课程编号是课程表的外键。
作用:主要保证数据的完整性
创建表时创建外键
CREATE TABLE Orders
O_Id int NOT NULL,
OrderNo int NOT NULL,
e_id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (e_id) REFERENCES emp(id)
)
删除外键
语法:ALTER TABLE 表名 DROP FOREIGN KEY 外键名
ALTER TABLE orders DROP FOREIGN KEY o_e_fk
创建表后添加外键
#语法:Alter table 表名 add constraint 外键名字 foreign key (外键字段) references 父表(主键字段);
ALTER TABLE orders ADD CONSTRAINT o_e_fk
FOREIGN KEY (e_id) REFERENCES emp(id)
先删除外键表中的数据再删关联表中的数据
DELETE from orders WHERE o_id=2
DELETE from emp WHERE id=2
事务:
事务:主要用于处理操作量大,复杂度高的数据,一个程序执行的最小单元
事务的特性:(ACID)
原子性:事务的不可分割,组成事务的各个逻辑单元不可分割。
一致性:事务执行的前后,数据完整性保持一致。
隔离性:事务执行不应该受到其他事务的干扰。
持久性:事务一旦结束,数据就持久化到数据库中。
隔离级别:
脏读:一个事务读到了另一个事务未提交的数据,导致查询结果不一致
不可重复读:一个事务读到了另一个事务已经提交的update的数据,导致多次查询结果不一致。
虚读/幻读:一个事务读到了另一个事务已经提交的insert的数据,导致多次查询结果不一致。
传播行为
1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。
2、PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作
3、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘
4、PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。
5、PROPAGATION_REQUIRES_NEW:支持当前事务,创建新事务,无论当前存不存在事务,都创建新事务。
6、PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
7、PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
实例:
#创建事务 TRANSACTION
BEGIN;#开始事务
INSERT INTO stu(name,sex,age,s_no) VALUES('admin','男',22,'s_002');
COMMIT;#提交事务
BEGIN;#开始事务
INSERT INTO stu(name,sex,age,s_no) VALUES('李四','男',22,'s_001');
ROLLBACK;#回滚事务