建设微信网站,软件技术专业就业方向及前景,目前最好的免费网站,优秀网页设计作品文字分析一、数据库
1.1 数据库的基本概念
数据库#xff08;database#xff09;是用来组织、存储和管理数据的仓库
数据库管理系统#xff08;DBMS#xff09;#xff1a;是实现对数据有效组织#xff0c;管理和存取的系统软件。
数据的建立和维护功能#xff0c;数据定义… 一、数据库
1.1 数据库的基本概念
数据库database是用来组织、存储和管理数据的仓库
数据库管理系统DBMS是实现对数据有效组织管理和存取的系统软件。
数据的建立和维护功能数据定义功能数据操纵功能数据库的运行管理功能通信功能
数据库系统是一个人机系统由硬件os数据库DBMS 应用软件和数据库用户组成。
用户可以通过DBMS 或则 应用程序来操作数据库 。
1.2 数据库的分类
随着时代的发展当今数据库可分为两大类关系数据库SQL和非关系数据库NO SQL两大类 。
关系型数据库 关系数据库的存储结构是二维表格 表是有行和列。行称为记录是用来描述一个对象的信息。列称为字段是用来描述对象的一个属性。
关系性数据库常见的有MYSQL OracleSQL-ServerMariaDB postgreSQL
非关系型数据库
非关系型的数据库有以下常见的几个种类 缓存性数据库 redis Memcache 索引型数据库 ESElasttic search 时序型数据库Prometheus 文档型数据库MongoDB 非关系型数据库是键对值的存储结构key —————— VALUE
优点可高并发读写对海量数据依旧保持着高效率的存储和访问具有高扩展性和高可用性
二 、编译安装MySQL
将安装mysql 所需软件包传到/opt目录下
mysql-boost-5.7.44.tar.gz
安装环境依赖包
yum -y install \
gcc \
gcc-c \
ncurses \ #字符终端下图形互动功能的动态库
ncurses-devel \ #ncurses开发包
bison \ #语法分析器
cmake #mysql需要用cmake编译安装
配置软件模块
cd /opt/mysql-5.7.44/
cmake \
-DCMAKE_INSTALL_PREFIX/usr/local/mysql \ #指定mysql的安装路径
-DMYSQL_UNIX_ADDR/usr/local/mysql/mysql.sock \ #指定mysql进程监听套接字文件数据库连接文件的存储路径
-DSYSCONFDIR/etc \ #指定配置文件的存储路径
-DSYSTEMD_PID_DIR/usr/local/mysql \ #指定进程文件的存储路径
-DDEFAULT_CHARSETutf8 \ #指定默认使用的字符集编码如 utf8
-DDEFAULT_COLLATIONutf8_general_ci \ #指定默认使用的字符集校对规则
-DWITH_EXTRA_CHARSETSall \ #指定支持其他字符集编码
-DWITH_INNOBASE_STORAGE_ENGINE1 \ #安装INNOBASE存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE1 \ #安装ARCHIVE存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE1 \ #安装BLACKHOLE存储引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE1 \ #安装FEDERATED存储引擎
-DMYSQL_DATADIR/usr/local/mysql/data \ #指定数据库文件的存储路径
-DWITH_BOOST/usr/local/boost \ #指定boost的路径若使用mysql-boost集成包安装则-DWITH_BOOSTboost
-DWITH_SYSTEMD1 #生成便于systemctl管理的文件存储引擎选项
MYISAMMERGEMEMORY和CSV引擎是默认编译到服务器中并不需要明确地安装。
静态编译一个存储引擎到服务器使用-DWITH_engine_STORAGE_ENGINE 1
可用的存储引擎值有ARCHIVE, BLACKHOLE, EXAMPLE, FEDERATED, INNOBASE (InnoDB), PARTITION (partitioning support), 和PERFSCHEMA (Performance Schema)
编译及安装
make -j4 make install创建mysql用户
useradd -M -s /sbin/nologin mysql
修改mysql 配置文件
vim /etc/my.cnf #删除原配置项再重新添加下面内容
[client] #客户端设置
port 3306
socket /usr/local/mysql/mysql.sock [mysql] #服务端设置
port 3306
socket /usr/local/mysql/mysql.sock
auto-rehash #开启自动补全功能[mysqld] #服务全局设置
user mysql #设置管理用户
basedir/usr/local/mysql #指定数据库的安装目录
datadir/usr/local/mysql/data #指定数据库文件的存储路径
port 3306 #指定端口
character-set-serverutf8 #设置服务器字符集编码格式为utf8
pid-file /usr/local/mysql/mysqld.pid #指定pid 进程文件路径
socket/usr/local/mysql/mysql.sock #指定数据库连接文件
bind-address 0.0.0.0 #设置监听地址0.0.0.0代表允许所有如允许多个IP需空格隔开
skip-name-resolve #禁止域名解析包括主机名所以授权的时候要使用 IP 地址
max_connections4096 #设置mysql的最大连接数
default-storage-engineINNODB #指定默认存储引擎
max_allowed_packet32M #设置在网络传输中一次消息传输量的最大值。系统默认值为 1MB最大值是 1GB必须设置 1024 的倍数。
server-id 1 #指定服务ID号sql_modeNO_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----------------------------------------------------------------------------------------------------------sql_mode常用值如下: NO_ENGINE_SUBSTITUTION 如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常 STRICT_TRANS_TABLES 在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制 NO_AUTO_CREATE_USER 禁止GRANT创建密码为空的用户 NO_AUTO_VALUE_ON_ZERO mysql中的自增长列可以从0开始。默认情况下自增长列是从1开始的如果你插入值为0的数据会报错 NO_ZERO_IN_DATE 不允许日期和月份为零 NO_ZERO_DATE mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告 ERROR_FOR_DIVISION_BY_ZERO 在INSERT或UPDATE过程中如果数据被零除则产生错误而非警告。默认情况下数据被零除时MySQL返回NULL PIPES_AS_CONCAT 将||视为字符串的连接操作符而非或运算符这和Oracle数据库是一样的也和字符串的拼接函数Concat相类似 ANSI_QUOTES 启用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 \ #生成初始化密码为空
--usermysql \ #指定管理用户
--basedir/usr/local/mysql \ #指定数据库的安装目录
--datadir/usr/local/mysql/data #指定数据库文件的存储路径
添加mysqld系统服务
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ #用于systemctl服务管理
systemctl daemon-reload #刷新识别
systemctl start mysqld.service #开启服务
systemctl enable mysqld #开机自启动
netstat -anpt | grep 3306 #查看端口修改mysql 的登录密码
mysqladmin -u root password abc123 #给root账号设置密码为abc123原始密码为空
授权远程登录
mysql -u root -pabc123
grant all privileges on *.* to root% identified by abc123;
#授予root用户可以在所有终端远程登录使用的密码是abc123并对所有数据库和所有表有操作权限show databases; #查看当前已有的数据库
三、mysql的数据类型
3.1 常用的数据库类型
类型含义init整型 无符号[0,2^32-1]有符号[-2^31,2^31-1]float单精度浮点 4字节32位double双精度浮点 8字节64位char固定长度的字符类型varchar可变长度的字符类型text文本image图片decimal(5,2)5个有效长度数字小数点后面有2位 3.2 char与varchar的区别
值CHAR(4)存储需求VARCHAR(4)存储需求 4个字节1个字节abab 4个字节ab 3个字节abcdabcd4个字节abcd5个字节abcdefghabcd4个字节abcd5个字节 CHAR和VARCHAR类型类似但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
字节大小 char无论是否有值都会占用固定长度的字节大小保存在磁盘上都是4字节。 varchar在保存字符时默认会加一个隐藏的结束符因此结束符会多算一个字节。
优劣比较 varchar比char节省磁盘空间。 但varchar类型的数据读写速度比char慢因为char是连续的磁盘空间而varchar在多次增删改查中会产生一些磁盘空间碎片
四、mysql的数据库结构
4.1 查看库信息
#查看数据库中的所有库mysql show databases;
4.2 查看表信息
方式一先切换库再查看
#格式use 库名
mysql use ckx;mysql show tables; 方式二直接查看 4.3 查看表的字段结构
方式一先切换库在查看指定表的字段 USE 数据库名; #切换库SHOW TABLES; #查看库中的表DESCRIBE 表名; #查看指定表的结构 DESCRIBE 可以缩写为DESC
纵向查看方式
desc 表名\G; 方式二直接查看表结构 DESCRIBE [数据库名.]表名;可缩写成DESC 数据库名.表名; 五、SQL语句
5.1 SQL中的名词介绍
数据库database表table行row 列column索引index视图view存储过程procedure存储函数function触发器trigger事件调度器event scheduler任务计划用户user权限privilege
5.2 SQL语言规范
在数据库系统中SQL 语句不区分大小写建议用大写。SQL语句可单行或多行书写默认以 ; 结尾。关键词不能跨多行或简写。用空格和TAB 缩进来提高语句的可读性。子句通常位于独立行便于编辑提高可读性。
数据库对象和命名 数据库的组件(对象) 数据库、表、索引、视图、用户、存储过程、函数、触发器、事件调度器等。 命名规则
必须以字母开头后续可以包括字母数字和三个特殊字符# _ $不要使用MySQL的保留字如table、select、show、databases。数据库名、表名、用户名区分大小 5.3 SQL语言分类
DDL数据定义语言用于创建数据库对象如库、表、索引等 DML数据操纵语言用于对表中的数据进行管理 DQL数据查询语言用于从数据表中查找符合条件的数据记录 DCL数据控制语言用于设置或者更改数据库用户或角色权限
六、Mysql数据库基本的增删改查命令
6.1 创建数据库及数据库表
CREATE DATABASE 数据库名; CREATE TABLE 表名(字段1 数据类型,字段2 数据类型[,...] [,PRIMARY KEY (主键名)]); 主键共同点字段的值都是唯一的不允许有重复值。
条件判断创建数据表
create table if not exists 表名 (字段1 数据类型 约束1 约束2...................字段n 数据类型 约束 );
6.2 插入数据
方法一指定字段插入数据 #为指定字段插入值INSERT INTO 表名(字段1,字段2[,...]) VALUES (字段1的值字段2的值...); #注意字段的属性not null则必须为该字段插入值
此外只要是指定的字段不是主键或则为设置“非空”也可以不插入数据 方法二直接按照字段顺序插入
为所有字段插入值insert into 表名 values (所有字段的值); #每个字段值用逗号相隔 6.3 查找数据库表中的数据 SELECT * FROM 表名; #查询表中所有记录#按条件查找数据记录且只显示指定字段的值SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 条件表达式];#mysql的分页语句select * from 表名 limit 2; select * from 表名 limit 2,3; #显示第2行后的前3行即显示第3~5行 6.4 修改表中的数据
修改时建议指定的条件表达式为主键主键具有唯一性避免错改
UPDATE 表名 SET 字段名1字段值1[,字段名2字段值2] [WHERE 条件表达式];
6.5 删除表中的数据 DELETE FROM 表名 [WHERE 条件表达式]; #删除一定要加条件不然会删除整个表 6.6 删除指定的表
DROP TABLE 数据库名.表名;
或
USE 库名;
DROP TABLE 表名; 6.7 删除指定的库
DROP DATABASE 数据库名; 七、表结构的管理
7.1 修改表名 ALTER TABLE 旧表名 RENAME 新表名 7.2 扩展表结构增加字段 ALTER TABLE 表名 ADD 字段名 数据类型; 7.3 修改字段名添加唯一健 change ALTER TABLE 表名 CHANGE 旧字段名 新字段名 [数据类型] [约束]; 7.4 删除字段 drop ALTER TABLE 表名 DROP 字段名; 7.5 复制表结构
方式一创建新表导入数据 create table 新表名 like 旧表名; #通过LIKE方法复制旧表的结构生成新表insert into 新表名 select * from 旧表名; #再将旧表数据导入新表 方式二复制表 create table 新表名 (select * from 旧表名); #不能够保证克隆的表保证原有的结构 7.6 临时表的创建
CREATE TEMPORARY TABLE 表名(字段1 数据类型,字段2 数据类型[, ...] [, PRIMARY KEY (主键名)]);
创建方式与创建表完全一致最大的区别是临时表只在当前的数据库连接生效当数据库连接断开或重新连接终端时该临时表均失效无法查看。
7.7 清除表的两种方式比较
方式一delete清空 delete from 表名;
方式二truncate清空 truncate table 表名;
两者区别
1delete清空属于按照行清空一行一行进行效率低速度慢对于表数据较多的情况 truncate相当于删除表数据保留表结构重新创建一个与原表结构相同的表 。
2当数据表中有自增型约束字段时delete清除表数据后在插入数据时自增字段的数值会接着被删除表数据的最后一个自增数计数。eg被删除表数据最后一行id自增为10再创建时该id从11开始。truncate清空后自增型字段会从1开始计数。 八、Mysql中常见的约束
主键约束primary key PK
主键具有唯一性不可重复性不可为空的特点。一般用于删除查询时条件语句的条件。主键在一张表中只能有一个
自增长约束auto_increment
该约束针对于整数类型的字段当插入该字段数据为空时系统会根据上一个数自动加1
非空约束not null
该约束到字段后该字段中的数据插入不能为空
唯一性约束unique
该约束添加后该字段的数据每行均为唯一的不可重复。唯一性约束可以在一张表中有多个
默认值约束default
默认值约束为该字段设置初始值如果没有为该字段插入数据就为初始值
零填充约束zerofill
零填充针对整数型的字段例如int默认为11位除了填写的数字以外其他用零填充 外键约束foreign keyFK
外键约束至少将两张表进行关联。我们将这两张表分为主表和从表主表的主键作为从表的外键。增加数据时先进行主表操作如果增加的数据外键值在主表中没有就要先在主表中添加。
若进行删除操作就要先进行从表操作只要将从表有关主表主键值全部清除后才能清除该主表的主键值。 总结 查看数据库和表 show databases; use 库名; show tables; desc 表名; desc 表名\G show table 表名; 创建及删除数据库和表 create database 库名; create table 表名(字段1 数据类型 [属性], 字段2 .....); DROP TABLE [数据库名.]表名; DROP DATABASE 数据库名; 表数据的增删改查 insert into 表名 values (所有字段的值); insert into 表名 (指定字段名称) values(字段的值); delete from 表名 [where ...]; update 表名 set 字段值[, 字段2....] [where ...]; select 字段1[,字段2....] from 表名 [where ...]; select * from 表名; 主键 主键primary key 特点具有唯一性和不可复用性。通常作为条件表达式用于查询删除修改的条件