第二章 数据库管理操作

本文详细介绍了MySQL数据库的创建、删除、切换及数据导入导出操作,包括使用SQL语句创建表、插入数据、更新和删除数据。此外,还讲解了存储引擎的概念,如MYISAM、InnoDB的特性与选择。最后,讨论了数据完整性,包括实体完整性、引用完整性和域完整性,并举例说明了主键、唯一约束和外键约束的使用。
摘要由CSDN通过智能技术生成

1.练习

1.1 sql语句创建数据库

create database goodsdb
default character set utf8mb4
default collate utf8mb4_general_ci

1.2  创建表

create table goods(
	goodsId int,#商品编号
	goodsName char(6),#商品名称
	price decimal(5,1),
	produceDate date,#生产日期
	address char(20) #产地
);

1.3 插入数据

insert into goods(goodsId,goodsName,price,produceDate,address) values (1,'冰红茶',3.5,'2018-03-22','郑州');
insert into goods(goodsId,goodsName,price,produceDate,address) values (2,'可口可乐',3.5,'2018-01-23','郑州');
insert into goods(goodsId,goodsName,price,produceDate,address) values (3,'面包',5.0,'2018-07-01','洛阳');
insert into goods(goodsId,goodsName,price,produceDate,address) values (4,'牙刷',4.5,'2018-06-01','洛阳');

2.数据库的操作 

2.1 创建数据库

CREATE DATABASE [IF NOT EXISTS] <数据库名>

[ [DEFAULT]  CHARACTER SET <字符集名> ]

[ [DEFAULT] COLLATE <校对规则名> ]

说明:

①[ ] 中的内容是指可选的;

②<数据库名>:创建数据库的名称;MYSQL的数据存储区将以目录方式表示MySQL数据库,因此数据库的名称必须符合操作系统的文件夹命名规则,不要以数字开头,尽量要有实际意义;(在MySQL中不区分大小写)

③IF NOT EXISTS:在创建数据库之前进行判断,只有该数据库目前不存在时才能执行操作,用于避免数据库已经存在而重复创建的错误;

④[DEFAULT] CHARACTER SET : 指定数据库的字符集,以避免在数据库中存储数据出现乱码的情况,如果不指定字符,那么就使用系统默认字符集;

⑤[DEFAULT] COLLATE: 指定字符集的默认校对规则。

2.2 删除数据库

drop database 数据库名;

2.3 切换数据库

use 数据库名;

 2.4 导入和导出(备份)

三种方式:

①cmd窗口命令,不进入mysql数据库:

#导出

mysqldump  -uroot -p --database 数据库名[表名,...]  > 保存的路径

#还原

 mysql -uroot -p  [数据库名] < 路径

② Navicat 备份

③Navicat 导出sql语句

 

3. MySQL存储引擎简介

存储引擎:

        数据库存储引擎是数据库底层软件组织、数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据;不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能;现在许多不同的数据库管理系统都支持 多种不同的数据引擎;MySQL的核心就是存储引擎。

存储引擎的选择:

功能MYISAMMemoryInnoDBArchive
存储限制256TBRAM64TB None
支持事务NoNoYesNo
支持全文索引YesNoNoNo
支持数索引YesYesYesNo
支持哈希索引No YesNoNo
支持数据缓存NoN/AYesNo
支持外键NoNoYesNo

①如果要提供提交、回滚、崩溃恢复能力的事务安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择;

②如果数据表主要是用来插入和查询记录,则MyISAM引擎能提供较高的处理效率;

③如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果;

④如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但本身并不是事务安全的;Archive非常适合存储归档数据,如记录日志信息。

        一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求。

查看当前MySQL默认引擎:

show variables likes '%engine%';

查看MySQL支持的引擎:

show engines; 

修改默认存储引擎

 如果修改本次会话的默认存储引擎(重启后失效),只对本会话有效,其他会话无效:

set default_storage_engine = innodb;

修改全局会话默认存储引擎(重启后失效),对所有会话有效:

set global default_storage_engine = innodb; 

 4. 数据的操作

4.1 SQL简介

        SQL(Structured Query Language:结构化查询语言)是用于管理关系数据库管理系统(RDBMS);SQL的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。

4.2 SQL语言分类

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

        其语句也称为“数据检索语句”,用于从表中获得数据,确定数据怎样在应用程序给出;保留字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、alter(更爱表结构)

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

⑥指针控制语言(CCL):

        像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。

4.3 SQL常用操作语句

4.3.1 创建表

create table 表名

(

        ...

)

create table goods(
	goodsId int,#商品编号
	goodsName char(6),#商品名称
	price decimal(5,1),
	produceDate date,#生产日期
	address char(20) #产地
);

4.3.2 查询语句

select 列1,列2,...,列n

from 表名

where 条件

group by 列

having 条件

order by 列 asc/desc

limit 位置,记录数

select goodsId,goodsName
from goods 
where price > 3.5

4.3.3 插入语句 

#按字段插入

insert into 表名(列名1,列名2...) values (值1,值2...)

#插入一条

insert into 表名 values(id,name,age,address)

#同时插入多条语句

insert into 表名

(列1,列2,列3,列4)

values

(值1,值2,值3,值4),

(值1,值2,值3,值4),

(值1,值2,值3,值4);

#同时插入多条语句

insert into

表名

(列1,列2,列3,列4)

select 值1,值2,值3,值4 union

select 值1,值2,值3,值4

insert into goods 
value 
(1,'冰红茶',3.5,'2018-03-22','郑州'),
(1,'冰红茶',3.5,'2018-03-22','郑州'),
(1,'冰红茶',3.5,'2018-03-22','郑州'),
(1,'冰红茶',3.5,'2018-03-22','郑州'),
(1,'冰红茶',3.5,'2018-03-22','郑州')

4.3.4 修改语句

update 表名

set    列名1 = '列值1',

        列名2 = '列值2',

        列名3 = '列值3'

where 条件

update goods
set goodsId = 2,
	price = 4.5
where goodsName like '冰%'

4.3.5 删除语句

delete from 表名 where 条件

delete from goods where goodsId = 2;

5. 数据完整性

5.1 数据完整性(Data integrity)

 5.2 数据完整性分类

实体完整性(Entity Integrity):保证数据记录的唯一性,

域完整性(Domain Integrity):非空,默认值,外键约束,

引用完整性(Referential Integrity):外键约束,

用户自定义完整性(User-defined Integrity)

 5.3 实体完整性约束

        要确保实体的唯一性:主键约束,自增约束,unique约束;

5.3.1 主键约束(primary key)

        特点:加了主键约束的列要唯一且非空,主键列会自动生成索引;

        主键约束是行数据的唯一标识,不能为null,不能重复,一个表中应该有主键,只能有一个主键,有主键的表,查询效率高。

主键:数据库主键是指表中一个列,其值能唯一地标识表中的每一行,这样的一列称为表的主键,通过它可强制表的实体完整性;当创建或更改表时可通过定义PRIMARY KEY约束来创建主键,一个表只能有一个PRIMARY KEY约束,而且 PRIMARY KEY 约束中的列不能接受空值,由于 PRIMARY KEY约束确保唯一数据,所以经常用来定义标识列。

create table student(
    stuId int primary key;
)

#添加主键

alter table 表名

add constraint 约束名 primary key(列)

#删除主键

alter table 表名

drop primary key

 主键的主要作用:

①保证实体的完整性;

②加快数据库的操作速度;

③在表中添加新记录时,数据库会自动检查新记录的主键值,不允许该值与其他记录的主键 值重复;

④数据库自动按主键值的顺序显示表中的记录,如果没有定义主键,则按输入记录的顺序显 示表中的记录。

主键的特点:

①唯一性:一个表中只能有一个主键,如果在其他字段上建立主键,则原来的主键就会取 消;(联合主键)

②非空性:主键的值不可重复,也不可为空;

③一张表要有一个无意义的主键, 主键主要是用于其他表的外键关联,以及本记录的修改与 删除。

5.3.2 自增约束(auto_increment) 

特点:系统自动生成,自动加1;要和主键约束一起使用,一个表只能有一个自增列。

create table emp(
    empId int primary key auto_increment,
    empName varchar(20),
    sex char(1),
    hireDate date,
    phone varchar(20)
)

#对于自增列:不提供值的时候,系统自动添加

#自增会在上一条记录的基础上累加

insert into emp

(empName,sex)

VALUES

('李四','女')

#添加自增

alter table 表名

 modify column id int auto_increment

#删除自增

alter table 表名

modify column id int

注:自增值在某些场景下会出现断层

①在mysql存储引擎是innodb的情况下,如果使用select  union语法做批量插入,则会导致两次插入的自增值断层,而使用 insert  values语法不会导致这个问题,将表的存储引擎改为  MyISAM后这个问题可以解决;

②在innodb存储引擎下,在插入唯一约束数据重复,外键无效数据时,此时报错,会导致自增断层,而数据长度过长导致的插入不成功不会导致自增断层;

③在有自增列的表中删除记录之后,再插入数据时,自增不会连续增长。

5.3.3 唯一约束(unique) 

特点:确保数据的唯一性,允许null值;

create table emp
(
    empId int primary key auto_increment,
    empName varchar(20),
    sex char(1),
    hireDate date,
    phone varchar(20) unique # 唯一约束
)

#添加唯一约束

alter table 表名

add constraint 唯一键约束名 UNIQUE(列)

#删除唯一索引约束

alter table 表名

drop index 唯一键约束名

5.4 引用完整性

        引用完整性用于限定多表之间的关联关系。

5.4.1 外键约束(foreign key)

        确保表与表之间的数据的一致性;

        外键约束(foreign key):主要是为了维护两个表之间的数据的一致性关系,是建立在主键的基础之上的,A表中的某列(外键)会引用B表中的主键;数据类型一致;体现表与表之间的关联关系;必须先有主键数据,才可以录入外键数据;外键要和主键数据一致;

        如果一张表的某个列指向另一个表的主键列,这个列就称之为外键列,这个表被称为从表,而其关联的目标表被称为主表。 


#创建班级表
create table classInfo(
    classId int primary key auto_increment,#主键自增
    className varchar(20) not null
)

#创建学生表,加外键约束
create table student
(
    studentId int primary key auto_increment,
    name varchar(20) not null,
    sex char(1) not null,
    bjId int ,
    foreign key (bjId) #针对当前学生表中的bjId加外键约束
    REFERENCES classInfo(classId) #关联另外一个表的哪个列
)

 在具有引用完整性的表之间,禁止用户进行下列操作:

①当主表中没有关联的记录时,将记录添加到从表中;

②更改主表表中的被关联值并导致从表中的记录孤立;

③从主表中删除记录,但仍存在与该记录匹配的相关记录;

④主表被从表关联,此时删除主表结构,会报错,主表无法删除。

5.5 域完整性

        用于限定数据范围

5.5.1 默认值约束:default

        当没有为列提供值得时候,用默认值填充列

5.5.2 非空约束:not null

        确保某一列的值不能为空

5.5.3 外键约束:foreign key

create table emp(
    empId int primary key auto_increment,
    empName varchar(20) not null,#非空约束
    sex char(1) not null, #非空约束
    hireDate date,
    phone varchar(20) unique, # 唯一约束
    province varchar(20) default '河南' #省份
)

5.6 用户自定义完整性

        用户自定义完整性指针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数 据必须满足的语义要求,例如某个属性必须取唯一值,某个非主属性也不能取空值,某个属性的取值范围在0-100之间等。

        用户定义完整性可以涵盖实体完整性、域完整性、参照完整性等完整性类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值