可能是漏洞百出的--MySQL(3)

SQL语言(结构化查询语言)

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件扩展名。可以通过DBMS对数据库进行定义数据,操纵数据,查询数据,数据控制等。

结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。

一:数据定义语言( DDL):

其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人 数据库目录中获得数据有关的保留字。它也是动作查询的一部分。

DDL是数据定义语言,用来创建,删除,修改,清空“数据表结构的”
          包含关键字:creat    drop  alter  truncate

增加表字段   alter table tname add fname type;

删除多余表字段  alter table tname drop fname;

删除表结构         drop table tname

修改字段名同时可以修改类型   alter table tnmae change oldName newName type

修改表名语法:                         alter table oldName rename newName

清空表结构:即清空表中的所有记录,无法回收 truncate table tname;

复制表:         create table tname2 as select * from tname1;

查看表结构     desc tname

二: 数据操作语言(DML:Data Manipulation Language):

其语句包括动词 INSERT, UPDATE和 DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。

包含关键字:insert into     delete   update

insert into:插入字段
语法1:所有字段都赋值    insert into tname values(val1,val2,...valn);
语法2:部分字段赋值,      insert into tname (fname1,fname2)values(v1,v2);

复制表结构:语法:create table newName like oldName


删除表数据:
语法1:删除所有记录 delete from tname;
语法2:删除指定记录 delete from where条件

 

修改表数据
  语法1:修改某一列上的所有数据    update tname set fname1=v1,fname2=v2;
  语法2:按照条件修改数据。        update tname set fname1=v1,fname2=v2 where 条件

 

当null作为条件,或者修改数据为null时的操作
案例1:将生日为null的记录的分数改为80分:update student set score =80 where sbirth is null;
案例2:将张三的性别修改为null:                   update student set sgender=null where sname='张三';

三: 数据查询语言( DQL:Data Query Language):

其语句,也称为“数据检索 语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字 SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。

关键字:select  单词:选择的含义

语法:select fname1,fname2,......fnamen from tname;
           select * from tnmae;
                     *:通配符,表示所有字段。

四: 数据控制语言(DCL):

它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对 数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对 表单个列的访问。

DQL语言的学习:数据查询语言

TCL语言的学习:事务控制语言

有时我们可能需要使用DML进行批量数据的删除,修改,增加。比如,在一个员工系统中,我们想删除一个人的信息。除了删除这个人的基本信息外,还应该删除与此人有关的其他信息,如邮箱,地址等等。那么从开始执行到结束就会构成一个事务。对于事务,我们要保证事务的完整性。要么成功。要么撤回。

事务(transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。

一、事务的ACID特性:

原子性(atomicity)    事务要么成功,要么撤回。不可切割性。事务的个元素是不可分的,事务是一个完整操作。

一致性(consistency)事务开始前和结束后,要保证数据的一致性。

隔离性(isolation)     当涉及到多用户操作同一张表时,数据库为会每一个用户开启一个事务。那么当其中一个事务正在进                                       行时,其他事务应该处于等待状态。保证事务之间不会受影响。

持续性(durability)    事务完成之后,它对于系统的影响是永久的,该修改即使出现系统故障也将一直保留,真实的修改了                                       数据库

事务的并发性是指多个事务的并行操作轮流交叉运行,事务的并发可能会访问和存储不正确的数据,破坏交易的隔离性和数据库的一致性。

网状数据模型的数据结构 网状模型 满足下面两个条件的基本层次联系的集合为网状模型。

1. 允许一个以上的结点无双亲;

2. 一个结点可以有多于一个的双亲。 

二、事务的语句

  1.  开始事物:BEGIN TRANSACTION
  2.  提交事物:COMMIT TRANSACTION
  3.  回滚事务:ROLLBACK TRANSACTION

PS:mysql数据库每次执行完DML操作时,会默认commit;

commit

    提交指令,当要向数据库插入一条数据时,必须执行commit语句,否则数据插入不到数据库当中,比如PLsql中,插入一条数据,在当前页面的表格中能够显示出来,但并不是真正将数据插入到了数据库中,而只是有缓存而已,当你在另一个界面打开执行查询语句时并不能查询到插入的数据,所以必须执行commit语句才能真正将数据插入到数据库当中。

   数据库<---commit----DBMS<---insert----客户端
 

三、事务的保存点(事务的验证)
     SAVE TRANSACTION 保存点名称 --自定义保存点的名称和位置
     ROLLBACK TRANSACTION 保存点名称 --回滚到自定义的保存点

四、数据库系统支持两种事务模式: 

  • •自动提交模式:每个SQL语句都是一个独立的事务,当数据库系统执行完一个SQL语句后,会自动提交事务。 
  • •手动提交模式:必须由数据库客户程序显示指定事务开始边界和结束边界。 

            PS:MySQL中数据库表分为3种类型:INNODB、BDB和MyISAM,其中MyISAM不支持数据库事务。MySQL中create table 语句默认为MyISAM类型。

五、事务并发引起的问题: 
对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题,这些并发问题可归纳为以下几类:


1、脏读(dirty read):一个事务读取了另一个事务尚未提交的数据。 
2、幻读(phantom read):一个事务的操作导致另一个事务前后两次读取到不同的数据。 
3、不可重复读(no-repeatable read):一个事务的操作导致另一个事务前后两次读取到不同的数据。 
4、第一类丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖。 
5、第二类丢失更新:这是不可重复读中的特例,一个事务覆盖另一个事务已提交的更新数据。 

猜你喜欢

转载自blog.csdn.net/z1330871196/article/details/85178521
今日推荐