14 数据库知识

数据库

  • 数据库发展史 :
阶段header 2
萌芽阶段文件系统 : 使用磁盘文件来存储数据
初级阶段第一代数据库 : 网状模型、层次模型的数据库
中级阶段第二代数据库 : 关系型数据库和结构化查询语言
高级阶段新一代数据库 : “关系-对象”型数据库
  • 关系型数据库名词解释 :
名词解释
关系关系就是二维表。表中的行、列次序并不重要
行row表中的每一行,又称为一条记录
列column表中的每一列,称为属性,字段
主键(Primary key)用于惟一确定一个记录的字段
域domain属性的取值范围,如,性别只能是‘男’和‘女’两个
  • 事务transaction:多个操作被当作一个整体对待
  • 具有如下四个特性 ACID:
    • A: 原子性
    • C:一致性
    • I: 隔离性
    • D:持久性
  • 简易数据规划流程 :
    1. 第一阶段:
      • 收集数据,得到字段
      • 收集必要且完整的数据项
      • 转换成数据表的字段
    2. 第二阶段:
      • 把字段分类,归入表,建立表的关联
      • 关联:表和表间的关系
      • 分割数据表并建立关联的优点
      • 节省空间
      • 减少输入错误
      • 方便数据修改
    3. 第三阶段:
      • 规范化数据库
SQL概念 :
  • SQL: Structure Query Language 结构化查询语言
    • 数据存储协议:应用层协议,C/S
    • S:server, 监听于套接字,接收并处理客户端的应用请求
    • C:Client
  • 客户端程序接口 : CLI/GUI
  • 应用编程接口
    • ODBC:Open Database Connectivity
    • JDBC:Java Data Base Connectivity
MySQL
  • RPM包安装MySQL
    • CentOS 7:安装光盘直接提供
    • mariadb-server 服务器包
    • mariadb 客户端工具包
  • 提高安全性 : mysql_secure_installation
    • 设置数据库管理员root口令
    • 禁止root远程登录
    • 删除anonymous用户帐号
    • 删除test数据库
MySQL
  • 客户端程序:
    • mysql: 交互式的CLI工具
    • mysqldump:备份工具,基于mysql协议向mysqld发起查询请求,并将查得的所有数据转换成insert等写操作语句保存文本文件中
    • mysqladmin:基于mysql协议管理mysqld
    • mysqlimport:数据导入工具
  • MyISAM存储引擎的管理工具:
    • myisamchk:检查MyISAM库
    • myisampack:打包MyISAM表,只读
  • 服务器端程序

    • mysqld_safe
    • mysqld
    • mysqld_multi:多实例
    • 示例:mysqld_multi –example
  • mysql用户账号由两部分组成:’USERNAME’@’HOST’

  • HOST限制此用户可通过哪些远程主机连接mysql服务器
  • 支持使用通配符:
    • % 匹配任意长度的任意字符
    • 172.16.0.0/255.255.0.0 或 172.16.%.%
    • _ 匹配任意单个字符
mysql使用模式:
  • 交互式模式:
    • 客户端命令:
      • \h, help
      • \u,use
      • \s,status
      • !,system
    • 服务器端命令:
      • SQL, 需要语句结束符;
  • 脚本模式,与数据重定向经常配合使用:

    • mysql –uUSERNAME -pPASSWORD < /path/somefile.sql
    • mysql> source /path/from/somefile.sql
  • mysql客户端可用选项 :

选项解释
-A, –no-auto-rehash禁止补全
-u, –user=用户名,默认为root
-h, –host=服务器主机,默认为localhost
-p, –passowrd=用户密码,建议使用-p,默认为空密码
-P, –port=服务器端口
-S, –socket=指定连接socket文件路径
-D, –database=指定默认数据库
-C, –compress启用压缩
-e“SQL“ 执行SQL命令
-V, –version显示版本
-v –verbose显示详细信息
–print-defaults获取程序默认使用的配置

- 服务器监听的两种socket地址:
1. ip socket: 监听在tcp的3306端口,支持远程通信
2. unix sock: 监听在sock文件上,仅支持本机通信
如:/var/lib/mysql/mysql.sock)
- host为localhost或127.0.0.1时,自动使用unix sock

服务器端配置 :

  1. 命令行选项:
  2. 配置文件:类ini格式 :
    • 集中式的配置,能够为mysql的各应用程序提供配置信息
    • [mysqld]
    • [mysqld_safe]
    • [mysqld_multi]
    • [mysql]
    • [mysqldump]
    • [server]
    • [client]
    • 格式:parameter = value
    • 说明:
    • _和- 相同
    • 1,ON,TRUE意义相同
    • 0,OFF,FALSE意义相同
    • 配置文件优先级:后面覆盖前面的配置文件,顺序如下:
    • /etc/my.cnf Global选项
    • /etc/mysql/my.cnf Global选项
    • SYSCONFDIR/my.cnf Global选项
    • $MYSQL_HOME/my.cnf Server-specific 选项
    • –defaults-extra-file= path
    • ~/.my.cnf User-specific 选项
    • [mysqld]
    • skip-networking=1 关闭网络连接,只侦听本地客户端, 所有和服务器的交互都通过一个socket实现,socket的配置存放在/var/lib/mysql/mysql.sock) 可在/etc/my.cnf修改
    • prompt=(\u@\h) [\d]>\_ mysql交互界面显示当前用户 主机与数据库
关系型数据库的常见组件 :
  • 据库:database
  • 表:table
    • 行:row
    • 列:column
  • 索引:index
  • 视图:view
  • 用户:user
  • 权限:privilege
  • 存储过程:procedure,无返回值
  • 存储函数:function,有返回值
  • 触发器:trigger
  • 事件调度器:event scheduler,任务计划
数据库操作
  • 创建数据库:
CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME';
CHARACTER SET 'character set name'
COLLATE 'collate name'
  • 删除数据库 :
DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME';
  • 查看支持所有字符集:SHOW CHARACTER SET;
  • 查看支持所有排序规则:SHOW COLLATION;
  • 获取命令使用帮助:mysql> HELP KEYWORD;
  • 查看数据库列表:mysql> SHOW DATABASES;
  • 创建表:
CREATE TABLE students #创建students表
(id int UNSIGNED NOT NULL PRIMARY KEY,#id列,无符号非空int型,主键
name VARCHAR20NOT NULL,#name列,可变长度字符串(最大20),非空
age tinyint UNSIGNED);#age列,无符号整数0~255

DESC students;#描述students表头信息.

CREATE TABLE students2 
(id int UNSIGNED NOT NULL,
name VARCHAR(20) NOT NULL,
age tinyint UNSIGNED,
PRIMARY KEY(id,name));#以id和name作主键
数据库操作
目的SQL语句
创建数据库CREATE DATABASE|SCHEMA [IF NOT EXISTS] ‘DB_NAME’;
设置字符编码CHARACTER SET ‘character set name’;
设置排序规则COLLATE ‘collate name’;
删除数据库DROP DATABASE|SCHEMA [IF EXISTS] ‘DB_NAME’;
查看支持所有字符集SHOW CHARACTER SET;
查看支持所有排序规则SHOW COLLATION;
获取命令使用帮助HELP KEYWORD;
查看数据库SHOW DATABASES;
查看所有的引擎SHOW ENGINES;
查看表SHOW TABLES [FROM db_name];
查看表结构DESC [db_name.]tb_name;
复制表结构,不含数据CREATE TABLE new_tbl_name LIKE old_tbl_name;
删除表DROP TABLE [IF EXISTS] tb_name;
查看表创建命令SHOW CREATE TABLE tbl_name;
查看表状态SHOW TABLE STATUS LIKE ‘tbl_name’;
查看库中所有表状态SHOW TABLE STATUS FROM db_name;
重命名表ALTER TABLE students RENAME s1;
s1表name列后添加phone列,并指明类型ALTER TABLE s1 ADD phone varchar(11) AFTER name;
设定s1表phone列为int型ALTER TABLE s1 MODIFY phone int;
s1表phone列更名为mobile,并设定为char型ALTER TABLE s1 CHANGE COLUMN phone mobile char(11);
删除s1表的mobile列ALTER TABLE s1 DROP COLUMN mobile;
studenst表添加gender列,枚举类型:可选值为’m’或’f’ALTER TABLE students ADD gender ENUM(‘m’,’f’);
students表id列更名为sid,无符号非空主键int型ALETR TABLE students CHANGE id sid int UNSIGNED NOT NULL PRIMARY KEY;
students表以name列数据增加唯一键ALTER TABLE students ADD UNIQUE KEY(name);
students表以age列数据增加索引ALTER TABLE students ADD INDEX(age);
查看students表的索引SHOW INDEXES FROM students;
studenst表删除age列ALTER TABLE students DROP age;
MySQL用户和权限管理
  • 元数据数据库:mysql
  • 系统授权表:db, host, user,columns_priv, tables_priv, procs_priv, proxies_priv
  • 用户账号:
    • ’USERNAME’@’HOST’:
    • @’HOST’:
    • 主机名:IP地址或Network;
  • 通配符:%, _: 172.16.%.%
  • 创建用户:CREATE USER ‘USERNAME’@’HOST’ [IDENTIFIED BY ‘password’];
  • 用户重命名:RENAME USER old_user_name TO new_user_name;
  • 删除用户:DROP USER ‘USERNAME’@’HOST’;
  • 删除默认的空用户:DROP USER ”@’localhost’;

  • 修改密码:

    • mysql>SET PASSWORD FOR ‘user’@’host’ = PASSWORD(‘password’);
    • mysql>UPDATE mysql.user SET password=PASSWORD(‘password’) WHERE clause;
    • 此方法需要执行下面指令才能生效:
    • mysql> FLUSH PRIVILEGES;
       - 执行Shell命令: mysqladmin -u root –poldpass password ‘newpass’
  • 忘记管理员密码的解决办法:
    1. 使用如下选项启动mysqld进程:–skip-grant-tables –skip-networking
    2. 使用UPDATE命令修改管理员密码
    3. 关闭mysqld进程,移除上述两个选项,重启mysqld
授权
GRANT priv_type [(column_list)],... 
ON [object_type] priv_level 
TO 'user'@'host'
[IDENTIFIED BY 'password'] 
[WITH GRANT OPTION];
  • priv_type: ALL [PRIVILEGES]
  • object_type:TABLE | FUNCTION | PROCEDURE
  • priv_level:
    • .* (所有库)
    • db_name.*
    • db_name.tbl_name
    • tbl_name(当前库的表)
    • db_name.routine_name(指定库的函数,存储过程,触发器)
  • with_option: GRANT OPTION
    • MAX_QUERIES_PER_HOUR count
    • MAX_UPDATES_PER_HOUR count
    • MAX_CONNECTIONS_PER_HOUR count
    • MAX_USER_CONNECTIONS count
  • 示例:
GRANT SELECT (col1), INSERT (col1,col2) 
ON mydb.mytbl 
TO'someuser'@'somehost';
回收授权:
REVOKE priv_type [(column_list)] [, priv_type
[(column_list)]] ... ON [object_type] priv_level FROM user [, user] ...
  • 示例:REVOKE DELETE ON testdb.* FROM ‘testuser’@’%’
MySQL体系结构

这里写图片描述

存储引擎

这里写图片描述

  • MyISAM引擎特点:

    • 不支持事务
    • 表级锁定
    • 读写相互阻塞,写入不能读,读时不能写
    • 只缓存索引
    • 不支持外键约束
    • 不支持聚簇索引
    • 读取数据较快,占用资源较少
    • 不支持MVCC(多版本并发控制机制)高并发
    • 崩溃恢复性较差
    • MySQL5.5.5前默认的数据库引擎
  • InnoDB引擎特点:

    • 支持事务,适合处理大量短期事务
    • 行级锁
    • 读写阻塞与事务隔离级别相关
    • 可缓存数据和索引
    • 支持聚簇索引
    • 崩溃恢复性更好
    • 支持MVCC高并发
    • 从MySQL5.5后支持全文索引
    • 从MySQL5.5.5开始为默认的数据库引擎
  • 关于引擎的常用命令
目的SQL语句
查看mysql支持的存储引擎show engines;
查看当前默认的存储引擎show variables like ‘%storage_engine%’;
查看库中所有表使用的存储引擎Show table status from db_name;
查看库中指定表的存储引擎show table status like ’ tb_name ‘;
查看库中指定表的存储引擎show create table tb_name;
设置表的存储引擎CREATE TABLE tb_name(… ) ENGINE=InnoDB;
设置表的存储引擎ALTER TABLE tb_name ENGINE=InnoDB;

- 设置默认的存储引擎:

vim /etc/my.conf
[mysqld]
default_storage_engine= InnoDB;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值