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.一般之间以给需要经常查询的表的字段建立索引,加快查询速度

posted @ 2022-06-29 12:43  nanfengnan  阅读(1061)  评论(0编辑  收藏  举报