数据库发展历程:
层次模型-->
网状模型(耦合度高)-->
关系模型(对象-关系模型)
DBMS数据库管理系统
RDBMS关系数据库管理系统
managing storage 存储管理
managing security 安全管理
managing metadata 元数据管理
managing trasactions 事务管理
supporting connectivity 支持扩展
optimizing performance 性能优化
providing back-up and recovery mechanisms 备份和恢复
processing requests for data retreval an modifaction 数据检索和修改
DataBase发展方向:
开发DBA
数据库设计
存储过程,存储函数,触发器(SQL)
管理DBA
软件安装,卸载,升级
数据导入和导出
数据的备份和恢复
用户管理,权限管理
安全管理
架构设计
SQL(Structure query langue)结构化查询语言
内建的语句:
select ,update,drop,update ...
查询语句:select ,update , delate
常见数据库管理系统
大型的:
oracle
sybase
informix
DB2
小型的:
sql server
开源的:
Mysql
postgreSQL-->EnterpriseDB(除了崩溃后恢复不如mysql,其他的性能是相当优越的)
mysql的安装和升级:
mysql是基于线程工作
DML 数据操作语言
DDL 数据定义语言
存储引擎:将逻辑结构转化成物理结构
Mysql版本:
GA (general availability)稳定版本
RC 发行版
beta 测试版
alpha 测试版
mysql的软件包
rpm包:
mysql-client 客户端*
mysql-debuginfo 调试信息
mysql-devel开发库*
mysql-embedded 嵌入式mysql
mysql-ndb-management mysql的集群
mysql-server 服务器的端口,提供mysqld*
mysql-shared 共享工具*
mysql-shared-compat 提供老版本库的
mysql-test 测试组件
Linux上的启动查找配置的次序
/etc/my.cnf-->/etc/mysql/my.cnf-->$MYSQL_HOME/my.cnf-->/path/to/file when default-extra-file=/path/to/file is specifid-->~/.my.cnf
启动查找顺序,如果有冲突以最后找到的为准,如果没冲突就综合考虑
从头到尾都要查询
安装完成以后mysql会自动生成5个帐号,而且密码为空
3个管理员帐号:root@localhost、root@127.0.0.1、root@hostname
2个匿名帐号:''@localhhost、''@hostname
#mysql
>use mysql 使用mysql
>SHOW TABLES; 显示表
>DESC TABLE_NAE;显示表格式
>SELECT Host,User,Password FROM user; 显示表中指定列
>SELECT * FROM user \G; 按照列的方式显示
>DORP DATABASE db_name; 删除数据库
装完mysql的第一步工作是为root设置密码,删除匿名用户,提高安全性
设置密码:
方法1:
#mysqladmin -uroot -hlocalhost password'redhat' 设置密码:-u用户名,-h主机名
方法2:
#mysql
>UPDATE user SET Password=PASSWORD('redhat') WHERE User='root' and Host='127.0.0.1';
只要原密码相同,加密后的密码就一样
>FLUSH PRIVILEGES;通知mysql把修改的内容加载到内存
方法3:
#mysql
>SET PASSWORD FOR 'root'@'host_name'=PASSWORD('new_password');
>FLUSH PRIVILEGES;
删除匿名用户
>DROP USER ''@localhost;
>DROP USER root@'::1';
>DROP USER ''@hostname;
>FLUSH PRIVILEGES;
授权:
>GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'redhat';
>FLUSH PRIVILEGES;
这个时候就可以是window客户端连接进来
mysql AB工具:
mysql
mysqladmin
mysqldump
Options for user:
--user==-u 用户
--password==-p 密码
Options for host:
--protocol
tcp 客户端和服务端不在同一个主机上
socket 客户端和服务端在同一个主机上且是Linux或unix上
pipe mysql-server 在window上
memory mysql-server 在window上
--host==-h 主机
--port
--socket
-D db_name
--database db_name
mysql 的应用:
eg;mysql -uroot -h192.168.1.101 -D mysql -p
>SELECT DATABASE();显示当前默认数据库
>SELECT USER();显示当前默认用户
#cd ~
#vim .my.cnf
[client]
user=root
password=redhat
然后在使用
#mysql 就不用输入密码了,但是你要注意这个文件的权限
#vim test.sql
CREATE DATABASE test;
批处理方法:
方法一:
#mysql -uroot -p < test.sql
方法二:
#mysql
>SOURCE /etc/test.sql;
送到服务器端的要在后面加上“;”
而客户端执行的不需要加
>STATUS
mysql提示符:
-> 命令未执行完
'> 缺少对应的"’”
"> 缺少对应的“””
/*> 缺少对应的注释符号
数据库对象:
表,二维关系
索引
视图
触发器
存储过程
存储函数
事件调度器
游标
用户
物理
文件
存储引擎
插件式的存储引擎
mysql 会记录下命令历史,放在用户家目录下的.mysql_history
开启命令补全
>\#
>rehash
\c 取消命令
\d 定义结束符号
eg:\d // 就是以//结束
\g 忽略默认定义的结束符,直接送到服务器端执行
\G 以列的方式显示
-E or --veri
HELP COMMAND 查看命令帮助
-e
mysql -e "SHOW DATABASE" 直接在shell中执行mysql语句,在脚本中很常用
mysql -e "SELECT User,Host,Password FROM mysql.user;" 如检索某个表
mysqladmin的使用:
mysqladmin [option] command [arg] [command]
#mysqladmin ping 探测服务器是否处于运行状态
#mysqladmin -h 172.16.100.1 ping
#mysqladmin create sampledb 创建数据库
#mysqladmin drop 删除
#mysqladmin debug 调试信息(mysql的数据目录下的)
#mysqladmin extended-status== >SHOW STATUS;
#mysqladmin flush-hosts
#mysqladmin flush-logs
#mysqladmin flush-privileges
#myaqladmin flush-status
#mysqladmin flush-tables 清空表
#mysqladmin flush-thread
#mysqladmin processlist 查看当前用户连接进来,并做什么操作
reload
refresh
shutdown
start-slave 启动从服务器
status 显示全局状态信息
variables
version 显示版本号
status 显示
#mysqladmin status --sleep 3 --count 2
#top -d 2 -n 2 两秒刷新一次,显示两次退出
>show variables like '%datadir%';查看数据文件的目录
mysql图形化工具:
SQLyog
MySQLFront
phpMyAdmin
MySQL Query Browser
MySQL Administrator
MySQL Workbench
mysql开发知识:
>use sampledb;
>CREATE TABLE stus (Name CHAR(18),GENDER CHAR(1));
NO NULL
>SHOW CHARACTER SET; 查看支持字符集
>SHOW COLLATION;查看排序方式
SELECT CURRENT_DATE();
SELECT CURRENT_TIME();
SELECT CURRENT_DATETIME();
CREATE TABLE user (ID UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,Name VARCHAR(100) NO NULL,Gender ENUM('M','F') NO NULL DEFAULT 'M',Age TINYINT UNSIGNED);
INSERT INTO user (Name,Age) values ('luowei',18); 插入
SHOW WARNINGS;查看错误警告
SET sql_mode='ansi'设置sql的模型
SHOW VARIABLES LIKE "%sql_mode%";查看模型
SHOW VARIABLES LIKE '%sql_mode%';
常用的模式:
ansi
ignore_space
strict_all_tables
strict_trans_tables
traditional
mysql变量类型
全局变量:对每一个新建立的会话都有效
会话变量:只对当前会话有效
SHOW VARIABLES
SHOW GLOBAL VARIABLES;显示全局变量
SHOW SESSION VARIABLES; 显示会话变量
LIKE ''
%任意长度的字符串
?匹配一个
SELECT @@global.sql_mod; 明确知道变量名字
修改变量值:
SET sql_mode='TRADITIONAL'
SET GLOBAL sql_mode='TRADITIONAL'
设置的会话变量立即生效,但是只对当前会话有效
设置全局变量不会立即生效,重新登录对所有的有效
大小写:
关键字和函数名不区分大小写,如select
表名,数据库名在window上不区分大小写,在Linux上区分
存储过程和存储函数不区分大小写
触发器区分大小写
mysql的别名区分大小写
database:
CREATE DATABASE db_name; 创建
CREATE DATABASE IF NOT EXISTS mydb; 脚本中常用,如果不存在就创建
CREATE DATABASE CHARACTER SET 'gbk' COLLATE 'gbk_bin' mydb;
SHOW CREATE DATABASE db_name;显示使用什么语句创建的数据库
DROP DATABASE db_name;
DROP DATABASE IF EXISTS db_name; 删除数据库
SHOW WARDINGS;显示警告
ALTER DATABASE db_name COLLATE chartset 修改数据库
tables && Index
key(键),index
候选键
主键 primary key
唯一键 unique key
外键 foreign key 表和表之间用的
范式
SHOW ENGINES;显示系统默认引擎,default是默认的
对于mysql,如果使用外键,就要有支持事务的引擎
索引能加快查询速度,但是对数据库的修改会降低速度
《warn:未完,待续。。。》
作者“IT梦-齐-分享”