一、结构化查询语言(SQL)
数据查询语言(DQL:Data Query Language):
该语句用来从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
数据操作语言(DML:Data Manipulation Language):
该语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
事务处理语言(TPL):
该语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
数据控制语言(DCL):
该语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
数据定义语言(DDL):
该语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
指针控制语言(CCL):
它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
二、基础知识
元组:表中的一行
属性:表中的一列–即,第一范式,无重复的行,单列不能有多个值,不可再分割。行不可重复,列不可再分
主键:通过某一个字段唯一区分出不同的记录,不使用任何业务相关的字段作为主键
第二范式:非主键列必须依赖于主键列
外键:把数据与另一张表关联起来。例如在Students表中增加Classes表中的id列class_id
第三范式:非主键列之间必须相互独立,属性不依赖于其它非主属性,消除冗余性。例如学生表中的“班级名称”是班级表中的属性,添加到学生表,是第2次出现,所以叫做“冗余字段”,即,“逆范式”。在本质上,实际上就是牺牲空间,换取时间。
第四范式:最多只能有一个多值属性依赖
索引:关系数据库中对某一列或多个列的值进行预排序的数据结构。
触发器(trigger)是种特殊的存储过程,它的执行不是由程序调用,也不需要手动操作,它是由事件来触发。
DML触发器:该触发器是当数据库服务器中发生数据操作语言事件时执行的存储过程。DML触发器又分为两类:
After触发器:用于记录变更后的处理或检查,一旦发现错误利用回滚;
Instead Of触发器:操作完成之前激活,不执行原来的SQL操作,而是用触发器本身的SQL语句代替原来的语句去执行
DDL触发器:DDL触发器是在响应数据定义语言(Data Definition Language)事件时执行的存储过程。DDL触发器一般用于执行数据库中管理任务。如审核和规范数据库操作、防止数据库表结构被修改等。
存储过程(Stored Procedure)是数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
三、锁
乐观锁:数据库更新时不进行加锁操作,在更新操作之后再去判断是否有冲突。
给数据表加一个版本(version)字段,更新时候加1。其他事务则无法更新,避免并发操作的失误。
悲观锁:操作必然冲突,必须获取锁才能进行操作。包含
共享锁:对于不同事务,对同一个资源共享同一个锁。lock in share mode
排他锁:对于多个事务,同一个资源只有1把锁。for update
行锁:为一行加锁,innodb 的行锁是在有索引的情况下,没有索引的表是锁定全表的表锁
DROP、TRUNCATE、DELETE区别
Drop | truncate | delete |
---|---|---|
表 | 表中所有数据,id从1开始 | 删除表中数据,保留标识 |
无法恢复 | 无法恢复 | 记录在rollback segment |
table | table | view或者table |
删除约束、触发器、索引。存储过程、函数变为invalid | 无法触发触发器、外键约束的表 | 外键约束可用 |
使用命令执行 sql 脚本文件
方法一,在 Windows 下使用 cmd 命令执行(或 Unix 或 Linux 控制台下)
【Mysql的bin目录】\mysql –u用户名 –p密码 –D数据库<【sql脚本文件路径全名】,示例:
C:\MySQL\bin\mysql –uroot –p123 -Dtest<C:\test.sql
注意:
A、如果在 sql 脚本文件中使用了 use 数据库,则 -D数据库 选项可以忽略
B、如果【Mysql的bin目录】中包含空格,则需要使用“”包含,如:“C:\Program Files\MySQL\bin\mysql” –u用户名 –p密码 –D数据库<【sql脚本文件路径全名】
C、如果 sql 没有创建数据库的语句,而且数据库管理中也没有该数据库,那么必须先用命令创建一个空的数据库。
方法二,进入 MySQL 控制台(如:MySQL 5.5 Command Line Client),使用 source 命令执行
Mysql>source 【sql脚本文件的路径全名】 或 Mysql>. 【sql脚本文件的路径全名】,示例:
source C:\test.sql 或者 . C:\test.sql
打开 MySQL Command Line Client,输入数据库密码进行登录,然后使用 source 命令