mysql梗概

概述

SQL功能: 动词
数据查询 Select
数据定义 create,drop,alter
数据操控 insert,update,delete
数据控制 grant,revoke
image-20211104110955813

一个关系型数据库管理系统的实例中

可以有多个数据库,一个数据库中

可以有多个模式,一个模式下

可以包含多个表、视图、索引;

数据字典:

数据字典是关系数据库管理系统的内部的一组系统表,他记录了所有的定义信息。

关系型数据库咋执行sql语句时就是在更新字典中的相应的信息;

模式

  • 定义模式

    • 创建语句:

       Create schema <模式名> authorization <用户名>
      
  • 说明:要创建爱模式必须有管理员权限,或者管理员授予的create schema权限。

    • 目前,在create schema 中可以接受create table,create view,grant 字句,也就是可以在创建模式的时候将表、视图、授权一起定义了即: Create schema <模式名>authorization <用户名> [<表定义字句>|<视图定义字句>|<授权定义字句>];
  • 实例:

  •  create schema test  authorization zhang  Create table tab1(  col1 smallint,  col2 char(20),  col2 int); #就是在创建模式的时候定义了一个表;
    
  • 删除模式:

    • 语句:

      • Drop schema <模式名>  <cascade\|restrict>
        
    • 说明:

      • 其中cascade和restrict二选一, 前者是级联:表示在删除模式的情况下,把模式中所有的数据库对象(表,视图)全部删除; Restrict 选择限制:表示在该模式下如果定义了数据库对象(表,视图)则不允许删除;

基本表:

  • 定义基本表

  • Create  table <表>(  <列><数据类型>[列级完整性约束条件],  <列><数据类型>[列级完整性约束条件],  …  [<表及完整性约束条件>]);  
    
  • 实例:

    • create table  student(  sno char(12)  PRIMARY key ,  sname char(9)  UNIQUE,  ssex char(2)  );  
      #创建表的时候还可以定义和表相关的完整性约束条件;  如果约束条件涉及多个列,那么就要定义咋表级上  如:
      create table  student(  sno char(12) not  null,  sname char(9)  UNIQUE,  ssex char(2)  primary key  student(sno,sname)  Foreign  key(cno) references class(cno)  );  #其中的class 是另一个表;  
      
  • 修改基本表

    •  Alter table<表名>  [add [column]<新列名><数据类型>[完整性约束]]  [add<表级完整性约束>]  [drop [column]<列名>[cascade|restrict]]  [drop constraint<完整性约束>[restrict|cascade]]  [alter column<列名><数据类型>]  
      
    • 实例:
      
      • #add字句用于增加新列,新的列级完整性约束,和表级完整性约束;     
        #drop字句用于删除列和完整约束     
        #alter column 字句用于修改原有的列定义包括列名和数据类型  
        alter TABLE  yggl1.salary1  add column niaho  int;   
        alter table  yggl1.salary1  drop COLUMN niaho;     
        
  • 删除基本表

    • Drop table<表名>[restrict|cascade];  
      
    • 说明: 默认restrict;

数据的定义

SQL关系数据库支持三级模式:模式、外模式、内模式;

其中基本对象有:模式、表、视图、索引;所以定义,有这四个定义

创建 删除 修改
模式 Create schema Drop schema
Create table Drop table Alter table
索引 Create index Drop index Alter index
视图 Create view Drop view

数据的查询

数据查询是数据库的核心操作:

查询语句:

Select [all|distinct] <目标列表达式>,[<目标列表达式>]…  
    From<表名或者视图名>,[<表名或者视图名>…] | (<select 语句>)[as]<别名> 
        [Where <条件表达式>]  
        [group by<列名1>  [having<条件表达式>]] 
        [order by<列2>[ASC|DESC]]; 
#  含义:  
#根据where语句中的条件表达式  
#从from中的表、视图、派生表(注意可以用字句对表进行查询,把查询的结果集as别名,当做表)找出满足条件数据  
#将数据进行group by 的列值相等进行分组,
#若有having则将符合having条件的组进行输出  
#若有order by 则在输出前还需要根据列2进行排序;  

单表查询

选择若干列 SELECT name,sex,PhoneNumber from employees;
查询经过计算的值 SELECT name,sex+3 as sex加3,PhoneNumber+100 as 不是电话 from employees;

连接查询:

等值与非等值连接查询 Select 语句中使用where连接谓词其条件表达式位连接条件: 如: SELECT * from employees,departments where employees.DepartmentID=departments.DepartmentID; 上面的是等值查询,也可以使用不等值查询,如!= >= <= between等
自身连接 两个表都是自己的自己连接自己
外连接 一般情况下,连接查询显示的只是,符合连接条件的,如果我们想按照某一列显示所有而这列中不满足连接条件的用null显示,则需要使用外连接, select * student.sno,sname,ssex,sage,sdept,cno,grade from student ledt outer join sc on(student.sno=sc.sno);
多表连接 和两表连接类似
嵌套查询(子查询) 在SQL语句中一个 select -from-where 语句称为查询块,将一个查询块,嵌套在另一个查询块的****where****字句或者****having****短语的条件中的查询称为嵌套查询 ** 不相关子查询:也就是嵌套语句中的查询条件和父查询咩有关系; SELECT * from employees where employees.DepartmentID in (SELECT DepartmentID from departments); 注意:子查询返回的结果集,是一个集合,一般使用IN进行判断某个值是不是在这个集合中;(IN****常用**) 相关子查询:也就是嵌套语句中的查询和父查询有关系; Select * from sno,sname,sdept From student Where sdept = ( Select sdept from student Where sname='刘晨' ); 此处和结果集使用的是=这要求sdept必须是可以比较的某个值,而不是一个集合,否则会出问题; 比较子查询返回值:ANY ALL 子查询返回的是一个集合,当只有一个值的时候可以用=等去判断,若是一个集合,则需要用>any(大于子查询结果的某个值) ,>all(大于所有),<any(小于任意一个),<all,>=all,!=any(不等于任意一个),=all(等于所有),等去判断;
派生表查询 子查询存在from中,如: select sno,cno from sc,( select sno,avg from sc group by sno) as avg_sc(avg_sno,avg_grade)

集合查询:select 语句查询的结果是一个集合,所以我们有了集合操作;

并:UNION

交:intersect

差:except

注意:参加集合操作的各个查询结果的列数,必须相同;对应的数据项也要相同

数据的更新

插入数据:

  1. insert插入元组;

    1. Insert into<表>[<属性列>,<属性列>…] value(<常量>,<常量>…);
      
  2. Insert插入子查询结果

    1. Insert  into <表名> [<属性列>,<属性列>…] 子查询;
      

更新语法:

Update <表>
Set <列> =<表达式> ,[<列>=<表达式>]…

[where <条件>]

删除数据

Delete   from <表名>  [where <条件语句>]   #没有where条件就是默认所有都符合条件;  注意条件语句也可以换成子语句;  

索引:

索引是关系数据库管理系统的内部实现技术,属于内模式范畴;

  • 建立索引

  •   Create [unique] [cluster] index<索引名>     on<表名>(<列>[次序],<列>[次序]...)  
    
  • 实例:

    • #表就是要建立索引的表; 索引可以建立在一个列上也可以是多个列上; 
      #次序:表示的是大到小(DESC)还是小到大(ASC,默认)
      #unique表示一个索引值对应唯一的数据记录,
      #cluster 表示建立的索引是一个聚族索引;
      create  UNIQUE index index_name  on  employees(name DESC); 
      
  • 修改索引

  • Alter index <旧缩影名> rename to <新索引名>  
    
  • 只能改名字

  • 删除索引

  •   Drop index <索引名>  
    

空值处理

空值的现实:没有这个东西,比如一个学生没有考试,不能给0分,那就是一个null值;

正是有上述需求,所以有了列not null 和null两个选项;当一个列可以为null的时候,那么空值在不同的操作中的效果如何?

判断空值: is null 或者 is not null 而不能直接使用=
空值的约束条件: 有not null列级约束的列不能取空值; 码属性不能取空值;(码能为一个标识一个元组的属性)
空值的运算 空值和别的值算术运算为空; 比较运算结果为unknown,(true****,****false****,****unknown****是****sql****语句中的三种布尔值)三者在参与and,or,not布尔运算的时候会有些出入

视图:

  • 定义视图:

  •  Create view<视图名>[<列名>,<列名>…]     as <子查询>     [with check option]; 
     #任何对视图的更改都会导致基本表的改变(派生的列无法通过视图改变);  
     #任何对基本表的改变都会自动更新视图 
     #最后一句表示,下次对view操作时带入子查询语句;  
    
  • 删除视图

  • Drop view <视图名>[cascade]  
    
  • 查询视图

    • #和查询表一样的,也就是
      select - from -where - group by  -having-order py  
      
  • 更新视图

  •  注意视图只是一个映射,对基本表的一个映射,所以修改视图,不一定会修改基本表(也就是修改的东西可能保存不了)加了 with check option的才会修改基本表;  
    

触发器:

在mysql中当我对一个表中的一部分数据进行改动时可以,出发某个事件。
比如当我修改一个学生表的学号数据时另个一成绩表中的学号也要做相应的修改;

定义触发器:

delimiter//
create trigger <触发器名字> 时间(after|before) 动作(insert|update|delete) on <表1> 
for each row
befin  
sql语句;
end
delimiter;
#含义当我在表1上执行了那些动作,那么就会执行begin 和 end中的sql语句
#是在对表1操作之前执行还是之后,有时间控制;
#由于sql语句是;结束,但是这个触发器还要执行end所以结束符号要改变 
#delimiter// 修改结束符为://  
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数据库概念 实体:客观存在并且相互区别的事物。比如:职工、学生、部门、一门课,学生的一次选课、部门的一次订货、教师...
    Drama_Du阅读 634评论 0 0
  • 花了3天时间学习MySql,考了个二级MySql 书籍参考:高等教育出版社《全国计算机等级考试二级教程-MySQL...
    如果仲有听日阅读 1,326评论 4 4
  • SQL数据定义语句(表结构的操作) SQL语言的数据定义包括对数据库、基本表、视图、索引等数据库对象的创建和删除 ...
    小白自学Java阅读 620评论 0 0
  • 模式 定义模式实际上定义了一个命名空间,在这个空间中 可以进一步 定义该模式包含的数据对象,例如基本表,视图,索引...
    梅先森森森森森森阅读 128评论 0 1
  • 数据定义 模式 定义模式CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;CREAT...
    creepycool阅读 558评论 0 0