一、数据库
-
数据库(DateBase)
按照一定格式存储数据的一些文件的组合,顾名思义就是存储数据的仓库,实际上就是一堆文件。这些文件中存储了具有特定格式的数据 。数据库管理数据有诸多优点,如降低存储数据的冗余度,存储的数据可以共享,便于维护数据完整性,能够实现数据的安全性等。数据库的发展经历了萌芽、初级、中级、和高级阶段。
-
数据库管理系统(DateBaseManagement)
简称DBMS,数据库管理系统是专门用来管理数据库中的数据的,可以对数据库当中的数据进行增删改查 常见的数据库管理系统:
MySql、Oracle、MS SQLServer、DB2、sybase
等… -
SQL(Structured Query Language)
结构化查询语言。 SQL 是一种操作数据库的语言,包括创建数据库、删除数据库、查询记录、修改记录、添加字段等。SQL在MySql中可以使用,同时在Oracle中也可以使用,在DB2中也可以使用 。
三者之间的关系:DBMS通过执行SQL语句来操作DB中的数据
二、数据库基本操作
1、查看数据库
在 MySQL 数据库中存在系统数据库和自定义数据库,系统数据库是在安装 MySQL 后系统自带的数据库,自定义数据库是由用户定义创建的数据库。
可使用 show databases
语句来查看有哪些数据库
语法格式:
show databases;
sql语句的结尾都是以
;
结束
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| woniu |
+--------------------+
5 rows in set (0.00 sec)
MySql 5.7系统默认自带4个数据库,
information_schema、mysql、performation_schema、sys
-
information_schema
该数据库中包含了当前系统中所有的数据库、表、列、索引、视图等相关的元数据信息,是MySql自身信息元数据的存储库。该数据库内主要包含了以下一些表:
SCHEMATA
:列举了当前系统中所有的数据库。TABLES
:列举了当前系统中所有数据库中的表名。COLUMNS
:列举了所有表中的字段信息。KEY_COLUMN_USAGE
:列举了表中所有的索引、外键信息。STATISTICS
:包含所有表的索引及其统计信息。
-
mysql
该数据库是MySql系统中的操作和访问权限控制的核心,存放了关于用户账户、权限、等级、密码等的信息。该数据库内主要包含如下几张表:
user
:记录了系统中每个用户的权限信息。db
:记录了系统允许的用户在哪些数据库中拥有什么样的权限。host
:记录允许连接MySQL服务器的主机名。
-
performation_schema
该数据库是MySql中用于对MySql本身的性能监控的仪表盘。该数据库内主要包含如下几张表:
file_instances
:用于监控文件IO操作的性能统计数据。events
:用于监控MySql执行过程中的各种事件,如SQL分析、SQL执行、锁等等。sessions
:用于监控当前MySql系统内所有活跃的会话信息。
-
sys
该数据库是MySQL自带的一个视图工具,在MySQL5.7以上版本中引入,主要用于高效访问和展示MySQL系统的详细信息,是方便用户进行MySQL系统管理的工具。该数据库中主要提供了一些视图:
sys.session
:展示当前MySQL系统中活动的所有会话。sys.processlist
:展示当前MySQL系统中正在运行的所有进程。sys.schema_auto_increment_columns
:展示数据库中所有带自增字段的表的信息,以便查看自增值的情况。
可以使用show create database
查看数据库的定义声明,语法格式:
show create database <数据库名>;
2、选择数据库
在操作数据库之前就必须要确定使用哪一个数据库,使用use
语句选择使用某个数据库
语法格式:
user <数据库名>;
mysql> use student;
Database changed # 出现“Database changed”提示,则表示选择数据库成功
3、创建数据库
使用 create database
语句创建数据库,语法格式如下:
create database [if not exists] <数据库名>
[[default] character set <字符集名>]
[[default] collate <校对规则名>];
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
# "Query OK"表示上面的命令执行成功,"1 row affected"表示操作只影响了数据库中一行的记录,“0.00 sec”则记录了操作执行的时间。
4、删除数据库
删除数据库是将已经存在的数据库从磁盘空间上清除,当需要删除已创建的数据库时,可以使用 drop database
语句。其语法格式为:
drop database [if exists] <数据库名>;
mysql> drop database if exists test;
Query OK, 0 rows affected (0.23 sec)
三、MySql的注释
MySQL 注释分为单行注释和多行注释
1、单行注释
- 单行注释可以使用
#
注释符,#
注释符后直接加注释内容。格式如下:
#注释内容
- 单行注释可以使用
--
注释符,--
注释符后需要加一个空格,注释才能生效。格式如下:
-- 注释内容
2、多行注释
多行注释使用/* */
注释符。/*
用于注释内容的开头,*/
用于注释内容的结尾。多行注释格式如下:
/*
第一行注释内容
第二行注释内容
*/
四、数据表的基本操作
1、查看数据表
- 使用
show tables
语句来查看当前数据库中有哪些数据表
语法格式:
show tables;
mysql> show tables;
+-------------------+
| Tables_in_student |
+-------------------+
| class |
| course |
| grade |
| student |
+-------------------+
4 rows in set (0.00 sec)
- 使用
desc(describe)
和show create table
命令来查看数据表的结构。其语法格式如下:
desc <表名>;
show create table <表名>;
mysql> desc emp;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| EMPNO | int(4) | NO | PRI | NULL | |
| ENAME | varchar(10) | YES | MUL | NULL | |
| JOB | varchar(9) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
- Null:表示该列是否可以存储 NULL 值。
- Key:表示该列是否已编制索引。
PRI
表示该列是表主键的一部分,UNI
表示该列是 unique 索引的一部分,MUL
表示在列中某个给定值允许出现多次。- Default:表示该列是否有默认值,如果有,值是多少。
- Extra:表示可以获取的与给定列有关的附加信息,如
AUTO_INCREMENT
等。
2、创建数据表
使用 create table
语句创建表。其语法格式为:
create table 表名(
字段名1 数据类型 [表定义选项],
字段名2 数据类型 [表定义选项],
字段名3 数据类型 [表定义选项]
);
表名和字段名(列名)都属于标识符,表定义选项用于设置空值说明、完整性约束等
表名:命令建议以t_ 或者tbl_开头,可读性强,见名知意。
-
MySql中的数据类型
MySql 的数据类型有大概可以分为 5 种,分别是整数类型、浮点数类型和定点数类型、日期和时间类型、字符串类型、二进制类型等
常用常用的数据类型:
-
数值型
数据类型 说明 int
(4字节)整型,类似java中的int bigint
(8字节)大整数,类似java中的long float
(4字节)单精度浮点数 double
(8字节)双精度浮点数 -
字符串型
类型 说明 优点 缺点 char
(1~255字节)定长字符串 不管实际的数据长度是多少。分配固定长度的空间去存储数据。不需要动态分配空间,速度快 使用不恰当的时候,可能会导致空间的浪费 varchar
(1~255字节)可变长度的字符串 比较智能,节省空间。会根据实际的数据长度动态分配空间 需要动态分配空间,速度慢 -
日期型
数据类型 说明 date
(3字节)时间格式:YYYY-MM-DD datetime
(8字节)时间格式:YYYY-MM-DD HH:MM:SS MySQL 允许“不严格”语法:任何标点符号都可以用作日期部分之间的间隔符。例如,‘2000-02-11’、‘2000.02.11’、‘2000/02/11’和’2000@02@11’ 是等价的,这些值也可以正确地插入数据库。
-
二进制大对象(Binary Large Object)
数据类型 说明 blob
专门用来存储图片、声音、视频等流媒体数据。
往blob类型的字段上插入数据的时候,例如插入一个图片、视频等,需要使用IO流才行。
-
例如:创建一个学生表,有学号、姓名、年龄、邮箱地址字段
create table t_student(
no int,
name varchar(255),
age int(3),
email varchar(255)
);
3、修改数据表
可以使用 alter table
语句来改变原有表的结构,例如增加或删减列、更改原有列类型、重新命名列或表等。
其语法格式如下:
alter table <表名> [修改选项]
修改选项的语法格式如下:
{ ADD [COLUMN] <列名> <类型>
| CHANGE [COLUMN] <旧列名> <新列名> <新列类型>
| ALTER [COLUMN] <列名> { SET DEFAULT <默认值> | DROP DEFAULT }
| MODIFY [COLUMN] <列名> <类型>
| DROP [COLUMN] <列名>
| RENAME [TO] <新表名>
| CHARACTER SET <字符集名>
| COLLATE <校对规则名> }
# 修改表名
alter table <旧表名> rename [to] <新表名>;
# 修改表字符集
alter table <表名> [default] character set <字符集名> [default] collate <校对规则名>;
# 修改字段
alter table <表名> change <旧字段名> <新字段名> <新数据类型>;
# 修改字段数据类型
alter table <表名> modify <字段名> <数据类型>
# 添加字段
alter table <表名> add <字段名> <数据类型>
# 删除字段
alter table <表名> drop <字段名>;
change
和modify
的区别?
modify一般用于修改列属性(例如:数据类型,约束等),但是不能修改字段名。修改字段名称应使用change
change既可以用于修改字段名,也可以用于修改列属性
-
给数据表添加字段
数据表添加字段可以在开头、中间和结尾处添加字段
-
在开头添加字段
alter table <表名> add <新字段名> <数据类型> [约束条件] first;
-
在中间位置添加字段
alter table <表名> add <新字段名> <数据类型> [约束条件] after <已经存在的字段名>;
-
在末位添加字段
alter table <表名> add <新字段名> <数据类型> [约束条件];
-
4、删除数据表
删除表的同时,表的结构和表中所有的数据都会被删除。使用 drop table
语句可以删除一个或多个数据表,语法格式如下:
drop table [if exists] <表名1>[,表名2,...]