首页 > 数据库 >数据库之理解SQL

数据库之理解SQL

时间:2024-06-14 19:55:55浏览次数:26  
标签:语句 删除 数据库 drop 理解 SQL table 数据

初识SQL
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理
关系数据库管理系统(Relational Database Management System:RDBMS)的语言,和我们所熟悉的Java、php、python等程序语言一样,也是一种编程语言。

所谓的关系型数据库,就是像MySQL、SQL Server、Oracle、db2等等这样的数据库。当然也有非关系型数据库(NoSQL,Not Only SQL),也已经开始支持SQL语言来对存储其中的数据进行操作了。比如Hive,就可以支持使用SQL语言来查询存储在Hadoop中的数据,可见SQL语言不但学习难度低,而且引用范围也是越来越广,是每个程序员所必备的一种语言。

回归正题
常用的SQL语言种类:DCL、DDL、DML、TCL
DCL(Data Control Language):数据库管理语句,用于管理数据库访问的。比如授权语句、用户建立语句等

DDL:数据定义类语句的简称,主要用于建立数据库对象的,比如建立表的语句,修改表结构的语句等等
DML:数据操作语句的一种简称,也是我们平时使用最多的一种语言,从其名字中大家就可以知道DML主要用于操作存储在数据库中的数据,也就是之前所说的执行这个增删改查,这些任务的语句全都属于DML类语句
TCL:这是一种事务控制类语句的简称,主要的作用是实现对事物的控制,比如开启事务、提交事务、回滚事务等等,这些都是属于TCL类语句。

DCL(Data Control Language)
如果我们要访问数据库呢,就必须要有相应的数据账号,大家可能已经注意到了,我们之前呢,在演示中使用的都是root账号,也就是MySQL的特权账号,这在生产环境中是非常不安全的,所以我们在项目开始,实际使用到数据库前呢,所要做的第一件事,就是建立程序所使用的数据库访问账号,并对这个账号赋予相应的权限。
前面我们说过,这类操作呢是通过DCL语言来实现的,常用的DCL主要有三个

建立数据库账号:create user
我们需要使用这个语句来建立我们需要使用的数据库账号,并且指定这个账号的密码。
接下来建立好账号后,我们还要对这个账号进行授权

对用户授权:grant
至于可以为数据库账号授予那些权限,我们下面再来讨论
最后,如果我们发现有的账号具有并不是很需要的权限,超过了它使用范围的权限,就可以使用
show privileges
查看可授权的对象

flush privileges
刷新权限,执行授权动作的语句,使其生效。
授权注意事项
使用GRANT授权的数据库账号必需存在
用户使用grant命令授权必须具有grant option权限
只能授予别的用户自己有的权限
获取命令帮助 help grant

收回用户权限:revoke
把那些不需要的权限收回

DDL(Data Definition language),这是经常用到的语句
DDL就是数据库定义语言的简称,用于定义数据的各种对象,比如数据库的表、库、视图等等。常用的数据库语言有以下几种:

DDL 分类
建立/修改/删除数据库:create/alter/drop database
在建立数据库对象前,要先建立书库,其他的对象像表、视图等都在某一个数据库中的。可以使用create database语句来创建一个数据库。如果要对一个数据库进行修改的话,可以使用alter database ,但是要注意修改的只是数据库对象的本身,并不会对数据库中存在的其它对象造成影响。而要删除数据库呢,则要使用drop database语句,要特别注意的是执行时候,要特别小心,因为drop database除了会删除数据库之外呢,还会删除存储在数据库内的所有的对象和数据,并且删除后除了使用之前的备份恢复外,别无它法。所以只有在你已经十分的确认数据库中的数据不再需要,并且也已经进行过完整的备份之后,才可以执行drop database语句来删除数据库。

那么建立好数据库之后呢,我们就可以在数据库中建立我们所需要的表了。

建立/修改/删除表:create/alter/drop table
我们可以使用create table 语句来创建表,同样我们如果对一个表进行修改呢,可以使用alter table语句,是对表的结构来进行修改,当然在一些时候呀也会影响到表中的数据,特别是在对枚举类型的枚举值在进行修改的时候,就有可能会影响到原来表中已经存在的数据,这一点大家要特别的注意。如果我们要删除一个表的话就可以使用drop table 命令,同样呢,drop table命令会同时删除表中的所有数据,并且呢也只能通过之前的备份来进行恢复,所以在执行drop table前也需要非常的谨慎。

建立好表之后,为了提高数据的查询性能,还需要根据所使用的SQL在表上呢建立一些索引,创建索引使用的命令是

建立/删除索引:create/drop index
索引呢并不是越多越好,过多的索引不但不能提升数据的查询性能,反而影响数据的查询效率,所以呢,我们不但要建立索引,也同样需要删除一些不必要的索引,对于没用的索引可以使用drop index命令来进行删除,删除索引并不会对表中已存在的数据造成影响

除了建立和删除表之外呢,还可以清空表

清空表:truncate table
为什么清空表不叫数据管理命令,而叫数据定义命令呢?实际上truncate table做的操作呢,实际上就相当于drop table create table,也就是先删除表再创建表,所以truncate table命令实际上就是DDL命令,其所实现的功能呢就是删除表中的所有数据并保留这个表的结构,但是并不会记录数据的删除日志,所以也无法通过日志对已删除的数据进行恢复。

另一个常见的DDL操作呢,就是对表重命名

重命名表:rename table
可以对表进行重命名,还可以利用其在同一个数据库的不同实例之间移动表,rename table命令并不会影响表中的数据

视图呢,也是我们很常用的一个数据库对象,我们可以利用视图来简化查询,在MySQL中要创建视图,我们可以使用

建立/修改/删除视图:create/alter/drop view

DML(Data Manipulation language),重要,也最复杂
DML就是数据操作语句的英文简称。所谓的数据操作语句的作用,从名称中我们就可以知道一二了, DML语句作用就是用于操作存储在数据库中的数据。比如我们希望向表中添加、修改、删除数据,这样的SQL语句就都是DML语句:

新增表中的数据:insert into
删除表中的数据:delete
修改表中的数据:update
查询表中的数据:select
任务一:向表中写入数据
INSERT
[INTO] tbl_name [(col_name [, col_name] ...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[ON DUPLICATE KEY UPDATE
col_name=expr
[,col_name=expr] ... ]
❕往具有主键和唯一索引的表中插入数据时,如果出现主键或唯一索引冲突,插入的操作可能就会被回滚,为了避免这种情况发生,可以在insert语句中指定当出现唯一索引冲突时候的操作行为,比如我们可以设置当出现唯一索引冲突时则更新表中的某几列的值为新的插入数据的值

四、TCL(Transaction Control Language)事务定义语言
COMMIT:提交事务
ROLLBACK:恢复事务相关数据至上一次COMMIT操作之后

标签:语句,删除,数据库,drop,理解,SQL,table,数据
From: https://www.cnblogs.com/velloLei/p/18248546

相关文章

  • 在 Microsoft SQL Server 2012 中,修改密码的方法与 SQL Server 2000 相比有所变化,但基
    在MicrosoftSQLServer2012中,修改密码的方法与SQLServer2000相比有所变化,但基本思路是相似的。以下是几种常见的方法:使用SQLServerManagementStudio(SSMS):这仍然是最常见和推荐的方法。通过打开SQLServerManagementStudio,连接到相应的SQLServer实例,然后......
  • 封装 SqlHelper 数据访问类
     usingSystem;usingSystem.Collections.Generic;usingSystem.Data.SqlClient;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Data;usingSystem.Configuration;namespaceDAL.SqlHelper{publicclassSqlHelper{......
  • 深入理解 Spring 事务的钩子函数
    目录引言Spring事务概述2.1事务的基本概念2.2Spring事务管理简介事务钩子函数简介3.1什么是事务钩子函数3.2事务钩子函数的作用Spring事务钩子函数的实现4.1PlatformTransactionManager接口4.2TransactionSynchronization接口4.3TransactionSynchronizati......
  • MySQL入门学习-聚合和分组.子查询.相关子查询
        在MySQL中,子查询是指在一个查询语句中嵌套另一个查询语句。子查询可以分为相关子查询和非相关子查询两种类型。    相关子查询是指子查询的执行结果依赖于外部查询中的值。在执行相关子查询时,MySQL会先执行外部查询,然后根据外部查询的结果来执行子查询......
  • 18.9k star!一个高性能的嵌入式分析型数据库,主要用于数据分析和数据处理任务。
    大家好,今天给大家分享的是一个开源的面向列的关系数据库管理系统(RDBMS)。DuckDB是一个嵌入式的分析型数据库,它提供了高性能的数据分析和数据处理能力。DuckDB的设计目标是为数据科学家、分析师和数据工程师提供一个快速、灵活且易于使用的数据分析工具。它支持SQL查询语言,并提......
  • MySQL 游标遍历每一行数据做处理。
     delimiter$$--分隔标记CREATEPROCEDUREprocess_test()begin--声明变量declareSuoshuQY_pvarchar(255);declaredoneint;declarecurcursorforSELECTSuoshuQYasSuoshuQY_pFROMdiy_cabinet_listWHEREIsDeleted=0;declareco......
  • 强大的网页数据库管理工具Adminer
    老苏折腾过的项目,数据库主要是MySQL,其次是MongoDB、PostgreSQL和SQLite,最近还用到了Elasticsearch,但是数据库管理软件phpMyAdmin只能管理MySQL,老苏一直在找一个全能的数据库管理器,似乎Adminer可以满足要求。什么是Adminer?Adminer(原phpMinAdmin)是一个用PHP编......
  • 数据库4
    第四章1.select*fromsc2.selectsname,sagefromstudentwheresdept='计算机系'3.selectsno,cno,gradefromscwheregradebetween70and804.selectsname,sagefromstudent wheresdept='计算机系'andsagebetween18and205.selectma......
  • 数据库6
    第六章:6.候选码:(学号,课程号)第一范式。因为有:学号→姓名,因此存在部分函数依赖(学号,课程号)p>姓名第三范式关系模式:学生(学号,姓名,所在系,性别)课程(课程号,课程名,学分)考试(学号,课程号,成绩),学号为引用学生的外码,课程号为引用课程的外码。7.候选码:学号属于第二范式。但有:......
  • 数据库5
    第五章:3.(1)Createviewt1(sno,sname,sdept,cno,cname,credit) As   Selects.sno,s.sname,s.dept,c.cno,c.cname,c.credit   Fromstudentsjoincoursecons.sno=c.sno(2)Createview t2(sno,sname,cname,grade)As   Selects.sno,s.sname,c.cname,c.grad......