一、数据库的概念和相关的语法和规范
1、数据库的概念
数据库:组织,存储,管理数据的仓库。
数据库的管理系统(DBMS):实现对数据有效组织,管理和存取的系统软件。
数据库的种类:
mysql 、oracle 大数据系统一般使用、 sql-server、 MariaDB 也是mysql 也叫mysqld 、 postgreSQL 大象数据库。
2、关系型数据库和非关系型数据库
关系型数据库:mysql oracle postgreSQL
关系型存储的结构:是一张二维的表格,表里面有行和列
列:是对象,字段
行:对象的信息,字段的属性
行+列组成一张表
非关系型数据库:
缓存型数据库:arredis
索引型数据库:ES
文档型数据库:MongoDB
键值对形式存储的结构 key value
关系型数据库和非关系型数据库优缺点:
关系型的优点:表的结构清晰,逻辑容易整理,记录的证据比较完整。
缺点:读写速度比较慢,并发量差,数据迁移比较麻烦。
非关系型数据库:
优点:可以进行高并发读写,对海量数据依旧可以保持高效率的存储和访问,架构可拓展
缺点:键值对形式存储,数据逻辑比较复杂,数据是保存子在缓存(内存)当中的(redis)如果意外重启所有数据都会丢失。
3、mysql的数据类型
char:固定长度的字符类型,用于存储固定长度的字符串。
varchar:可变长度的字符类型,存储的是可变长度的字符串。
char定义好了长度之后,不论写的值多少,都会占用固定长度的字节大小,保存在磁盘上都是接点字节。
varchar 在保存字符串是时,多少就是保存多少,在保存的字符串结尾默认有一个隐藏的结束符,会多占一个字节。
varchar比char节约磁盘。
读写速度方面:
char的读写性能高于varchar,char是连续的磁盘空间,保存的内容是连续的。
varchar在增删改查之后,会产生一个磁盘空间的碎片文件,影响读写性能。
int :存储的数据类型为整数。
float:浮点数,小数点(float(m:d))m表示总位数,d表示小数位数。
double:双精度浮点数,(double(m:d))m表示总位数,d表示小数位数。
date类型用于存储日子,YYYY-MM-DD datetime用来存储日期和时间 YYYY-MM-DD HH:MM:SS timestamp和dateime类型,但是他可以自动记录当前时间。
decimal(5,2)存储浮点数,压精度的浮点数,5表示总数位,2表示小数位。
4、数据库的管理
增删改查-----------sql语句
sql中的名词:
数据库:database
表:table
行:row
列:column
索引:index
视图:view
用户:user
权限:privilege
存储过程:procedure
存储函数:function
调度器:exent
5、sql的语言规范
在数据库系统中,sql语言不区分大小写的,但是建议用大写。
sql语句可以单行也可以多行,但是必须要以“;”结尾。
命名规范:库名,表名,列的名字,必须都是字母开头,后面可以数字。后面也可以跟上特殊符号。
不要使用mysql的保留字,table select show。
数据库,表面,用户名严格区分大小写。
6、sql语言的分类
1、DDL 数据库定义语言:创建数据的对象语言,库,表和索引等等
create drop
2、DML:数据库操作语言,对表里面的数据进行管理
select update insert delete
3、DQL:数据库查询语言,数据的查询语句
select
4、DCL数据控制语言,控制和管理数据用户的角色和权限。
grant 赋权 revoke取消权限
5、tcl事务控制语言,用来管理的数据库的事务,脚本开发,存储过程等等
commit rollback savepoint
二、数据库安装
安装使用的是绿色硬盘版本,无需额外安装依赖环境,也不需要麻烦的编译安装,因为比较简单
将安装包拖进/opt目录下
cd /opt
tar -xf mysql安装包
mv 解压出的目录 /usr/local/mysql
#创建程序用户
useradd -M -s /sbin/nologin mysql
#mysql的主配置文件设定所属用户和组
chown -R mysql.mysql /usr/local/mysql/
chown mysql.mysql /etc/my.cnf
修改配置文件
vim /etc/my.cnf
[client]
port = 3306
#客户端访问的端口
socket=/usr/local/mysql/mysql.sock
#指定MySQL的通信套接字文件
[mysqld]
user = mysql
basedir=/usr/local/mysql
#MySQL的安装目录
datadir=/usr/local/mysql/data
#MySQL数据保存的目录
port = 3306
#服务端的端口
character-set-server=utf8
#字符集的编码
pid-file = /usr/local/mysql/mysqld.pid
#pid文件位置
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
#表示任意地址都可以访问数据库
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
#MySQL默认的存储引擎
max_allowed_packet=16M
server-id = 1
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
#MySQL支持的数据类型和相关的模块
设置环境变量,声明/宣告MySQL命令便于系统识别:
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
初始化数据库:
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
设置系统识别,进行操作:
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
systemctl daemon-reload
systemctl restart mysqld
这样一个数据库就安装成功了。
三、使用数据库(增删改查)
1、基础操作
初始化数据库密码:
mysqladmin -u root -p password "123456"
#在交互界面直接回车,不要输入!
进入数据库:
mysql -u root -p123456
#进入数据库交互界面
show databases;
#创建用户并设置密码
create user 'root'@"%" identified by '123456';
#赋予远程连接的权限
grant all privileges on *.* to 'root'@'%';
#刷新生效
flush privileges;
#修改加密方式,可以进行远程连接
alter user 'root'@'%' identified with mysql_native_password by "123456";
exit;
这就可以使用本地的数据库软件进行连接。
创建一个表
CREATE table stu03(
#表名是stu03
id int(5),
name char(10),
date_time date not null,
#不能为空
data_times datetime,
date_time1 timestamp not null,
PRIMARY KEY (id)
);
添加一条数据
INSERT into stu03 VALUES(1,2,'2024-07-08','2024-09-08 09:09:00',NOW());#插入数据
查看效果
删除表
DROP TABLE stu03;
创建表
CREATE TABLE stu (
id int(4) not null,
name CHAR(10) not null,
score decimal(5,2)
);
查看
2、insert插入数据
语法1
insert into 表名(字段1,字段2,字段3)values (值1,值2,值3);
insert into stu (id,name,score) VALUES (1,'zhangsan',87.5);
字符串需要使用单引号引起来。
语法2
insert into 表名 values(1,'lisi',88.7);
查看全部内容
SELECT * from stu; 查询所有
null和空值之间的区别:
null就是啥也没有,就是为空
空值也是值,只是值是空的
3、修改和更新update
update 表名 set 列名=值where 条件;
UPDATE stu set score=90 WHERE id=3;
4、删除delete表的数据
delete from 表面 where 条件;
删除lisi字段
DELETE from student WHERE id=2;
查看
SELECT * from student;
5、 DQL语句,select查询语句
只看name 和score所在列
查看指定行limit
SELECT * from student LIMIT 1,3;
表示查询你从第一行开始的后面是三行,包括自己
去重查询
SELECT DISTINCT name FROM student;
去重
不能多个去重
SELECT DISTINCT name,score FROM student;
根据一个条件进行查找
SELECT * from student WHERE id=7;
多个条件逻辑或,只需要有一个成立即可
SELECT * from student WHERE id=7 or score=99;
多个条件逻辑且,必须同时满足,否则为空
SELECT * from student WHERE id=7 and score=99;
SELECT * from student WHERE id=8 and score=99;
模糊查询like
select * from student where name like '王%'; 查询以王为开头的
select * from student where name like '%二'; 以二为结尾
select * from student where name like '%王%'; 包含有王字的
6、 更新alter
alter修改表面和修改表结构
alter table student rename stu;
修改表结构
给表添加一个列
ALTER TABLE stu add address VARCHAR(50) DEFAULT '地址不详';
查看修改字段的数据类型
desc stu;
ALTER TABLE stu MODIFY COLUMN address CHAR(10);
desc stu;
删除列
ALTER TABLE stu DROP address;
修改name列的名称
ALTER TABLE stu change name uname char(10);