数据库系统之sql语言

本文深入探讨了数据库查询语言SQL的使用,包括DDL、DML、DCL和DQL,以及MySQL的安装与数据库操作。详细介绍了主键、外键、唯一约束和非空约束等数据完整性概念。此外,还阐述了索引的创建、删除以及联合索引的最左前缀原则。最后,提到了视图、存储过程、游标、触发器和事务处理在数据库管理中的重要性。
摘要由CSDN通过智能技术生成

查询语言(query language)是用户用来从数据库中请求获取信息的语言。这些语言通常比标准的程序设计语言层次更高。查询语言可以分为过程化的和非过程化的。在过程化语言(procedural language)中,用户指导系统对数据库执行一系列操作以计算出所需结果。在非过程化语言(nonprocedural language)中,用户只需描述所需信息,而不用给出获取该信息的具体过程。实际使用的查询语言既包含过程化方式的成分,又包含非过程化方式的成分。
有一些“纯"查询语言:关系代数是过程化的,而元组关系演算和域关系演算是非过程化的。这些语言简洁且形式化,默认商用语言的“句法修饰",但它们说明了从数据库中提取数据的基本技术。关系代数包括一个运算的集合,这些运算以一个或两个关系为输入,产生一个新的关系作为结果。关系演算使用谓词逻辑来定义所需的结果,但不需给出获取结果的特定代数过程。
SQL语言是一种“查询语言",但是除了数据库查询还具有很多别的功能,它可以定义数据结构,修改数据库中的数据以及说明安全性约束条件等。最早的版本是由IBM开发的,最初被叫做Sequel。Sequel 语言发展至今,其名称已变为SQL(结构化查询语言)。现在有许多产品支持SQL语言,SQL已经很明显地确立了自己作为标准的关系数据库语言的地位。SQL语言有以下几个部分:
●数据定义语言(Data-Definition Language, DDL): SQL DDL提供定义关系模式,删除关系以及修改关系模式的命令。
●数据操纵语言(Data-Manipulation Language, DML): SQL DML提供从数据库中查询信息,以及在数据库中插入元组、删除元组、修改元组的能力。
●完整性(itegrity): SQL DDL包括定义完整性约束的命令,保存在数据库中的数据必须满足所定义的完整性约束。破坏完整性约束的更新是不允许的。
●视图定义(view definition): SQL DDL包括定义视图的命令。
●事务控制(transaction control): SQL 包括定义事务的开始和结束的命令。
●嵌入式SQL和动态SQL(embedded SQL and dynamic SQL):嵌入式和动态SQL定义SQL语句如何嵌入到通用编程语言,如C、C++和Java中。
●授权(authorization): SQL DDL包括定义对关系和视图的访问权限的命令。

一、组成

DDL (数据定义语言)。数据定义语言 - Data Definition Language,用来定义数据库的对象,如数据表、视图、索引等。create drop alter truncate
DML (数据操纵语言)。数据处理语言 - Data Manipulation Language,在数据库表中更新,增加和删除记录,如 update, insert, delete,不包含查询
DCL (数据控制语言),数据控制语言 – Data Control Language,指用于设置用户权限和控制事务语句,如grant,revoke,if…else,while,begin transaction

DQL (数据查询语言)(★★★★★),数据查询语言 – Data Query Language,数据表记录的查询。select

二、MySQL安装

1.更新系统
apt-get update  (在root用户下)
2、安装mysql-server

apt-get install mysql-server
apt-get install mysql-client
apt-get install libmysqlclient-dev

3、使用如下命令查询是否安装成功:
sudo netstat -tap | grep mysql

4.开启及关闭
 #启动
sudo service mysql start
#停止
sudo service mysql stop
#服务状态
sudo service mysql status

三、登陆

当 MySQL 服务已经运行时, 通过MySQL自带的客户端工具登录到MySQL数据库中, 首先打开命令提示符, 输入以下格式的命名:

mysql -h 主机名 -u 用户名 -p

-h : 该命令用于指定客户端所要登录的MySQL主机名, 登录当前机器该参数可以省略;

-u : 所要登录的用户名;

-p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。

以登录刚刚安装在本机的MySQL数据库为例, 在命令行下输入 mysql -u root -p 按回车确认, 如果安装正确且MySQL正在运行, 会得到以下响应:

Enter password:

若密码存在, 输入密码登录, 不存在则直接按回车登录, 默认 root 账号无密码。登录成功后会看到 Welecome to the MySQL monitor... 的提示语。然后命令提示符会一直以 mysql> 加一个闪烁的光标等待命令的输入, 输入 exit 或 quit 退出登录。

#打开MySQL服务
sudo service mysql start
#使用root用户登录,-p后输入密码
mysql -u root -P

四、数据库操作

创建数据库语句格式为 CREATE DATABASE <数据库名字>;(注意不要漏掉分号 ;)
前面的 CREATE DATABASE 也可以使用小写
具体命令为:CREATE DATABASE hhhh;
创建成功后输入命令 show databases; 查看已经创建了哪些数据库
为了获得一个数据库内的表的列表,使用SHOW TABLES ;
其他show语句:

SHOW STATUS;用于显示广泛的服务器状态信息:
SHOW CREATE DATABASE和SHOW CREATE TABLE,分别用来显示创建特定数据库或表的MySQL语句;
SHOW GRANTS;用来显示授予用户(所有用户或特定用户)的安全权限;
SHOW ERRORS和SHOW WARNINGS;用来显示服务器错误或警告消息。
进一步了解SHOW在mysql命令行实用程序中,执行命令HELP SHOW; 显示允许的SHOW语句。

创建一个名为 hhhh的数据库, 在命令行下执行以下命令:
create database hhhh character set gbk;
为了便于在命令提示符下显示中文, 在创建时通过character set gbk 将数据库字符编码指定为gbk。创建成功时会得到 Query OK, 1 row affected(0.02 sec) 的响应。MySQL语句以分号(;)作为语句的结束, 若在语句结尾不添加分号, 命令提示符会以 -> 提示继续输入(有个别特例);

要对一个数据库进行操作,必须先选择该数据库,否则会提示错误:
ERROR 1046(3D000): No database selected
两种方式对数据库进行使用的选择:
一:在登录数据库时指定,命令: mysql -D所选择的数据库名 -h主机名 -u用户名 -p
例如登录时选择刚刚创建的数据库: mysql -D hhhh -u root -p
二:在登录后使用use语句指定,命令: use 数据库名:
use语句可以不加分号,执行use hhhh 来选择刚刚创建的数据库,选择成功后会提示: Database changed

五、数据表

数据表(table)简称表,它是数据库最重要的组成部分之一。数据库只是一个框架,表才是实质内容。而一个数据库中一般会有多张表,这些各自独立的表通过建立关系被联接起来,才成为可以交叉查阅的数据库。如下便是一张表:

 

1.约束

约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。MYSQL中,常用的几种约束:

主键约束 primary key

主键约束相当于唯一约束 + 非空约束的组合,主键约束列不允许重复,也不允许出现空值。每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。主键值必须唯一。即表中的每个行必须具有唯一的主键值。如果主键使用单个列,则它的值必须唯一。如果使用多个列,则这些例的组合值必须唯一。

-- 基本模式
create table temp( 
id int primary key,
name varchar(20)
);
-- 组合模式
create table temp(
id int ,
name varchar(20),
pwd varchar(20),
primary key(id, name)
);
-- 删除主键约束
alter table temp drop primary key;
-- 添加主键约束
alter table temp add primary key(id,name);
-- 修改主键约束
alter  table temp modify id int primary key;

为创建由多个列组成的主键,应该以逗号分隔的列表给出各列名,如下所示:
CREATE TABLE orderitems
(
order_num  int          NOT NULL ,
order_item int          NOT NULL ,
prod_id    char(10)     NOT NULL ,
quantity   int          NOT NULL ,
iten_price decima1(8,2) NOT NULL ,
PRIMARY KEY (order_num, order_item)
) ENGINE=InnoDB;

和索引的区别:1.主键一定是唯一性索引,唯一性索引并不一定就是主键。2.一个表中可以有多个唯一性索引,但只能有一个主键。3.主键列不允许空值,而唯一性索引列允许空值。4.索引可以提高查询的速度。
主键和索引都是键,不过主键是逻辑键,索引是物理键,意思就是主键不实际存在,而索引实际存在于数据库中

外键

外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系

-- 基本模式
-- 主表
create table temp(
id int primary key,
name varchar(20)
);
-- 副表
create table temp2(
id int,
name varchar(20),
classes_id int,
foreign key(id) references temp(id)
);
-- 多列外键组合,必须用表级别约束语法
-- 主表
create table classes(
id int,
name varchar(20),
number int,
primary key(name,number)
);
-- 副表
create table student(
id int auto_increment primary key,
name varchar(20),
classes_name varchar(20),
classes_number int,
/*表级别联合外键*/
foreign key(classes_name, classes_number) references classes(name, number) 
);
-- 删除外键约束
alter table student drop foreign key student_id;
-- 增加外键约束
alter table student add foreign key(classes_name, classes_number) references classes(name, number);

唯一约束unique

唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。唯一约束不允许出现重复的值,但是可以为多个null。同一个表可以有多个唯一约束,多个列组合的约束。在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同。唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束。primary key与unique key都是唯一性约束。 但二者有很大的区别:
1.作为primary key的1个或多个列必须为NOT NULL(有的数据库需要明确指明,有的会自动设置为NOT NULL)。而unique key约束的列可以为null,这是primary key与unique key最大的区别。
2.一个表只能有一个primary key(单列或多列,多列主键叫联合主键),但可以有多个unique key。

-- 创建表时设置,表示用户名、密码不能重复
    create table temp(
    id int not null ,
    name varchar(20),
    password varchar(10),
    unique(name,password)
);
-- 添加唯一约束
alter table temp add unique (name, password);
-- 修改唯一约束
alter table temp modify name varchar(25) unique;
-- 删除约束
alter table temp drop index name;

非空约束

非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。Null类型特征:所有的类型的值都可以是null,包括int、float 等数据类型

-- 创建table表,ID 为非空约束,name 为非空约束 且默认值为abc
create table temp(
  id int not null,
  name varchar(255) not null default 'abc',
  sex char null
);
-- 增加非空约束
alter table temp modify sex varchar(2) not null;
-- 取消非空约束
alter table temp modify sex varchar(2) null;
-- 取消非空约束,增加默认值
alter table temp modify sex varchar(2) default 'abc' null;

自增

1、AUTO_INCREMENT可以约束任何一个字段,该字段不一定是PRIMARY KEY字段,即自增的字段并不等于主键字段。
2、但是PRIMARY_KEY约束的主键字段,一定是自增字段,即PRIMARY_KEY 要与AUTO_INCREMENT一起作用于同一个字段。
3、当插入第一条记录时,自增字段没有给定一个具体值,可以写成DEFAULT/NULL,那么以后插入字段的时候,该自增字段就是从1开始,每插入一条记录,该自增字段的值增加1。当插入第一条记录时,给自增字段一个具体值,那么以后插入的记录在此自增字段上的值,就在第一条记录该自增字段的值的基础上每次增加1。
4、也可以在插入记录的时候,不指定自增字段,而是指定其余字段进行插入记录的操作。

每个表只允许一个AUTO_INCREMENT列, 而且它必须被索引(如通过使它成为主键)。

2.其他操作

删除表

DROP TABLE customers2;
这条语句删除customers2表(假设它存在)。删除表没有确认也不能撤销,执行这条语句将永久删除该表。

修改表

增加列
在表中增加一列的语句格式为: .
ALTER TABLE 表名字 ADD COLUMN 列名字 数据类型约束;
或:ALTER TABLE 表名字 ADD 列名字 数据类型约束。例:
mysql>ALTER TABLE employee ADD height INT(4) DEFAULT 170;

删除列
删除表中的一列和新增一列的语句格式相似,只是把关键词ADD改为DROP,语句后面不需要有数据类型、约束或位置信息。具体语句格式:
ALTER TABLE 表名字 DROP COLUMN 列名字;或:
ALTER TABLE 表名字 DROP 列名字。例:
mysql> ALTER TABLE employee DROP test1

更改数据库引擎
更改方式1:修改配置文件my.ini
将my-small.ini另存为my.ini,在[mysqld]后面添加default storage engine=InnoDB,重启服务,数据库默认的引擎修改为InnoDB
更改方式2:建表后更改
alter table mytbl2 type = InnoDB;

使用RENAME TABLE语句可以重命名一个表:
RENAME TABLE customers2 To customers:
RENAME TABLE所做的仅是重命名一个表。可以使用下面的语句对多个表重命名:
RENAME TABLE backup_customers To custonmers,
backup_vendors To vendors。
backup_products To products;

六、数据操作

增insert

删delete

改update

查select

七、索引操作

查询的需求多种多样,可以选择建立多个独立的索引或一个联合索引。大多数时候都是联合索引更加合适一些。假设执行这个语句:

select * from user where school_name=‘卡塞尔’ and age > 20 ;

在school和age上分别建立两个独立的索引,那么预期这条查询语句会命中两个索引,但是使用explain命令查看会发现不一定。MySQL在5.0之后的版本里面支持合并索引,也就是同时使用两个索引,但是MySQL的优化器可能会认为, 查询两次B+树的代价高于查询一次索引之后去数据表进行过滤,因此会选择只用一个索引。
使用联合索引的时候,有一个非常重要的因素就是所有的索引列只可以进行最左前缀匹配,例如上面
的school_age联合索引,当仅使用age作为查询条件的时候是不能使用的,也就是说select * from user where age =20是不能命中上面的联合索引的。
在不考虑任何查询的情况下,应该将选择性高的列放在联合索引的前面。实际上更多的是通过查询来反推索引以使某个固定的查询尽可能的命中索引以提高查询速度。因此联合索引的优化更多的是根据某个或者某些语句来优化的,不具备一个通用的法则.
当数据列有序的时候,mysql可以使用索引,建立school age 索引,示例数据如下:

在这份数据中,school字段是完全有序的,索引school可以使用索引。而从全表来看,age字段不是有序的,因此无法直接使用索引。在school进行定值匹配的时候,例如当school=b 的时候,对于这三条数据而言,age是有序的,因此可以使用age索引,这就是最左前缀的原理。
此外,最左前缀索引只能使用一个范围查询,例如select * from user where school>a,select * from user where school= a and age> 12 ,都可以命中索引,但是select * from user where school> a and age > 12中,仅school可以命中索引,这也可以从上面得出结论.因为当school是范围匹配的时,mysql无法确认age字段是否严格有序,比如school的范围匹配命中了b,c的四条数据,那么age就不是有序的.无法使用后续的索引。
在创建多列索引时根据业务需求,where子句中使用最频繁的一列放在最左边。因为MySQL索引查询会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配。所以创建一个联合索引的时候, 如(key1,key2,key3), 相当于创建了(key1) 、(key1,key2)和(key1,key2,key3)三个索引, 这就是最左匹配原则。

1.创建单列索引之普通索引

2.创建单列索引之唯一索引

CREATE TABLE t1
id INT NOT NULL,
name CHAR(30) NOT NULL, 
UNIQUE INDEX Uniqldx(id)
);

对id字段使用了索引,并且索引名字为Uniqldx。索引列中的值必须是唯一的,允许为空值。

3.创建单列索引之主键索引

CREATE TABLE t2
(id INT NOT NULL,
name CHAR(10),
PRIMARY KEY(id)
);

以前声明的主键约束就是一个主键索引。是一种特殊的唯一索引,不允许有空值。

4.创建组合索引

CREATE TABLEt3
(
id INT NOT NULL,
name CHAR(30) NOT NULL,
age INT NOT NULL,
info VARCHAR(255),
INDEX Multildx(id,name,age)
);

组合索引就是在多个字段上创建一个索引,创建一个表,在表中的id,name和age字段上建立组合索引。组合索引就是遵从了最左前缀,利用索引中最左边的列集来匹配行,这样的列集称为最左前缀。如,由id、name和age3个字段构成的索引,索引行中就按id/name/age的顺序存放,索引可以索引下面字段组合(id,name,age)、(id,name)或者(id)。如果要查询的字段不构成索引最左面的前缀,那么就不会使用索引。比如age或(name,age)组合就不会使用索引查询。

5.创建空间索引

CREATE TABLE t5
(
g GEOMETRY NOT NULL,
SPATIAL INDEX spatldx(g)
) ENGINE = MyISAM;

空间索引必须使用MyISAM引擎,并且空间类型的字段必须为非空。

6.创建全文索引

CREATE TABLE t4
(id INT NOT NULL,
name CHAR(30) NOT NULL,
age INT NOT NULL,
info VARCHAR(255),
FULLTEXT INDEX FullTxtldx(info)
)ENGINE=MyISAM;
SHOW CREATE TABLE t4;

全文索引可以用于全文搜索,但只有MyISAM存储引擎支持FULLTEXT索引,并且只为CHAR、VARCHAR和TEXT列服务。索引总是对整个列进行,不支持前缀索引。

7.已有表上创建索引

使用ALTER

ALTER TABLE book ADD INDEX BkNameldx(bookname(30));

格式:ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [索引名](索引字段名)[ASC|DESC]

使用CREATE

格式改变了而已,做的事情跟上面相同.一个例子,为book表增加一个普通索引,字段为authorse
CREATE INDEX BkBookNameldx ON book(bookname);

格式: CREATE [UNIQUE|FULLTEXT|SPATIAL] [INDEX | KEY] 索引名称 ON 表名(创建索引的字段名[length])[ASC|DESC]

8.删除索引

删除book表中的名称为BkBookNameldx的索引。
ALTER TABLE book DROP INDEX BkBookNameldx;

DROP INDEX 索引名 ON 表名;
删除book表中名为BkNameldx的索引
DROP INDEX BkNameldx ON book;
SHOW INDEX FROM book;

9.查看表中已添加的索引

SHOW INDEX FROM book\G;

 八、其他操作

1.视图

视图是从一个或多个表中导出来的表,是种虚拟存在的表。通过它可以看到系统专门提供的数据,这样用户不用看到整个数据库中的数据,而只关心对自己有用的数据。
■数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中;
■使用视图查询数据时,数据库系统会从原来的表中取出对应的数据;
●使用视图的时候可以把它当作一张表。
创建视图的语句格式为:
CREATE VIEN 视图名(例a,列b,列c) AS SELECT 列1,列2,列3 FROM 表名字;
可见创建视图的语句,后半句是一个SELECT查询语句,所以视图也可以建立在多张表上,只需在SELECT语句中使用子查询或连接查询。创建一个视图,包含v_name, v_age, v_phone三个列:

视图用CREATE VIEW语句来创建。
使用SHOW CREATE VIEW viewname; 来查看创建视图的语句。
用DROP删除视图:DROP VIEW viewname ;.
更新视图时,可以先用DROP再用CREATE,也可以直接用CREATE OR REPLACE VIEW。如果要更新的视图不存在,则第2条更新语句会创建一个视图;如果更新的视图存在,则第2条更新语句会替换原有视图。

视图作用:简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道查询细节。
使用表的组成部分而不是整个表。
保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。
更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。

2.存储过程

存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件,虽然它们的作用不仅限于批处理。特点:

通过把处理封装在容易使用的单元中,简化复杂的操作。
如果所有开发人员和应用程序都使用同一存储过程,则所使用的代码都是相同的。防止错误,保证了数据的一致性。
简化对变动的管理。如果数据内容有变化,只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化。这一点的延伸就是安全性。通过存储过程限制对基础数据的访问减少了数据讹误的机会。
提高性能。因为使用存储过程比使用单独的SQL语句要快。
换句话说,使用存储过程有3个主要的好处,即简单、安全、高性能。缺点:
一般来说存储过程的编写比基本SQL语句复杂。

MySQL称存储过程的执行为调用,因此MySQL执行存储过程的语句为CALL。CALL接受存储过程的名字以及需要传递给它的任意参数。输入
CALL productpricing(@pricelow,
@pricehigh,
@priceaverage);
其中,执行名为productpricing的存储过程,它计算并返回产品的最低、最高和平均价格。

3.游标

有时需要在检索出来的行中前进或后退一行或多行,这就是使用游标的原因。游标(cursor)是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。
游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或更改。只能用于存储过程。不像多数DBMS, MySQL游标只能用于存储过程(和函数)。

游标用DECLARE语句创建。DECLARE命名游标,并定义相应的SELECT语句,根据需要带WHERE和其他子句。例如下面的语句定义了名为ordernumbers的游标,使用了可以检索所有订单的SELECT语句。
CREATE PROCEDURE proces sorders ()
BEGIN
DECLARE ordernumbers CURSOR
FOR
SELECT order .num FROM orders ;
END;
DECLARE语句用来定义和命名游标,这里为ordernumbers。

CREATE PROCEDURE processorders(
BEGIN
-- Declare the cursor
DECLARE ordernunbers CURSOR
SELECT order_num FROM orders;
-- open the cursor
OPEN orde munbers;
-- Close the cursor
CLOSE ordernunbers;
END;
这个存储过程声明、打开和关闭一个游标。但对检索出的数据什么也没做。

4.触发器

如果想要某条语句(或某些语句)在事件发生时自动执行,例如每当增加一个顾客到某个数据库表时,都检查其电话号码格式是否正确;每当订购一个产品时,都从库存数量中减去订购的数量;无论何时删除行,都在某个存档表中保留一个副本。
这些例子的共同之处是它们都需要在某个表发生更改时自动处理。这确切地说就是触发器。触发器是MySQL响应增删改任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语旬之间的一组语句)。

5.事务处理

并非所有引擎都支持事务处理。MyISAM和InnoDB是两种最常使用的引擎。前者不支持明确的事务处理管理,而后者支持。事务处理(transaction processing)可以用来维护数据库的完整性,它保证成批的MySQL操作要么都执行,要么都不执行。关系数据库设计把数据存储在多个表中,使数据
更容易操纵、维护和重用。
事务处理是一种机制,用来管理必须成批执行的MySQL操作,以保证数据库不包含不完整的操作结果。利用事务处理,可以保证一组操作不会中途停止,它们或者作为整体执行,或者完全不执行( 除非明确指示)。如果没有错误发生,整组语句提交给(写到)数据库表。如果发生错误,则进行回退(撒销)以恢复数据库到某个已知且安全的状态。
事务(transaction)指一组SQL语句;
回退(rollback)指撤销指定SQL语句的过程:
提交(commit) 指将未存储的SQL语句结果写入数据库表;
保留点(savepoint)指事务处理中设置的临时占位符(place-holder),可以对它发布回退(与回退整个事务处理不同)。
MySQL使用下面的语句来标识事务的开始:START TRANSACTION
MySQL的ROLLBACK命令用来回退(撤销) MySQL语句
在事务处理块中,提交不会隐含地进行。为进行明确的提交,使用COMMIT语句:

START TRANSACTION;
DELETE FROM orderitens WHERE order_num = 20010;
DELETE FROM orders wHERE order_num = 20010;
COMMIT;

为了支持回退部分事务处理,在事务处理块中合适的位置放置占位符。这样如果需要回退,可以回退到某个占位符。这些占位符称为保留点。为了创建占位符可使用SAVEPOINT语句:
SAVEPOINT delete1:
保留点在事务处理完成 (执行一条ROLLBACK或COMMIT)后自动释放。
默认的MySQL行为是自动提交所有更改,任何时候执行一条MySQL语句,该语句实际上都是针对表执行的,而且所做的更改立即生效。为指示MySQL不自动提交更改,使用以下语句:
SET autocommit = 0;
autocommit标志决定是否自动提交更改,不管有没有COMMIT语句。设置autocommit为0 (假)指示MySQL不自动提交更改(直到autocommit被设置为真为止)。

6.数据库维护

导入操作可以把一个文件里的数据保存进一张表。导入语句格式为:
LOAD DATA INFILE '文件路径和文件名' INTO TABLE 表名字;
导出与导入是相反的过程,是把数据库某个表中的数据保存到一个文件之中。导出语句格式为:
SELECT 列1,列2 INTO OUTFILE '文件路径和文件名’ FROM 表名字;
文件路径下不能有同名文件。
在数据库的使用中使用备份功能。备份与导出的区别:导出的文件只是保存数据库中的数据)而备份则是把数据库的结构,包括数据、约束、视图等全部另存为一个文件。
mysqldump是MySQL用于备份数据库的实用程序。它主要产生一个SQL脚本文件,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等。

使用mysqldump备份的语句:
mysqldump -u root 数据库名>备份文件名; #备份整个数据库
mysqldump -u root 数据库名 表名字>备份文件名; #备份整个表 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值