SQL Server (微软公司产品)
面向Windows操作系统
简单、易用
Oracle (甲骨文公司产品)
面向所有主流平台
安全、完善、操作复杂
DB2 (IBM公司产品)
面向所有主流平台
大型、安全、完善
MySQL (甲骨文公司收购)
免费、开源、体积小
关系数据库系统是基于关系模型的数据库系统
库 -> 表 -> 二维表格形式的结构化数据
缓存型 Redis Memcached
文档型 MongoDB
索引型 ElasticSearch
时序型 Prometheus InfluxDB
#创建mysql源
cd /etc/yum.repos.d/
vim mysql.repo
[mysql]
name=mysql5.7
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
gpgcheck=0
#安装服务mysql-community-server
yum install mysql-community-server -y
#启动服务
systemctl start mysqld
ss -ntap |grep 3306
#登入数据库,但是密码是默认的,需要查看
mysql -u root -p
grep password /var/log/mysqld.log
mysql -u root -p'默认的密码'
#特殊符号用单引号引起来
#登入数据库后必须修改密码
alter user root@'localhost' identified by 'Zhuo@123';
#alter user root@'主机名' identified by '新密码';
#可以使用mysql> \h查看帮助
systemctl stop firewalld
setenforce 0
#关闭防火墙和selinux服务
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
#安装Mysql环境依赖包
useradd -M -s /sbin/nologin mysql
#创建运行用户
cd /opt
tar zxvf nginx-1.22.0.tar.gz -C /opt/
#解压缩源码包
cd /opt/mysql-5.7.20/
#搭建编译环境
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1
make -j2 && make install
#编译并安装
vim /etc/my.cnf
#客户端设置
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
#服务端配置
[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
#服务全局配置
[mysqld]
user = mysql #设置管理用户
basedir = /usr/local/mysql #指定数据库的安装目录
datadir = /usr/local/mysql/data #指定数据库文件的存储路径
port = 3306 #指定端口
character_set_server=utf8 #设置服务器字符集编码格式为utf8
pid-file = /usr/local/mysql/mysqld.pid #指定pid 进程文件路径
socket = /usr/local/mysql/mysql.sock #指定数据库连接文件
server-id = 1 #指定服务ID号
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
#更改mysql安装目录和配置文件的属主属组
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
echo 'export PATH' >> /etc/profile
source /etc/profile #刷新使其生效
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \ #生成初始化密码为空
--user=mysql \ #指定管理用户
--basedir=/usr/local/mysql \ #指定数据库的安装目录
--datadir=/usr/local/mysql/data #指定数据库文件的存储路径
#直接拷贝版
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
#使其能使用systemd服务
systemctl daemon-reload 刷新识别
systemctl start mysqld.service 开启服务
systemctl enable mysqld 开机自启动
ss -anpt | grep 3306 |tr -s ' ' 查看端口
mysqladmin -u root -p password "abc123"
#刚开始没密码是空的直接回车
mysql -u root -p
#这个命令敲下,提示要输入密码,这个就是刚才设置的密码abc123
数据库:database
表:table,行:row 列:column
索引:index
视图:view
存储过程:procedure
存储函数:function
触发器:trigger
事件调度器:event scheduler,任务计划
用户:user
权限:privilege
在数据库系统中,SQL 语句不区分大小写,建议用大写
SQL语句可单行或多行书写,默认以 " ; " 结尾
关键词不能跨多行或简写
用空格和TAB 缩进来提高语句的可读性
子句通常位于独立行,便于编辑,提高可读性
数据库对象和命名
SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。
语句 | 含义 |
---|---|
DDL | 数据定义语言,用于创建数据库对象,如库、表、索引等 |
DML | 数据操纵语言,用于对表中的数据进行管理 |
DQL | 数据查询语言,用于从数据表中查找符合条件的数据记录 |
DCL | 数据控制语言,用于设置或者更改数据库用户或角色权限 |
#help后面跟上具体命令可以查看帮助
例如:mysql> help create
#查看支持字符集
show charset;
默认拉丁文字,需要修改为
utf8 | UTF-8 Unicode
#阉割版的
utf8mb4 | UTF-8 Unicode
#真实的版本
#修改字符集
vim /etc/my.cnf
[mysqld]
character-set-server=utf8mb4
show databases; #大小写不区分,分号“;”表示结束
#方式一:在库中查看表
use scj; #use 数据库名
#前往scj数据库
show tables; #查看表
#方式二 :在库外查看表
show tables from scj; #show tables from 数据库名
#查看scj数据库下所有已创建表
#表内查看
use 数据库名;
describe [数据库名.]表名;
可缩写成:desc 表名;
#表外查看
desc 数据库名.表名;
mysql -V
类型 | 说明 |
---|---|
int | 整型,用于定义整数类型的数据 |
fload | 单精度浮点4字节32位,准确表示到小数点后六位 |
double | 双精度浮点8字节64位 |
char | 固定长度的字符类型,用于定义字符类型数据。 |
varchar | 可变长度的字符类型 |
text | 文本 |
image | 图片 |
decimal(5,2) | 5个有效长度数字,小数点后面有2位。指定长度数组 |
char和varchar的区别
char的长度是不可变。char如果存入数据的实际长度比指定长度要小 会补空格至指定长度 如果存入的数据的实际长度大于指定长度,低版本会被截取高版本会报错。
varchar长度是可变的,默认会加一个隐藏的结束符,因此结束符会多算一个字节。
https://dev.mysql.com/doc/refman/8.0/en/data-types.html
#官方文档
选择正确的数据类型的三大原则:
更小的通常更好,尽量使用可正确存储数据的最小数据类型
简单就好,简单数据类型的操作通常需要更少的CPU周期
尽量避免NULL,包含为NULL的列,对MySQL更难优化
char(n) 固定长度,最多255个字符,注意不是字节
varchar(n) 可变长度,最多65535个字符
tinytext 可变长度,最多255个字符
text 可变长度,最多65535个字符
mediumtext 可变长度,最多2的24次方-1个字符
longtext 可变长度,最多2的32次方-1个字符
BINARY(M) 固定长度,可存二进制或字符,长度为0-M字节
VARBINARY(M) 可变长度,可存二进制或字符,允许长度为0-M字节
内建类型:ENUM枚举, SET集合
tinyint(m) 1个字节 范围(-128~127)
smallint(m) 2个字节 范围(-32768~32767)
mediumint(m) 3个字节 范围(-8388608~8388607)
int(m) 4个字节 范围(-2147483648~2147483647)
bigint(m) 8个字节 范围(±9.22*10的18次方)
上述数据类型,如果加修饰符unsigned后,则最大值翻倍
例如:tinyint unsigned的取值范围为(0~255)
#建立数据库
create database 数据库名;
drop database 数据库名;
use 数据库名;
create table 表名 (字段1 数据类型,字段2 数据类型[,...][,primary key (主键名)]);
#主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。
例如:
use scj;
create table students (id int, name char(4), age int, sex char(2), hobby varchar(20), primary key(id));
#创建students表并指定id为主键
#方式一:库内删除
use 数据库名;
drop table 数据表名;
#方式二:库外删除
drop table 数据库名.数据表名;
insert into 表名(字段1,字段2[,...]) values(字段1的值,字段2的值,...);
或
insert into 表名 values (字段1的值, 字段2的值, ...); #要按照表结构的字段顺序设置值
#示例
insert into students values (2, '张三', 20, '男', 'game')
select * from students; #查看表内容
select 字段名1,字段名2[,...] from 表名 [where 条件表达式];
#查询全部数据
select * from 数据表名;
#示例
select * from students;
#查询指定数据
#示例
select id,name from students where id=2;
#查看id为2行的id和name列
#以列表方式竖向显示
select * from 数据表名\G;
#示例
select * from students\G;
#只显示头2行
select * from 数据表名 limit 2;
#示例
select * from students limit 2;
#显示第3行后的2行
select * from 数据表名 limit 3,2;
#示例
select * from students limit 3,2;
update 表名 set 字段名1=字段值1[,字段名2=字段值2] [where 条件表达式];
#示例
update students set age=19 where id=3;
#修改id为3行的age为19
delete from 表名 [where 条件表达式];
#示例
delete from students where id=3;
#删除studtens表里id为3的内容
alter table 旧表名 rename 新表名;
#示例
alter table students rename st;
#将表students改名为st
alter table 表名 add 字段;
alter table st add address varchar(50) default '不详';
#为st表添加默认值为不详,字段名为address的属性
alter table 表名 change 旧列名 新列名 数据类型 [unique key];
#示例
alter table st change name username varchar(10) unique key;
#修改st表name字段名为username并指定其为唯一键
#验证
insert into st (id, username, age) values (6, '张三', 22);
insert into st (id, username, age) values (6, '老王', 22);
#唯一键不可重复
alter table 表名 drop 字段名;
例如:
#删除st表中sex字段
alter table st drop sex;
#拓展
use scj;
create table if not exists info (
id int(4) zerofill primary key auto_increment,
name varchar(10) not null default '匿名',
cardid int(18) not null unique key,
hobby varchar(50));
----------------------------------------------------------------------------------------------------------
#if not exists:表示检测要创建的表是否已存在,如果不存在就继续创建
#int(4) zerofill:表示若数值不满4位数,则前面用“0”填充,例0001
#auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
#unique key:表示此字段唯一键约束,此字段数据不可以重复;一张表中只能有一个主键, 但是一张表中可以有多个唯一键
#not null:表示此字段不允许为NULL
----------------------------------------------------------------------------------------------------------