了解SQL数据库

image-20230410221011304

  1. 安装 MySQL

    首先更新本地存储库索引,执行sudo apt update

    从APT存储库安装MySQL,执行sudo apt install mysql-server,在安装过程中,可能会出现[Y / n]问题,输入Y继续

    安装完成后可以输入mysql --version查看版本

    安装后,MySQL服务器应自动启动。 要检查它是否正在运行,执行systemctl status mysql.service

    如果由于某些原因MySQL服务器未运行,执行以下命令以启动MySQL服务器:sudo systemctl start mysql

  2. 安装XXXX

  3. 安装XXXX

  4. 安装XXXX

  5. 设置root

Mysql安装成功后,默认的root用户密码为空,你可以使用以下命令来创建root用户的密码

1
[root@host]# mysqladmin -u root password "new_password";

登录

1
2
root@host# mysql -u root -p
Enter password:*******

创建一个hr数据库

1
mysql> create database hr;

使用hr数据库

1
mysql> use hr;

接着粘贴以下语句:

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
-- 创建部门表
drop table job_history;
drop table employees;
drop table departments;
create table departments(
deptno int primary key,
dname varchar(12) not null,
managerno int,
loc varchar(10)
);
-- 向部门表中插入记录
insert into departments values(1,'开发部',2,'一楼');
insert into departments values(2,'测试部',3,'二楼');
insert into departments values(3,'销售部',8,'一楼');
insert into departments values(4,'新业务部',null,'二楼');
-- 创建员工表
create table employees(
empno int primary key ,
name char(10) not null,
deptno int,
email varchar(20),
hiredate date,
salary numeric(8, 2) default 8000.00,
FOREIGN KEY(deptno) REFERENCES departments(deptno)
);
-- 向员工表中插入记录
insert into employees values(1,'周福生',NULL,'zhou@gmail.com','2000-12-02',90000.00);
insert into employees values(2,'王五',1,'wangsu@gmail.com','2013-01-03',9100.00);
insert into employees values(3,'李四',2,'lisi@qq.com','2021-02-10',13900.00);
insert into employees values(4,'赵六',1,'zhaoliu@qq.com','2022-12-1',15000.00);
insert into employees values(5,'李明',1,'liming@qq.com','2004-09-11',25200.00);
insert into employees values(6,'孙军',2,'sunjun@163.com','2016-05-22',9700.00);
insert into employees values(7,'钱杰',3,'qianjie@outlook.com','2013-07-22',8900.00);
insert into employees values(8,'程娟',3,'chengjuan@gmail.com','2013-07-22',14900.00);
insert into employees values(9,'赵卫华',1,'zhaoweihua@gmail.com','2009-11-12',21900.00);
-- 创建岗位历史表
create table job_history(
empno int,
start_date date,
end_date date,
deptno int,
PRIMARY KEY(empno,start_date),
FOREIGN KEY(empno) REFERENCES employees(empno)
);
-- 向岗位历史表中插入数据
insert into job_history values(2,'2013-01-03','2015-12-31',3);
insert into job_history values(2,'2016-01-01','2018-12-31',2);
insert into job_history values(3,'2015-01-01','2017-12-31',2);
insert into job_history values(4,'2010-01-01','2015-12-31',1);
insert into job_history values(5,'2015-06-30','2016-12-31',2);
insert into job_history values(9,'2009-11-12','2010-12-31',1);
commit;
select * from departments;
select * from employees;
select * from job_history;

select字段

最简单的: select * from 表名;

注意基本概念,数据库中,横着的是记录,竖着是字段。

select * from employees;

MySQL的基本语法

数据库管理

创建数据库

语法:create {database | schema} [if not exists] 数据库名字

例如:

1
2
3
create database afu;
create database afu; #因为存在一个afu库,所以会报错
create database if not exists afu; #可以正常执行,但是有一个警告

image-20230418223737289

show warnings;可以常看警告信息

image-20230418223857852

再来创建一个数据库,名字为“daokun”,并且指定字符集为“utf-8”

1
create database daokun default character set utf8;

image-20230418224206695

选择数据库

语法:use 数据库名;

例如选择之前创建的afu数据库:use afu;

执行查询命令show tables;查看当前库有哪些表,因为afu库还没有创建任何表,所以返回空。

image-20230418224529089

查看数据库

查看有哪些库语法:show databases;

查看有哪些表:show 数据库名;

查看创建方法,字符集等:show create database 数据库名;

image-20230418225038377

修改数据库

如果创建库的时候,忘记了指定字符集,可以使用alter

alter database afu default character set utf8;

image-20230418225319408

删除数据库

这个数据库里面的所有内容都会被删除,包括表结构和数据。

语法:drop database 数据库名;

字段类型

MySQL支持多种数据类型,分为三类:数值,日期/时间,字符串。

整数类型分为:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT;浮点类型:FLOAT,DOUBLE。定点数类型:DECIMAL

日期/时间类型包括:DATA,TIME,DATATIME,TIMESTAMP,YEAR;

字符串类型包括:CHAR,VARCHAR,BINARY,VARBINARY,BLOB,TEXT,ENUM,SET。二进制字符串类型:BINARY,VARBINARY。

数值类型

​ 可以用在数据类型后面添加UNSIGNED来标识是否未无符号,例如**:INT** UNSIGNED表示无符号的4字节长度的整数。

无符号和有符号的范围是不一样的。

​ 有符号的整数类型的取值范围和占用字节

类型 取值范围 占用字节
TINYINT -128~127 1
SMALLINT -32768~32767 2
MEDIUMINT -8388608~8388607 3
INT -2147483648~2147483647 4
BIGINT -9223372036854775808~9223372036854775807 8

MySQL可以指定定点数和浮点数的精度。数据类型(M,D),M是精度,是数据的总长度;D是标度,是小数点后面的长度。

例如,float(6,2)的含义为:数据类型是float,数据长度是6,小数点保留后面两位。如果插入值的精度高于实际定义的精度,系统会进行四舍五入。

字符串类型

​ 字符串主要由CHAR,VARCHAR,BINARY,VARBINARY,BLOB,TEXT,ENUM,SET。

​ CHAR和VARCHAR类似,但在保存和检索方式有所区别,最大长度和尾部空格是否保留等方面不同。(保存和检索方式都不进行大小写转换)。

​ BINARY和VARBINARY类似,存储的是二进制字符串,而不是字符型字符串。它们没有字符集,并且排序和比较基于列值字节的数值。

​ TEXT有四种类型:TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT。

​ ENUM是枚举类型。

​ SET是集合类型,不同于ENUM,它是一个排列组合,假如有abc,它可以选择a或者b或者c,也可以选择ab,ac,bc,还可以选择abc。

时间类型

  1. YEAR类型

三种赋值方法:

​ 第一种是直接插入4位数字或者字符串。例如2023.

​ 第二种是插入两位字符串,插入‘00’‘69’相当于是20002069;插入’70’‘99’相当于是19701999。‘0’相当于2000。

​ 第三种是插入两位数字,基本上和第二种相同。但是0不代表2000,而是0000.

  1. TIME类型

​ time类型表示为:”时:分:秒”,标准格式是“HH:MM:SS”,但不一定非要用这种格式。

​ 如果插入的是”D HH:MM:SS”,例如,“2 23:50:30”———–>2*24+23 : 50 : 30

​ 如果插入是”30” ——->”00:00:30”

​ 如果插入是”11:25”———>”11:25:00”