数据库 分两大类: 关系型数据 SQL 非关系型数据库 NoSQL
关系型数据库典型代表:MySQL MariaDB PostgreSQL(pgsql) Oracle SQL Server DB2
国产数据库:阿里云 RDB 华为 高斯 阿里 Oceanbase 腾讯 TDBA
SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,数据库管理系统应充分利用SQL语言提高计算机应用系统的工作质量与效率。SQL语言不仅能独立应用于终端,还可以作为子语言为其他程序设计提供有效助力,该程序应用中,SQL可与其他程序语言一起优化程序功能,进而为用户提供更多更全面的信息。
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。
NoSQL,泛指非关系型的数据库。NoSQL数据库的产生是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题
NoSQL有如下优点:易扩展,NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间也在架构的层面上带来了可扩展的能力。大数据量,高性能,NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。
- yum -y install ncurses ncurses-devel bison cmake
- # 安装MySQL环境依赖包
-
- useradd -M -s /sbin/nologin mysql
- # 创建程序用户MySQL
-
- 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
- # 用cmake设置安装路径,模块添加、环境变量设置
-
- make -j2 && make install
-
- chown -R mysql:mysql /usr/local/mysql/
- chown mysql:mysql /etc/my.cnf
- # 更改mysql安装目录和配置文件的属主属组
-
- echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
- source /etc/profile
- # 设置环境变量,使其可以使用tab补全
-
- cd /usr/local/mysql/bin/
-
- ./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/
- systemctl daemon-reload
- systemctl start mysqld.service
- systemctl enable mysqld
- # 添加mysqld系统服务
-
- mysqladmin -u root -p password "abc123"
- # 修改mysql的登录密码,给root账号设置密码为abc123
- # 他会先让你输入原来的密码,按下回车即可
-
- mysql -u root -pabc123
- # 以root身份登录mysql数据库
MySQL由4个部分组成:数据库,数据表,行(记录),列(字段)
数据库:一个仓库,里面有多个数据表
数据表:含多行多列
行(记录):用来描述一个对象的信息
列(字段):用来描述对象的一个属性
int :整型 无符号[0,2^32-1],有符号[-2^31,2^31-1]
float :单精度浮点 4字节32位
double :双精度浮点 8字节64位
char :固定长度的字符类型
varchar :可变长度的字符类型
text :文本
image :图片
decimal(5,2) :5个有效长度数字,小数点后面有2位
- SHOW DATABASES;
- # 在MySQL中不区分大小写,分号 ; 表示结束
- use class1
- # 进入 class1 库
-
- SHOW TABLES;
- # 查看库里所有表
- desc class1.student1
- # 在库中所以不写库名
- # desc写全为describe
SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能
SQL语句分类:
DDL:数据定义语言,用于创建数据库对象,like 库、表、索引等
DML:数据操纵语言,用于对表中的数据进行管理
DQL:数据查询语言,用于从数据表中查找符合条件的数据记录
DCL:数据控制语言,用于设置或者更改数据库用户或角色权限
- create database class1;
- # 建立新的数据库class1
-
- create table class1.student1 (id int,name varchar(10) not null,sex char,age char,address varchar(20) default'地址不详',primary key (id));
- # 创建表 student1 并设置表的字段
- # not null 不能为空
- # primary key (ip) 指定ip为主链(不能重复)
- # default '地址不详' 未指定参数时,显示'地址不详'
- drop database class1;
- drop table student1;
- # 删除库 删除表
- select * from student1;
- # 查看表内容
-
- insert into student1 (id,name,sex,age,address) values (3,'张五','男',24,'江苏省南京市');
- # 添加student1表的内容
- select name from student1 where address='江苏省南京市';
- # 显示表中address为江苏省南京市的name
- select * from student1 limit 2;
- # 显示前2行
-
- select * from student1 limit 1,2;
- # 显示1行后的2行,即2到3行
- update student1 age=18 where sex='女';
- # 更新女性的年龄为18
- delete from student1 where id=4;
- # 删除id=4 的这一行
- alter table student1 rename student;
- # 修改表名
- alter table student add 学历 varchar(20);
- # 给student表添加一列 学历
- alter table student drop 学历;
- # 移除学历那一列
- create table student1 like student;
- #通过 LIKE 方法,复制 student 表结构生成 student1 表
- truncate table student1;
- # 清空表
- create temporary table student2 (id int,name varchar(20),age char(10));
- # 创建一个临时表 临时表会在连接退出后被销毁
- alter table profession add constraint PK_pid primary key (pid);
- # 指定主键
-
- alter table student12 add constraint FK_pro foreign key (proid) references profession (pid);
- # 指定外键
- delete from profession where pid=1;
- # 需要先删除从表中的外键,否则无法删除
- delete from student where proid=1;
- delete from profession where pid=1;
CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];
- CREATE USER 'user1'@'localhost' IDENTIFIED BY '123456';
- # 新建用户user1 仅主机登录 密码123456
- select user();
- # 查看当前用户信息
- RENAME USER 'user1'@'localhost' TO 'user2'@'localhost';
- # 重命名用户
- DROP USER 'user2'@'localhost';
- # 删除用户
- SET PASSWORD = PASSWORD('abc123');
- # 修改当前登录用户密码
- SET PASSWORD FOR 'user'@'localhost' = PASSWORD('abc123');
- # 修改其他用户密码
- vim /etc/my.cnf
- # 修改 /etc/my.cnf 配置文件,不使用密码直接登录到 mysql
-
- [mysqld]
- skip-grant-tables
- # 添加,使登录mysql不使用授权表
-
- systemctl restart mysqld
- UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('abc123') where user='root';
- # 使用 update 修改 root 密码,刷新数据库
-
- FLUSH PRIVILEGES;
- quit
注意:最后再把 /etc/my.cnf 配置文件里的 skip-grant-tables 删除,并重启 mysql 服务。
- GRANT select ON kgc.* TO 'zhangsan'@'localhost' IDENTIFIED BY '123456';
- # 允许用户 zhangsan 在本地查询 kgc 数据库中 所有表的数据记录,但禁止查询其他数据库中的表的记录。
-
- GRANT ALL [PRIVILEGES] ON *.* TO 'lisi'@'%' IDENTIFIED BY '123456';
- # 允许用户 lisi 在所有终端远程连接 mysql ,并拥有所有权限。
-
- flush privileges;
- quit
- SHOW GRANTS FOR 'lisi'@'%';
- # 查看lisi的权限
- REVOKE ALL ON *.* FROM 'lisi'@'%';
- # 回收权限