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. 一个结点可以有多于一个的双亲。
二、事务的语句
- 开始事物:BEGIN TRANSACTION
- 提交事物:COMMIT TRANSACTION
- 回滚事务: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、第二类丢失更新:这是不可重复读中的特例,一个事务覆盖另一个事务已提交的更新数据。