IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL基础(二)---MySQL服务基础与使用 MySQL 数据库 -> 正文阅读

[大数据]MySQL基础(二)---MySQL服务基础与使用 MySQL 数据库


前言


一、MySQL 服务基础

1.简介

  • MySQL 是一个真正的多线程、多用户的 SQL 数据库服务,凭借其高性能、高可靠和易于使用的特点,成为服务器领域中最受欢迎的开源数据库系统
  • 在 2008 年以前,MySQL 项目由 MySQL AB 公司进行开发、发布和支持,之后历经 Sun 公司收购 MySQL,Oracle 公司收购 Sun 公司的过程,目前 MySQL 项目由 Oracle 公司负责运营和维护

2.商业版与社区版

  • MySQL 商业版是由 MySQL AB 公司负责开发与维护,需要付费才能使用
  • MySQL 社区版是由分散在世界各地的 MySQL 开发者、爱好者一起开发与维护,可以免费使用
  • 两者区别
    商业版组织管理与测试环节更加严格,会比社区版更稳定
    商业版不遵守 GPL,社区版遵从 GPL 可以免费使用
  • 商业版可获得 7*24 小时的服务,社区版则没有

3.产品阵营

  • 第一阵营:5.0-5.1 阵营,可说是早期产品的延续
  • 第二阵营:5.4-5.7 阵营,整合了 MySQL AB 公司、社区和第三方公司开发的存储引擎,从而提高性能
  • 第三阵营:6.0-7.1 阵营,就是 MySQL Cluster 版本,为适应新时代对数据库的集群需求而开发

4.编译安装

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
#安装 MySQL 环境依赖包

useradd -M -s /sbin/nologin mysql
#创建运行用户

cd /opt
#使用Xshell,将加载好的软件包拖至此目录下
mysql-boost-5.7.20.tar.gz
tar zxvf mysql-boost-5.7.20.tar.gz

cd 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 -j 4 && make install
#编译安装,这里所用时间会较长

#修改 mysql 配置文件
vim /etc/my.cnf
#删除原配置项,再重新添加下面内容

[client]
port = 3306
socket=/usr/local/mysql/mysql.sock

[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
   
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 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$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

#添加mysql系统服务
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/

systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld

netstat -anpt | grep 3306

#修改mysql登录密码
mysqladmin -u root -p password "123123" 	

#授权远程登录
mysql -u root -p

grant all privileges on *.* to 'root'@'%' identified by '123123';

show databases;

quit

另附一键编译脚本

  • 需手动创建 /data 目录
#!/bin/bash

#包和脚本要在一个目录
# /usr/local/mysql-5.7.29-linux-glibc2.12-x86_64/bin/mysql -uroot -p <passwd>	#登录 mysql

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz

. /etc/init.d/functions 
SRC_DIR=`pwd`
MYSQL='mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz'
COLOR="echo -e \\033[01;31m"
END='\033[0m'
MYSQL_ROOT_PASSWORD=123456

check (){
cd  $SRC_DIR
if [ !  -e $MYSQL ];then
        $COLOR"缺少${MYSQL}文件"$END
        $COLOR"请将相关软件放在${SRC_DIR}目录下"$END
        exit
elif [ -e /usr/local/mysql ];then
        action "数据库已存在,安装失败" false
        exit
else
    return
fi
} 

install_mysql(){
    $COLOR"开始安装MySQL数据库..."$END
     yum  -y -q install libaio numactl-libs   libaio &> /dev/null
    cd $SRC_DIR
    tar xf $MYSQL -C /usr/local/
    MYSQL_DIR=`echo $MYSQL| sed -nr 's/^(.*[0-9]).*/\1/p'`
    ln -s  /usr/local/$MYSQL_DIR /usr/local/mysql
    chown -R  root.root /usr/local/mysql/
    id mysql &> /dev/null || { useradd -s /sbin/nologin -r  mysql ; action "创建mysql用户"; }

    echo 'PATH=/usr/local/mysql/bin/:$PATH' > /etc/profile.d/mysql.sh
    .  /etc/profile.d/mysql.sh
    cat > /etc/my.cnf <<-EOF
[mysqld]
server-id=1
log-bin
datadir=/data/mysql
socket=/data/mysql/mysql.sock                                                                                                   
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
EOF
    mysqld --initialize --user=mysql --datadir=/data/mysql 
    cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld
    chkconfig --add mysqld
    chkconfig mysqld on
    service mysqld start
    [ $? -ne 0 ] && { $COLOR"数据库启动失败,退出!"$END;exit; }
    MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}' /data/mysql/mysql.log`
    mysqladmin  -uroot -p$MYSQL_OLDPASSWORD password $MYSQL_ROOT_PASSWORD &>/dev/null
    action "数据库安装完成" 
}

check

install_mysql
  • 安装完后手动创建软连接
ln -s /usr/local/mysql/bin/mysql /usr/local/sbin
  • 登陆mysql
mysql -u用户 -p密码

二、使用MySQL

1.查看数据库信息

SHOW DATABASES

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |               
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

#大部分SQL操作命令必须以 ;结尾

2.查看数据库中的表信息

USE 数据库名       //切换数据库
SHOW TABLES

mysql> use 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
mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
......

3.显示数据表的结构(字段)

DESCRIBE [数据库名] 表名

mysql> describe user;			//也可以使用 desc user
+------------------------+-----------------------------------+------+-----+---------------------
--+-------+| Field                  | Type                              | Null | Key | Default             
  | Extra |+------------------------+-----------------------------------+------+-----+---------------------
--+-------+| Host                   | char(60)                          | NO   | PRI |                     
  |       || User                   | char(32)                          | NO   | PRI |                     
  |       || Select_priv            | enum('N','Y')                     | NO   |     | N                   
  |       || Insert_priv            | enum('N','Y')                     | NO   |     | N    



Field:字段名称
type:数据类型
Null :是否允许为空
Key :主键
Type:数据类型
Null :是否允许为空key :主键
Default :默认值
Extra :扩展属性,例如:标志符列(标识了种子,增量/步长)1 2
id:1 3 5 7

4.常用的数据类型

int:整型						用于定义整数类型的数据
float:单精度浮点4字节32位		准确表示到小数点后六位		
double:双精度浮点8字节64char:固定长度的字符类型		用于定义字符类型数据。
varchar:可变长度的字符类型		
text:文本
image:图片
decimal(5,2)5个有效长度数字,小数点后面有2位		指定长度数组
#Char如果存入数据的实际长度比指定长度要小,会补空格至指定长度,
#如果存入的数据的实际长度大于指定长度,低版本会被截取,高版本会报错

三、SQL语句概述

1.SQL语言

  • Structured Query Language的缩写,即结构化查询语言
  • 关系型数据库的标准语言
  • 用于维护管理数据库
    包括数据查询、数据更新、访问控制、对象管理等功能

2.SQL分类

  • DDL:数据定义语言,用于创建数据库对象,如库、表、索引等
  • DML:数据操纵语言,用于对表中的数据进行管理,用来插入、删除和修改数据库中的数据
  • DQL:数据查询语言,用于从数据表中查找符合条件的数据记录
  • DCL:数据控制语言,用于设置或者更改数据库用户或角色权限(数据控制语句,用于控制不通数据段直接的许可和访问级别的语句,这些语句定义了数据库、表、字段、用户的访问权限和安全级别,如COMMIT、ROLLBACK、GRANT、REVOKE)

四、创建及删除库和表

  • DDL语句可用于创建数据库对象,如库、表、索引等

1.使用DDL语句新建库、表

####创建数据库####
CREATE DATABASE 数据库名

#新创建后的数据库是空的,其中不包含任何表
#在 /usr/local/mysql/data 目录下会自动生成一个与新建的库名相同的文件夹

####创建数据表####
CREATE TABLE 表名(字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);
#主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键

####例:
CREATE DATABASE test;		//创建test数据库
Query OK, 1 row affected (0.00 sec)

USE test;					//切换到test数据库
Database changed

mysql> CREATE TABLE test1 (id int NOT NULL,name char(10) NOT NULL,score decimal(5,2),passwd char(48) DEFAULT'', PRIMARY KEY (id));
Query OK, 0 rows affected (0.04 sec)
//创建test1 数据表 	
		
mysql> desc test1;		//显示数据表的结构
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| id     | int(11)      | NO   | PRI | NULL    |       |
| name   | char(10)     | NO   |     | NULL    |       |
| score  | decimal(5,2) | YES  |     | NULL    |       |
| passwd | char(48)     | YES  |     |         |       |
+--------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

#id int NOT NULL:id 不能为空值
#name char(10) NOT NULL:name 字符串长度为10字节,且不为空值
#score decimal(5,2):“2”表示小数部分的位数,5”指的是整数部分加小数部分的总长度
#passwd char(48) DEFAULT'':定义密码48个字节,默认为空	
#PRIMARY KEY (id):指定主键为id

2.使用DDL语句删除库、表

####删除指定的数据表####
DROP TABLE 表名
#例:
mysql> drop table test1;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables 			//查看表

####如不用USE进入库中,则需加上数据库名####
DROP TABLE [数据库名.] 表名;
#例:
mysql> drop tables test.test1;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables

####删除指定的数据库####
DROP DATABASE 数据库名;
#例:
mysql> drop database test;
Query OK, 0 rows affected (0.01 sec)
mysql> show databases;		//查看库


五、管理表中的数据记录

1.向数据表中插入新的数据记录

#格式:
INSERT INTO 表名(字段1,字段2[,...]) VALUES (字段1的值,字段2的值,...);

#例:
mysql> create database zone;		//先创建一个库 zone
mysql> use zone						//切换到zone
create table dsj (id int not null,name char(10) not null,sex char(1),primary key (id)); 
Query OK, 0 rows affected (0.04 sec)
//创建 dsj 表

mysql> INSERT INTO dsj (id,name,score,passwd) values(1,'zhangsan',70.5,PASSWORD('123456'));
Query OK, 1 row affected, 1 warning (0.00 sec
//向dsj中插入新的数据记录

2.查询数据记录

#格式:
SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 条件表达式];

例:
#查询 表dsj 中数据记录
mysql> select * from dsj;	
+----+----------+-------+-------------------------------------------+
| id | name     | score | passwd                                    |
+----+----------+-------+-------------------------------------------+
|  1 | zhangsan | 70.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+----+----------+-------+-------------------------------------------+
1 row in set (0.00 sec)

#查询dsj中 id=1 的数据		
mysql> select name from dsj where id=1;	
+----------+
| name     |
+----------+
| zhangsan |
+----------+
1 row in set (0.01 sec)

select * from dsj limit 2;     #只显示头2行
select * from dsj limit 2,3;   #显示第2行后的前3行

3.修改、更新数据表中的数据记录

#格式:
UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];

例:
insert into dsj (id,name) values(2,'lisi');		//插入新的数据
insert into dsj (id,name) values(3,'zhangsan');
select * from dsj;		//查询dsj中所有数据

UPDATE dsj SET passwd=PASSWORD('') WHERE name='zhangsan';	//更新,修改数据
UPDATE dsj SET name='lisi',passwd='123' WHERE id=2;
mysql> select *from dsj;
+----+----------+-------+--------+
| id | name     | score | passwd |
+----+----------+-------+--------+
|  1 | zhangsan | 70.50 |        |
|  2 | lisi     |  NULL | 123    |
+----+----------+-------+--------+
2 rows in set (0.00 sec)

4.在数据表中删除指定的数据记录

#格式
DELETE FROM 表名 [WHERE 条件表达式];

例:
mysql> delete from dsj where id=1;
mysql> select * from dsj;
+----+------+-------+--------+
| id | name | score | passwd |
+----+------+-------+--------+
|  2 | lisi |  NULL | 123    |
+----+------+-------+--------+
1 row in set (0.00 sec)

5.修改表名和表结构

  1. 修改表名
#格式
ALTER TABLE 旧表名 RENAME 新表名;

例:
alter table dsj rename dlh;		//修改表名dsj为dlh
show tables;
select * from dlh;
  1. 扩展表结构(增加字段)
#格式:
ALTER TABLE 表名 ADD address varchar(50) default '地址不详';
#default ‘地址不详’:表示此字段设置默认值 地址不详;可与 NOT NULL 配合使用

例:
alter table dlh add address varchar(50) default '地址不详';

  1. 修改字段(列)名,添加唯一键
ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [unique key];

#unique key:唯一键(特性:唯一,但可以为空,空值只允许出现一次)
#Primary key:唯一且非空(主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。)

例:
alter table dlh change name student_name varchar(20) unique key;
select * from dlh;

  1. 删除字段
ALTER TABLE 表名 DROP 字段名;

例:
alter table dlh drop address;

6.案例拓展

例:
use zone;
create table if not exists info (
id int(4) zerofill primary key auto_increment,     #指定主键的第二种方式
name varchar(10) not null,
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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-23 12:34:35  更:2021-10-23 12:35:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:08:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码