spl

什么是 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;#回滚事务

 

posted @ 2019-10-29 17:14  Ascca  阅读(367)  评论(0编辑  收藏  举报