Mysql学习--第一天
数据库概述
数据库的特征:
- 数据结构化
- 实现数据共享
- 减少数据冗余
- 数据独立性
数据库类型:
- 网状型数据库:采用记录类型为节点的网状数据模型
- 层次型数据库:采用层次模型模拟现实世界中按层次组织起来的事物
- 关系型数据库:采用二维表结构组织和管理数据,并规定了表内的表间的依赖关系
MySQL数据库介绍
- SQL语言主要是用来操作关系型数据库的一门语言,称之为结构化查询语句
SQL语句主要分为:
- DQL:数据查询语言,用于对数据进行查询,如select
- DML:数据操作语言,如数据进行增加,修改,删除,如insert,updata,delete
- TPL:事物处理语言,对事物进行处理,包括begin transaction,commit,rollback
- DCL:数据控制语言,进行授权与权限回收,如grant,revoke
- DDL:数据定义语言,进行数据库,表的管理等,如create,drop
- CCL:指针控制语言,通过控制指针完成表的操作,如declare cursor
在Linux 上安装MySQL数据库
安装服务端:(安装服务端的时候会自动安装客户端)
下载安装→ apt-get install mysql-server
查看服务是否启动:
在root权限下→service mysql status
停止服务→ service mysql stop
重启服务→ service mysql restart
安装好之后配置远程登录:(我是用的腾讯云的Ubuntu)
启动服务:
service mysql start
查看服务是否启动:
在root权限下→service mysql status
如图:
root@VM-4-5-ubuntu:/# service mysql start #启动mysql
root@VM-4-5-ubuntu:/# service mysql status #查看mysql状态
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-10-09 18:30:41 CST; 8s ago
Process: 440793 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, stat>
Main PID: 440820 (mysqld)
Status: "Server is operational"
Tasks: 38 (limit: 4608)
Memory: 353.9M
CGroup: /system.slice/mysql.service
└─440820 /usr/sbin/mysqld
Oct 09 18:30:40 VM-4-5-ubuntu systemd[1]: Starting MySQL Community Server...
Oct 09 18:30:41 VM-4-5-ubuntu systemd[1]: Started MySQL Community Server.
进入mysql并选择mysql数据库:
root@VM-4-5-ubuntu:/home/lighthouse# mysql #进入myql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.26-0ubuntu0.20.04.3 (Ubuntu)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use mysql #选择使用mysql数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
配置远程连接:
首先修改root密码:
mysql> update user set authentication_string='12345678' where user='root'; #修改密码语句
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges; #更新语句
Query OK, 0 rows affected (0.01 sec)
(将user表中的root的host改为所有地址)
mysql> update user set host='%' where user='root'; #将localhost改成所有人可以访问,‘%’表示所有用户
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
登录mysql 数据库
命令: mysql -u root -p[密码]
数据库管理
查看数据库版本:
- select version();
显示当前时间:
- select now();
查看所有数据库:
- show databases;
创建数据库:
- create database 数据库名 charset=utf8;
一定要指定编码utf8
切换数据库:
- use 数据库名
查看目前正在使用的数据库:
- select database();
删除数据库:
- drop database 数据库名;
数据库表管理-数据表设计
相关定义:
-
数据表设计包括ER图、表的主键、字段、数据类型、约束、表之间的关系的设计
-
ER(Entity-Relationship)模型:即实体-关系模型主要用于定义数据的存储需求。E-R模型由实体、属性和关系三个基本要素构成
-
主键(Primary Key):数据库表中的每一行记录都必须是唯一的,即在同一张表中不允许出现完全相同的两条记录,所以为保证‘唯一性’,就为表定义一个主键
主键的特征:
1.表的主键可以由一个字段构成,也可以由多个字段构成(这种情况称为复合主键)
2.数据表中主键具有唯一性且不能取空值(NULL),当数据库表中的主键由多个字段构成时,每个字段都不能取NULL值 -
实体之间的关系:如一个班,班级实体和班主任实体之间为一对一关系,班级实体和学生实体之间为一对多关系,学生实体和课程实体之间为多对多关系
-
外键:实体间的关系可以通过外键来表示。如果表A中的一个字段a对应于表B中的主键b,则字段a称为表A的外键。此时存储在表A中字段a的值也是表B主键b的值
-
约束:约束是定义在表上的一种强制规则,当为某个表定义约束后,对该表做的所有SQL操作都必须满足约束的规则要求,否则操作将失败
约束类型 | 说明 |
---|---|
NOT NULL | 非空约束,指定某列的所有行数据不能包含空值 |
UNIQUE | 唯一性约束,指定列或者列的组合的所有行数数据必须唯一 |
PRIMARY KEY | 主键约束,在列及引用列上建立的一种强制依赖关系 |
FOREIGN KEY | 外键约束,在列及引用列上建立的一种强制依赖关系 |
CHECK | 检查性约束,在列上指定一个必须满足的条件 |
查看当前数据库中的表
- show tables;
创建表
- create table 表名();
如创建一个学生表:
mysql> create table students(id int unsigned auto_increment primary key not null,name varchar(10) not null,is_delete bit(1) not null default 0,address varchar(50));
Query OK, 0 rows affected (0.04 sec)
mysql> desc students;
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| is_delete | bit(1) | NO | | b'0' | |
| address | varchar(50) | YES | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql>
comment注释
在创建表的时候,如果字段很多,防止忘记字段是存什么数据的,可以给字段添加注释
显示表
- desc 表名;
查看创建表的sql语句
命令: show create table 表名;
添加列
- alter table 表名 add 列名 类型;
删除列
- alter table 表名 drop 列名;
修改列
- 第一种,不修改列名值修改类型及约束
命令:alter table 表名 modify 列名 类型及约束;
mysql> alter table students modify address varchar(10) not null;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc students
-> ;
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| is_delete | bit(1) | NO | | b'0' | |
| address | varchar(10) | NO | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
- 第二种,需要修改字段名字
命令:alter table 表名 change 原名 新名 类型及约束;
数据库操作
查询语句
- select * from 表名; →查询该表的所有内容
- select 字段1,字段2 from 表名;→指定两列查看内容
插入数据
- insert into 表名 values(…);→全列插入
- insert into 表名 values (…),(…),(…);→全列多行插入
- insert into 表名(字段1,字段2) values(…)(…);→部分列多行插入
修改数据
- update 表名 set 字段=xxx where 字段=xxx;
删除数据
- delete from 表名 where 字段名=xxx;
备份和恢复数据库
备份
- mysqldump -uroot -p 数据库名>保存的文件名.sql;→备份数据库的所有表的数据
- mysqldump -uroot -p 数据库名 表名>保存的文件名.sql;→备份数据库的所有表的数据;→备份数据库选中的表的数据
恢复
- mysql -uroot -p 新数据库名 < 保存的文件名.sql