MySQL数据库——初步安装与数据表结构数据管理
- 一、数据库的基本概念
- 1.数据库基本常识
- 2.数据库系统发展史
- 二、数据库的分类
- 1.关系数据库(SQL)
- 2.非关系数据库(NO SQL)
- 三、mysql的数据类型
- 1.常用的数据库类型
- 2.char与varchar的区别
- 四、mysql的数据库结构
- 1.查看库信息
- 2.查看数据库中包含的表
- 3.查看表的结构(字段)
- 五、SQL语句
- 1.SQL中的名词介绍
- 2.SQL语言规范
- 3.数据库的组件(对象)
- 4.命名规则
- 5.SQL语言分类
- 六、Mysql数据库基本的增删改查命令
- 1.创建及删除数据库和表
- 2.管理表中的数据记录
- 3.修改表名和表结构
- 七、数据表高级操作
- 1.克隆表,将数据表的数据记录生成到新的表中
- 2.清空表,删除表内的所有数据
- 3.创建临时表
- 4.创建外键约束,保证数据的完整性和一致性
一、数据库的基本概念
1.数据库基本常识
-
数据(Data)
描述事物的符号记录
包括数字,文字,图形,图像,声音,档案记录等
以"记录"形式按统一的格式进行存储 -
表
将不同的记录组织在一起
用来存储具体数据 -
数据库
表的集合,是存储数据的仓库
以一定的组织方式存储的相互有关的数据集合
是按照数据结构来组织、存储和管理数据的仓库 -
数据库管理系统(DBMS)
是实现对数据库资源有效组织、管理和存取的系统软件
数据库的建立和维护功能、数据定义功能、数据操纵功能、数据库的运行管理功能、通信功能 -
数据库系统
是一个人机系统由硬件、OS、数据库、DBMS、应用软件和数据库用户组成
用户可以通过DBMS或应用程序操作数据库
2.数据库系统发展史
-
第一代数据库
自20世纪60年代起,第一代数据库系统问世
是层次模型与网状模型的数据库系统
为统一管理和共享数据提供了有力的支撑 -
第二代数据库
20世纪70年代初,第二代数据库——关系数据库开始出现
20世纪80年代初,IBM公司的关系数据库系统DB2问世,开始逐步取代层次与网状模型的数据库,成为行业主流
到目前为止,关系数据库系统仍占领数据库应用的主要地位 -
第三代数据库
自20世纪80年代开始,适应不同领域的新型数据库系统不断涌现
面向对象的数据库系统,实用性强,适应面广
20世纪90年代后期,形成了多种数据库系统共同支撑应用的局面
一些新的元素被添加进主流数据库系统中,例如(Oracle支持的“关系-对象”数据库模型)
二、数据库的分类
随着时代的发展,当今数据库可分为两大类:关系数据库(SQL)和非关系数据库(NO SQL)两大类 。
1.关系数据库(SQL)
关系数据库的存储结构是二维表格 ,表是有行和列。行称为记录,是用来描述一个对象的信息。列称为字段,是用来描述对象的一个属性
关系性数据库常见的有:MYSQL ,Oracle,SQL-Server,MariaDB, postgreSQL
2.非关系数据库(NO SQL)
非关系型的数据库有以下常见的几个种类:
缓存性数据库: redis Memcache
索引型数据库: ES(Elasttic search)
文档型数据库:MongoDB
非关系型数据库:是键对值的存储结构(key ——————> VALUE)
优点:可高并发读写,对海量数据依旧保持着高效率的存储和访问,具有高扩展性和高可用性
三、mysql的数据类型
1.常用的数据库类型
类型名称 | 含义 |
---|---|
int | 4个字节(32个比特位),整数型,范围(-2147483648~2147483647) |
float | 单精度浮点,8位精度,4字节32位。m数字总个数,d小数位 |
double | 双精度浮点,16位精度,8字节64位 。m总个数,d小数位 |
char | 固定长度的字符类型 |
varchar | 可变长度的字符类型 |
text | 文本 |
image | 图片 |
decimal(5,2) | 5个有效长度数字,小数点后面有2位 |
2.char与varchar的区别
值 | CHAR(4) | 存储需求 | VARCHAR(4) | 存储需求 |
---|---|---|---|---|
‘’ | ’ ’ | 4个字节 | ‘’ | 1个字节 |
‘ab’ | 'ab ’ | 4个字节 | 'ab ’ | 3个字节 |
‘abcd’ | ‘abcd’ | 4个字节 | ‘abcd’ | 5个字节 |
‘abcdefgh’ | ‘abcd’ | 4个字节 | ‘abcd’ | 5个字节 |
CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
字节大小:
char无论是否有值,都会占用固定长度的字节大小,保存在磁盘上都是4字节。
varchar在保存字符时,默认会加一个隐藏的结束符,因此结束符会多算一个字节。
优劣比较:
varchar比char节省磁盘空间。
但varchar类型的数据读写速度比char慢,因为char是连续的磁盘空间,e而varchar在多次增删改查中会产生一些磁盘空间碎片
四、mysql的数据库结构
大小写不区分,分号“;”表示结束
1.查看库信息
SHOW DATABASES;
2.查看数据库中包含的表
USE 数据库名;
SHOW TABLES;
3.查看表的结构(字段)
USE 数据库名;
DESCRIBE [数据库名.]表名;
可缩写成:DESC 表名;
五、SQL语句
SQL,即结构化查询语言(Structured Query Language) 。
SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。
1.SQL中的名词介绍
数据库:database
表:table,行:row 列:column
索引:index
视图:view
存储过程:procedure
存储函数:function
触发器:trigger
事件调度器:event scheduler,任务计划
用户:user
权限:privilege
2.SQL语言规范
在数据库系统中,SQL 语句不区分大小写,建议用大写。
SQL语句可单行或多行书写,默认以 " ; " 结尾。
关键词不能跨多行或简写。
用空格和TAB 缩进来提高语句的可读性。
子句通常位于独立行,便于编辑,提高可读性。
3.数据库的组件(对象)
数据库、表、索引、视图、用户、存储过程、函数、触发器、事件调度器等。
4.命名规则
必须以字母开头,后续可以包括字母,数字和三个特殊字符(# _ $)
不要使用MySQL的保留字,如table、select、show、databases。
数据库名、表名、用户名区分大小
5.SQL语言分类
SQL语言 | 说明 | 示例 |
---|---|---|
DDL:数据定义语言(Data Definition Language) | 用于创建数据库对象,如库、表、索引等。 | CREATE,DROP,ALTER 等。 |
DML:数据操纵语言(Data Manipulation Language) | 用于对表中的数据进行管理。 | SELECT、UPDATE、INSERT、DELETE 等。 |
DQL:数据查询语言( Data Query Languag ) | 用于从数据表中查找符合条件的数据记录。 | SELECT |
DCL:数据控制语言(Data Control Language) | 用于设置或者更改数据库用户或角色权限 | GRANT,REVOKE |
TCL:事务控制语言(Transaction Control Language) | 用于管理数据库中的事务。 TCL经常被用于快速原型开发、脚本编程、GUI和测试等方面。 | COMMIT,ROLLBACK,SAVEPOINT |
六、Mysql数据库基本的增删改查命令
1.创建及删除数据库和表
1.创建新的数据库
CREATE DATABASE 数据库名;
2.创建新的表
CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);
#主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。
例:CREATE TABLE ztm001 (id int NOT NULL,name char(10) NOT NULL,score decimal(5,2),passwd char(48) DEFAULT '',PRIMARY KEY (id));
3.删除指定的数据表
DROP TABLE [数据库名.]表名; #如不用USE进入库中,则需加上数据库名
4.删除指定的数据库
DROP DATABASE 数据库名;
2.管理表中的数据记录
1.向数据表中插入新的数据记录
INSERT INTO 表名(字段1,字段2[,...]) VALUES(字段1的值,字段2的值,...);
SELECT * FROM 表名; #查询表的数据记录
2.查询数据记录
SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 条件表达式];
select name from ztm001\G; #以列表方式竖向显示
select * from ztm001 limit 2; #只显示头2行
select * from ztm001 limit 2,3; #显示第2行后的前3行
3.修改、更新数据表中的数据记录
UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];
4.在数据表中删除指定的数据记录
DELETE FROM 表名 [WHERE 条件表达式];
3.修改表名和表结构
1.修改表名
ALTER TABLE 旧表名 RENAME 新表名;
2.扩展表结构(增加字段)
ALTER TABLE 表名 ADD 字段名 varchar(50) default '地址不详';
#default '地址不详':表示此字段设置默认值 地址不详;可与 NOT NULL 配合使用
3.修改字段(列)名,添加唯一键
ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [unique key];
4.删除字段
ALTER TABLE 表名 DROP 字段名;
案例扩展:
use ztm777;
create table if not exists info (
id int(4) zerofill primary key auto_increment, #指定主键的第二种方式
name varchar(10) not null default '匿名',
cardid int(18) not null unique key,
hobby varchar(50));
----------------------------------------------------------------------------------------------------------
#if not exists:表示检测要创建的表是否已存在,如果不存在就继续创建
#int(4) zerofill:表示若数值不满4位数,则前面用“0”填充,例0001
#auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
#unique key:表示此字段唯一键约束,此字段数据不可以重复;一张表中只能有一个主键, 但是一张表中可以有多个唯一键
#not null:表示此字段不允许为NULL
七、数据表高级操作
MySQL中6种常见的约束:
主键约束(primary key)
外键约束(foreign key)
非空约束(not null)
唯一性约束(unique [key|index])
默认值约束(default)
自增约束(auto_increment)
1.克隆表,将数据表的数据记录生成到新的表中
方法一:
create table test01 like ztm; #通过 LIKE 方法,复制 KY08 表结构生成 test01 表
insert into test01 select * from ztm;
此方法能保证 新表的表结构、表数据 跟旧表都是一致的
方法二:
CREATE TABLE test02 (SELECT * from ztm);
此方法创建的新表的表数据和旧表是一样的,但可能会出现新表的表结构和旧表的不一致
show create table test02\G #获取数据表的表结构、索引等信息
SELECT * from test02;
2.清空表,删除表内的所有数据
方法一:
delete from test01;
#DELETE清空表后,返回的结果内有删除的记录条目;DELETE工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM 删除所有记录后,再次新添加的记录会从原来最大的记录 ID 后面继续自增写入记录。
方法二:
truncate table test01;
#TRUNCATE 清空表后,没有返回被删除的条目;TRUNCATE 工作时是将表结构按原样重新建立,因此在速度上 TRUNCATE 会比 DELETE 清空表快;使用 TRUNCATE TABLE 清空表内数据后,ID 会从 1 开始重新记录。
3.创建临时表
临时表创建成功之后,使用SHOW TABLES命令是看不到创建的临时表的,临时表会在连接退出后被销毁。 如果在退出连接之前,也可以可执行增删改查等操作,比如使用 DROP TABLE 语句手动直接删除临时表。
CREATE TEMPORARY TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);
insert into test03 values(1,'zhangsan',123456,'running');
select * from test03;
show tables;
quit
select * from test03;
4.创建外键约束,保证数据的完整性和一致性
外键的定义
:如果同一个属性字段X在表一中是主键,而在表二中不是主键,则字段X称为表二的外键。
主键表和外键表的理解
:
(1)以公共关键字作主键的表为主键表(父表、主表)
(2)以公共关键字作外键的表为外键表(从表、外表)
注意:与外键关联的主表的字段必须设置为主键。要求从表不能是临时表,主从表的字段具备相同的数据类型、字符长度和约束。
`创建主表 profession`
create table profession (pid int(4),proname varchar(50));
`创建从表 student`
create table student (id int(4) primary key auto_increment,name varchar(10),age int(3),proid int(4));
`为主表 profession 添加一个主键约束。主键名建议以“PK_”开头。`
alter table profession add constraint PK_pid primary key (pid);
`为从表 student 表添加外键,并将 student 表的 proid 字段和 profession 表的 pid 字段建立外键关联。外键名建议以“FK_”开头。`
alter table student add constraint FK_pro foreign key (proid) references profession (pid);
`删数数据记录时,要先从表再主表,也就是说删除主键表的记录时必须先删除其他与之关联的表中的记录。`
delete from student where proid=1;
delete from profession where pid=1;
`查看和删除外键约束`
show create table student;
desc student;
alter table student drop foreign key FK_pro;
alter table student drop key FK_pro;