• MySql数据库的基本语法


    MySQL

    0. SQL语言的分类

    • 数据库查询语言DQL:select、where、order by、group by、having
    • 数据库定义语言DDL:create、alter、drop
    • 数据库操作语言DML:update、delete、insert
    • 事务处理语言TPC:commit、rollback
    • 数据控制语言DCL:grant、revoke

    1.SQL语言

    通常对数据库的增删改查,简称为C(create)R(read)U(update)D(delete)。
    

    2.基本命令

    #创键自定义数据库
    CREATE DATABASE 数据库名;
    CREATE DATABASE 数据库名 CHARACTER SET 编码格式;
    CREATE DATABASE IF NOT EXISTS 数据库名;
    # 查看数据库创键信息
    SHOW CREATE DATABASE 数据库名;
    # 查看当前使用的数据库
    SELECT DATABASE()
    # 使用数据库
    USE 数据库名;
    

    3. 数据查询【DQL】

    3.1 数据库表的基本结构

    关系数据库是以表格(Table)进行数据存储,表格由"行"和"列"组成

    • 经验:执行查询语句返回的结果集是一张虚拟表。

    3.2 SQL语句执行顺序

    from->on->join->where->group by->having->select->distinct->order by->limit

    3.2.1 SQL语句编写顺序
    3.2.2 条件查询

    语法:SELECT 列名 FROM 表名 WHERE 条件;

    1.关系判断(>,<,=,!=,>=,<=,<>【不等于】)
    2.逻辑判断(and,or,not)
    3.区间判断(between ... and)
    4.控制判断(IS NULL、IS NOT NULL)
    5.枚举查询(IN(值1,值2...))
    6.模糊查询(LIKE _:单个任意字符,%:任意长度字符)
    7.分支查询(CASE-WHERE-END)
    8.子查询【重点】

    1.作枚举查询条件 - 放在WHERE中 - 多行单列

    • 注:当子查询结果集为"多行单列"时可以使用ALL或ANY关键字

    2.作为一张表 - 放在FROM后 - 多行多列

    语法:SELECT 列名 FROM (子查询的结果集) AS 表别名 WHERE 条件;

    • 注:将子查询的"多行多列"的结果作为外部查询的一张表,做第二次查询
    • 注:子查询作为临时表,可以为其创建一个临时表名
    3.2.3 时间查询

    语法:SELECT 时间函数([参数列表])

    • 经验:执行事件函数查询,会自动生成一张虚表(一行一列)
    3.2.3 字符串查询

    语法:SELECT 字符串函数([参数列表])

    3.3 聚合函数 - 自动忽略null值,不进行统计

    语法:SELECT 聚合函数(列名) FROM 表名;

    • 经验:对多条数据的单列进行统计,返回统计后的一行结果。

    3.4 分组查询

    语法:SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组依据(列);

    • 注:分组查询中,select显示的列只能是分组依据列,或者聚合函数,不能出现其他列。

    3.5 分组过滤查询

    语法:SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组列 HAVING 过滤规则;

    3.6 限定查询

    语法:SELECT 列名 FROM 表名 LIMIT 起始行,查询行数;

    3.7 合并查询

    ;合并两张表的的结果(去除重复记录)

    SELECT * FROM 表名1 UNION SELECT * FROM 表名2;

    ;合并两张表的结果(不去出重复记录)

    SELECT * FROM 表名1 UNION ALL SELECT * FROM 表名2;

    3.8 表连接查询

    语法:SELECT 列名 FROM 表1 连接方式 表2 ON 连接条件;

    连接方式:

    INNER JOIN:内连接,匹配不到不返回

    LEFT JOIN ON:左外连接,以左表为主表依次向右匹配,匹配到返回结果,匹配不到对应列返回NULL值填充

    RIGHT JOIN ON:右外连接,以右表为主表依次向左匹配,匹配到返回结果,匹配不到对应列返回NULL值填充

    4. DML操作【重点】

    4.1 新增(INSERT)

    增加一行:INSERT INTO 表名(列1,列2...) VALUES(值1,值2...);

    增加多行:INSERT INTO 表名(列1,列2...) VALUES(值1,值2),(值1,值2),...,(值1,值2);

    4.2 修改(UPDATE)

    UPDATE 表名 SET 列1 = 值1,列2 = 值2,... WHERE 条件;

    4.3 删除(DELETE)

    DELETE FROM 表名 WHERE 条件;

    • 注意:删除时,如如不加WHERE条件,删除的是整张表的数据

    4.4 清空整张表 - 清空数据

    TRUNCATE TABLE 表名;

    • 注:RRUNCATE与DELETE不加WHERE删除整表数据不同,TRUNCATE是把原表销毁,再建一个新表

    5. 数据表操作

    5.1 数据表的创键(CREATE)

    CREATE TABLE 表名(
    列名 数据类型 [约束],
    列名 数据类型 [约束]
    )[charset=utf8] 
    

    5.2 数据表的修改(ALTER)

    ALTER TABLE 表名 操作;

    5.2.1 向现有表中添加列

    ALTER TABLE 表名 ADD 列名 数据类型;

    5.2.2 修改表中的列

    ALTER TABLE 表名 MODIFY 列名 数据类型;

    5.2.3 删除表中的列

    ALTER TABLE 表名 DROP 列名;

    5.2.4 修改列名

    ALTER TABLE 表名 CHANGE 列名 新列名 数据类型;

    • 注:修改列名时,在给定列新名称时,要指定列的类型和约束

    5.3 数据表的删除(DROP)

    # 删除学生表
    DROP TABLE subject;
    

    6. 约束

    6.1 实体完整性约束 - 限制行

    表中的一行数据代表一个实体(entity),实体完整性的作用是标识每一行数据不重复、实体唯一。

    6.1.1 主键约束

    PRIMARY KEY唯一,标识表中的一行数据,此列的值不可重复,且不能为NULL。

    6.1.2 唯一约束

    UNIQUE唯一,标识表中的一行数据,不可重复,可以为NULL

    6.1.3 自动增长列

    AUTO_INCREMENT自动增长,给主键数值列添加自动增长。从1开始,每次加1。不能单独使用和主键配合。

    6.2 域完整性约束 - 限制列

    限制列的单元格的数据正确性

    6.2.1 非空约束

    NOT NULL非空,此列必须有值

    6.2.2 默认值约束

    DEFAULT值为列赋予默认值,当新增数据不指定值时,书写DEFAULT,以指定的默认值进行填充。

    6.2.3 引用完整性约束【重点】

    语法:CONSTRAINT 引用名 FOREIGN KEY(列名) REFERENCES 被引用表名(列名)

    详解:FOREIGN KEY引用外部表的某个列的值,新增数据时,约束此列的值必须是引用表中存在的值。

    • 注意:当两张表存在引用关系,要执行删除操作,一定要先删除从表(引用表),在删除主表(被引用表)
    • 注意:创键关联表时,先创建主表,在创建从表
    6.3 常用约束用法
    6.3.1 主键自增长

    PRIMARY KEY AUTO_INCREMENT

    6.3.2 唯一非空约束

    UNIQUE NOT NULL

    7. 事务【重点】

    7.1 事务的概念

    事务是一个原子操作。是一个最小执行单元。可以由一个或多个SQL语句组成,在同一个事务当中,所有的SQL语句都成功执行时,整个事务成功,有一个SQL语句执行失败,整个事务都执行失败。

    7.2 事务的边界

    开始:连接到数据库,执行一条DML(增,删,改)语句。上一个事务结束后,又输入一条DML语句,即事务的开始。

    结束:

    1. 提交:

    a.显示提交:commit;

    b.隐式提交:一条创键、删除的语句,正常退出(客户端退出连接);

    2)回滚:

    a.显示回滚:rollback;

    b.隐式回滚:非正常退出(断电、宕机),执行里创键、删除的语句,但是失败了,会为这个无效的语句执行回滚。

    7.3 事务的原理

    数据库会为每个客户端都维护一个空间独立的缓存区(回滚段),一个事务中所有的增删改语句的执行结果都会缓存在回滚段中,只有当事务中所有SQL语句均正常结束(commit),才会将回滚段中的数据同步到数据库。否则无论因为哪种原因失败,整个事务将回滚(rollback)。

    7.4 事务的特性

    • Atomicity(原子性)

    表示一个事务内的所有操作是一个整体,要么全部成功,要么全部失败

    • Consistency(一致性)

    表示一个事务内有一个操作失败时,所有的更改过的数据都必须回滚到修改前状态。

    • Isolation(隔离性)

    事务查看数据操作是数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。

    • Durability(持久性)

    持久性事务完成之后,它对于系统的影响是永久性的。

    7.5 事务应用

    应用环境:基于增删改语句的操作结果(均返回操作后受影响的行数),可通过程序逻辑手动控制事务提交或回滚。

    #1.开启事务
    START TRANSACTION;
    #2.禁止自动提交
    set AutoCommit=0;
    #3.事务内执行DML语句
    #4.事务内语句都成功了,执行commit
    COMMIT
    #5.事务内如果出现错误,执行ROLLBACK;
    ROLLBACK
    

    8. 权限管理

    8.1 创建用户

    CREATE USER 用户名 IDENTIFIED BY 密码;

    8.2 授权 - GRANT

    GRANT ALL ON 数据库.表 TO 用户名;

    8.3 撤销权限

    REVOKE ALL ON 数据库.表 FROM 用户名;

    • 注:具体权限可以百度,ALL是所有权限

    8.4 删除用户

    DROP USER 用户名;

    9. 视图 - 就是为了方便查询使用的,一般仅用于查询使用

    9.1 视图概念 - 保障数据库系统安全

    视图,虚拟表,从一个表或多个表中查询出来的表,作用和真实表一样,包含一系列带有行和列的数据。视图中,用户可以使用SELECT语句查询数据,也可以使用INSERT,UPDATE,DELETE修改记录,视图可以使用户操作方便,并保障数据库系统安全。

    当用户对数据库中的一张或者多张表的某些字段的组合感兴趣,而又不想每次键入这些查询时,用户就可以定义一个视图,以便解决这个问题。视图中列可以来自于表里的不同列,这些列都是用户所感兴趣的数据列。

    视图与表不同,它在物理上不是真实存在的,而是一个虚表。在数据库里仅存放视图的定义,而不存放视图对应的数据。视图中的这些数据存放在其对应的表中,如果表中的数据发生了变化,从视图中查询出的数据也会随之发生改变。从这个意义来看,视图就像一个窗口,透过它可以看到数据库中用户感兴趣的数据及变化。每一次查看视图或引用视图的的时候,都会运行一次视图上的查询。

    用户可以使用SELECT语句从视图里查询数据,对于符合一定约束条件的视图,还可以使用INSERT、UPDATE、DELETE、MERGE INTO等语句修改视图对应的基础表里的数据。视图在提供操作方便的同时,还可以保障数据库数据的安全。

    9.2 视图特点

    • 优点
      • 简单化,数据所见即所得
      • 安全性,用户只能查询或修改他们所能见得到的数据。
      • 逻辑独立性,可以屏蔽真实表结构变化带来的影响。
    • 缺点
      • 性能相对较差,简单的查询也会变得稍显复杂。
      • 修改不方便,特别是负责的聚合视图基本无法修改。

    9.3 视图的创建

    9.3.1 创键视图

    语法:CREATE VIEW 视图名 AS 查询数据源表语句;

    9.3.2 使用视图

    把视图当作表正常操作即可

    9.3.3 视图的修改

    • 方式一:CREATE OR REPLACE VIEW 视图名 AS 查询语句 ; 如果视图存在则进行修改,反之创键
    • 方式二:ALTER VIEW 视图名 AS 查询语句 ; 直接对已存在的视图进行修改

    9.3.4 视图的删除

    DROP VIEW 视图名

    9.3.5 视图的注意事项

    1.视图不会独立存储数据,原表发生改变,视图也发生改变。没有任何查询优化。

    2.如果试图包含以下结构中的一种,则视图不可更新

    • 聚合函数的结果
    • DISTINCE去重后的结果
    • GROUP BY 分组后的结果
    • HAVING 筛选后的结果
    • UNION、UNION ALL联合后的结果

    9.4 什么时候使用视图

    当需要对某的表的一列或几列单独查询时,为了减少麻烦,可以使用视图把这几列单独取出来

    10. 索引 - 为了优化查询,一般作用于表的字段上

    10.1 索引的作用

    索引的目的在于提高查询效率

    10.2 创建索引

    语法:CREATE INDEX 索引名称 ON 表名(字段名称(长度))

    10.3 索引的优缺点

    1.使用索引会影响更新和插入速度,因为还要修改索引文件

    2.索引要占用内存

    3.一般之间以给需要经常查询的表的字段建立索引,加快查询速度

  • 相关阅读:
    计算机基础
    POJO(PO)与javaBean的比较、以及DTO的说明
    Spring Assert(方法入参检测工具类-断言)
    Extjs tree的相关方法及配置项
    spring aop两种配置方式(1)
    Oracle存储过程中临时表的使用技巧
    文件上传
    java中的IO操作总结
    ExtJs文件上传(Ext.ux.form.FileUploadField)
    Extjs 属性控件[转载]
  • 原文地址:https://www.cnblogs.com/nanfengnan/p/16422904.html
Copyright © 2020-2023  润新知