MySQL基础
MySQL数据库基础
数据库的基本概念
数据库的英文:DataBase 简称:DB.
什么是数据库?
io 数据持久化 内存? txt
用来存储和管理数据的有结构和组织的仓库。其本质就是一个文件夹
数据库的特点:
1)可以进行数据的持久化操,其实数据库就是一个大的文件系统。
2)方便统一管理和存储数据
3)使用统一的方式进行数据库的操作和管理
常见的数据库
1) MySQL 数据库,期初是Sun公司开发的产品,后期Oracle
公司收够,是Oracle公司的产品,这款软件是开源。
MariaDB 完全免费
1 | MySQL分社区版和商业版。社区版是免费的,商业版要收费。 |
2) Oracle 数据库,是闭源产品,市场占有率仅次于MySQL
3) SQLServer数据库,是微软旗下的产品,同样是闭源产品主要应用在微软的整体解决方案中
4)DB2数据库,IBM公司的产品,闭源,应用在IBM的整体解决方案中
安装MariaDB数据库
mysql的安装和卸载是比较繁琐的,对于初学者来讲,会带来很多不必要的麻烦!
安装MariaDB的原因:
- 1.安装非常简单,傻瓜式操作;
- 2.自带可视化工具,不需要借助第三方软件进行数据的操作。
安装过程中需要注意的点:
如果安装失败,需要通过控制面板进行卸载造成,完了继续双击安装包进行安装
安装过程中,需要设置自己的用户密码。第一个是密码填写,第二次是密码确定。因为用户名是默认的
root
,建议设置为:root
还需要勾选字符集:
UTF8
注意下:mysql数据库的默认端口号是:
3306
安装成功的标志:
(1)看桌面上有没有
HeidiSQL软件图标
(2)打开开始,找到安装的Mariadb文件夹,找到MySQL Client5.5,打开之后在黑窗口面板上填写自己设置的密码:root,回车之后出现以下的内容表示安装成功!
1
2
3
4
5
6
7
8 Enter password: ****
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.67-MariaDB mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
登录mysql 的方式
(1)点击开始,找到安装的Mariadb文件夹,找到MySQL Client5.5,打开之后在黑窗口面板上填写自己设置的密码:root
(2)win+R ,调出的窗口中输入cmd。先将路径切换到MariaDB数据库的bin目录下
cd D:
cd 01-software/MariaDB 5.5/bin
》 mysql -uroot -proot
1
2
3
4
5
6
7
8D:\01-software> cd MariaDB 5.5/bin
D:\01-software\MariaDB 5.5\bin> mysql -uroot -proot
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.67-MariaDB mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
如果有会话链接失败的,或者在黑窗口不能够登录成功的,是应为mysql的服务端没有开启。下面开启服务端的步骤:
(1)第一种方式:
点开开始,输入“服务”,跳出服务界面,打开之后寻找“MySQL”
或者win+R 输入:services.msc,依旧会跳出服务界面。打开之后寻找“MySQL”
(2)第二种,使用命令进行启动和关闭
启动:net start mysql
终止:net stop mysql
1
2
3
4
5
6
7C:\Windows\system32>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。
C:\Windows\system32>net stop mysql
MySQL 服务正在停止..
MySQL 服务已成功停止。
退出Mysql:
输入:exit 或者 quit
SQL
什么是SQL?
英文全称:
Structured Query Language
中文名称:结构化查询语言
其实就是定义了 操作所有关系型数据库的规则,每一个数据库了操作的方式可以能是不一样的,存在一定差异化,类比于地方的方言。
SQL通用用法
1)SQL 是可以单行运行、也可以多行运行的,且结束符号是封号(英文状态)
2)可以使用空格和缩进来增强SQL语句的可读性。
3)MySQL数据库中,是不区分大小写的,关键字一般建议使用大写。 4)数据库中设计3中注释
单行注释:
--
需要注释的内容`#` 需要注释的内容(在mysql特有)
多行注释:
/* 需要注释的内容 */
SQL的分类
(1)
DDL(Date Definition Language)
数据定义语言 是用来定义数据库对象:数据库、数据表、列等
关键字:create、drop、alter等
(2)
DML(Date Manipulation Language)
数据操作语言 是用来对数据库中的表中的数据进行:增删改。
关键字:insert、delete、 update等
(3)DQL(Date Query Language)
数据库查询语言
是用来查询数据库中表的记录(即指数据)。
关键字:select、 where等
(4)DCL(Data Control Language) 数据控制语言
是用来定义数据库的访问权限和安全级别。
关键字:Grant、 Revoke等。
SQL 语句的应用
DDL : 数据库定义语言 -- 数据库、数据表
操作数据库: CRUD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
931. C:Create 创建
-- 创建数据库
create database 数据库名称;
-- 创建数据库并判断是否存在
create database if not exists 数据库名称;
-- 创建数据库的同时可以设置字符集
create database 数据库名称 character set 字符集; 【uft8、gbk】
# 练习:创建一个名为db1的数据库
# 创建一个名为db2的数据库,并判断
# 创建一个名为db3的数据库,并判断的同时设置字符集为utf8
create database db1;
create database if not exists db2;
create database if not exists db3 character set utf8;
MariaDB [(none)]> create database db1;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> create database if not exists db2;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> create database if not exists db3 character set utf8;
Query OK, 1 row affected (0.00 sec)
2.R:Retrieve 查询
-- 查询数据库
show databases;
-- 查询某个数据库的字符集:查询某个数据库的创建语句就可以查询到字符集
show create database 数据库名称;
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db1 |
| db2 |
| db3 |
| mysql |
| performance_schema |
+--------------------+
6 rows in set (0.00 sec)
MariaDB [(none)]> show create database db1;
+----------+--------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------------------------------------------+
| db1 | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+
1 row in set (0.00 sec)
3.U: Update 修改
-- 修改数据库的字符集
alter database 数据库名称 character set 字符集名称;
# 修改db3数据库的默认字符集为gbk
alter database db3 character set gbk;
MariaDB [(none)]> alter database db3 character set gbk;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> show create database db3;
+----------+-------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------+
| db3 | CREATE DATABASE `db3` /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+-------------------------------------------------------------+
1 row in set (0.00 sec)
4. D: Delete 删除
-- 删除数据库
drop database 数据库名称;
-- 判断数据库是否存在,存在则删除
drop database if exists 数据库名称;
# 删除db3数据库
drop database if exists db3;
MariaDB [(none)]> drop database if exists db3;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db1 |
| db2 |
| mysql |
| performance_schema |
+--------------------+
5 rows in set (0.00 sec)操作数据表 (CRUD)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98C:Create 创建
-- 创建数据库表
# 创建表的标准语法:
create table 表名称(
类名称1 数据类型1,
列名称2 数据类型2,
...
变量名称n 数据类型n
);
# 注意使用: 最后一列的数据,是不需要添加逗号的
数据类型:
1.int 整数类型 id int(18)
2.double 小数类型 sal double(10, 2) 数据的最大长度是10,小数点精确到后2位
3.varchar 字符串类型 name varchar(10) "zhangsan" / "张三"
4.date 日期类型 只包含了年月日, yyyy-MM-dd
datetime 包含了年月日时分秒,yyyy-MM-dd HH:mm:ss
timestamp 叫时间戳,包含了年月日时分秒,yyyy-MM-dd HH:mm:ss
-- 特点在于,不给其赋值时,默认会填写当前系统所在的时间,完成自动赋值。
-- 创建数据表
create table user(
id int(5),
name varchar(32),
score double(3, 2),
birthday datetime,
create_table_time timestamp
);
MariaDB [(none)]> use db2;
Database changed
MariaDB [db2]> create table student(
-> id int(5),
-> name varchar(32),
-> score double(3, 2),
-> birthday datetime,
-> create_table_time timestamp
-> );
Query OK, 0 rows affected (0.01 sec)
# 练习: 创建一张名为user的数据表,包含字段:年龄、性别、名字、生日、工资、表创建的时间
R:Retrieve 查询
-- 查询表
show tables;
-- 查询表的结构
desc 数据表名称;
MariaDB [db2]> show tables;
+---------------+
| Tables_in_db2 |
+---------------+
| student |
| user |
+---------------+
2 rows in set (0.00 sec)
MariaDB [db2]> desc user;
+-------------------+-------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+-------------+------+-----+-------------------+-----------------------------+
| id | int(5) | YES | | NULL | |
| name | varchar(32) | YES | | NULL | |
| score | double(3,2) | YES | | NULL | |
| birthday | datetime | YES | | NULL | |
| create_table_time | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------------------+-------------+------+-----+-------------------+-----------------------------+
5 rows in set (0.01 sec)
U: Update 修改
-- 修改表名称
alter table 旧的表名称 rename to 新的表名称;
-- 修改表的字符集
alter table 表名称 character set 字符集;
-- 增加一列
alter table 表名称 add 列名称 数据类型;
-- 修改列的名称
alter table 表名称 change 列名称 新列名称 数据类型;
alter table 表名称 modify 列名称 新的数据类型;
-- 删除列
alter table 表名称 drop 列名称;
D: Delete 删除
-- 删除整张表
drop table 表名称;
drop table if exists 表名称;
MariaDB [db2]> drop table if exists user1;
Query OK, 0 rows affected (0.00 sec)
MariaDB [db2]> show tables;
+---------------+
| Tables_in_db2 |
+---------------+
| student |
+---------------+
1 row in set (0.00 sec)
DML:数据操作语言
- 向表中添加数据
1 | 语法结构: |
- 将表中数据删除
1 | 语法规则: |
- 把表中的数据修改
1 | 语法结构: |
练习作业
1 | 1. 创建mydb1和mydb2数据库,字符集第一个utf8和第二个gbk |
DQL:数据查询语言
应用数据
1 | -- 只需要将以下的数据复制到可视化窗口,选中运行即可。或者粘贴到黑窗口回车运行! |
1 | 一、基础查询 |
1 | 二、条件查询 |
DQL条件查询练习(1):
1 | -- 1.查询年龄小于等于28的 |
参考答案:
1 | -- 1.查询年龄小于等于28的 |
1 | 三、排序查询 |
1 | 四、聚合函数 |
1 | 五、分组查询 |
1 | 六、分页查询 |
DQL语句查询练习(2):
1 | -- 1.查询所有数据,使用年龄降序排序 |
参考答案:
1 | -- 查询所有数据,使用年龄降序排序 |
数据库表的约束
1 | 约束: |
外键约束:数据表
一张表数据冗余度高,内存占用率高
1 | CREATE TABLE emp ( |
外键约束:解决方案
多表外联,表结构简单,表关系清晰。
1 | -- 创建部门表(id,dept_name,dept_loc) |
数据库的设计
好的数据库表设计,不仅减小数据的冗余度,还能够使得数据查询效率提高!
一对一【1-1】
锁和钥匙、人和身份证
解释:一个人只能有有一个身份证,一个身份证对应一个人
实现:
一对一的关系中,可以在任意一张表添加外键(唯一)指向另一张表的主键
一对多(多对一)【1-n 或(n-1)】
父亲和子女、部门和员工
解释:一个父亲可以有多个子女,每个子女都有一个父亲
实现:
在多的一张表创建外键,指另一张表的主键
多对多【n-n】
学生和课程
解释:一个学生可以选择多门课程,每门可以被多个学生选择
实现:
多对多的关系表中,需要借助第三张表来实现,第三张表也称为中间表,中间表至少包含两个字段,这两个字段分别指向另外两种表的主键