DAY 01
1、了解提供数据库服务的软件有哪些
主流:Oracle sql-server mysql DB2
Postgresql Sybase access vf
商业软件:Oracle sql-server DB2
开源软件:mysql Postgresql
服务运行的平台:LINUX 、Windows
跨平台:Oracle DB2 mysql postgresql
既跨平台又开源的软件:mysql
2、数据库服务应用在哪里
购物网站、论坛、银行、证券公司、购票系统
网站论坛通常用mysql
国家机构等通常用Oracle
Mysql+web (LAMP: Linux apache mysql php LNMP:Nginx)
mysql 主要和网站一起用。
3、mysql软件有哪些优点
1)适用于中小规模、关系型数据库管理系统(100M左右、表表之间有联系,非关系型数据库-NoSQLogic)
2)跨平台,支持AIX FreeBSD HP-UX Linux Windows等多种操作系统
3)使用C和C++编写你,支持多种编译器,保证源代码的可移植性(make)
4)为多种编程语言提供API,支持Python Java Perl PHP等脚本语言
广泛应用在中小型的网站 (API 访问程序接口)
关系型数据库系统?(数据存放在数据库里要遵循数据库存储数据的格式)
ER 模型 (实体-关系)模型
Entity-Relationship Model
非关系型数据库 nosql (LDAP)
4、搭建数据库服务器
rpm包: rpm –ivh xxx.rpm -Uvh 升级
yum –y install xxx 功能已经集成好
源码包:可以定制功能./configure 选项 make make install
在ip地址是192.168.1.1服务器上搭建数据库服务
软件包名: rpm –ivh mysql-server mysql
mysql-server :服务端
mysql客户端,提供命令工具
mysql-devel 用来开发mysql程序的文件
rpm -qi 软件包名 查看详细信息
启动服务:service mysql start
进程名:mysqld
进程的所有者,所属组:mysql mysql (源码包安装时需要自己设置)
端口号:3306 netstat -naptul | grep :3306
传输协议:TCP
主配置文件:/etc/my.cnf
数据库目录:/var/lib/mysql
解压安装包 tar-xvf MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar
安装mysql包 rpm -Uvh MySQL-*.rpm
启动命令 service mysql start|stop|status|restart
监听的端口号 3306
进程名 mysqld
进程所有者 mysql
数据传输协议 tcp
数据库目录 /var/lib/mysql/
连接数据库服务器
*默认情况下,只允许数据库管理员root从数据库服务器本机登录。
用rpm方式安装mysql数据库时,系统生成密码存放的位置/root/.myswl_secret
第一次登陆mysql数据库时,需更改密码更改密码命令是set password for root@”localhost”=password(“123456”)
命令格式
mysql -h数据库服务器ip或主机名 -u用户名 -p密码 [数据库名]
查看默认密码
[root@localhost 桌面]# cat/root/.mysql_secret
# The random password set for the root userat Tue Jul 29 09:58:03 2014 (local time): 8dP009F6
[root@localhost 桌面]#
修改密码
登录命令mysql -hlocalhost -uroot -p8dP009F6
修改密码mysql> SET PASSWORD FOR'root'@'localhost'=PASSWORD('123456');
mysq>quit;
[root@localhost ~]# mysql -hlocalhost-uroot -p123456
mysql>
默认数据库解析
登录数据库服务器—>选择一个库—>选择一个表—>把数据插入到表里
登录数据库服务器:mysql 连接数据库的工具
which mysql
rpm –qf /usr/bin/mysql
-h数据库的ip地址/名 -uroot -p密码
root是数据库的管理员,默认数据库管理员登录本机数据库服务器不需要密码
mysql –hlocalhost –uroot -p密码
=mysql
mysql 库名 登录到指定的库
mysql -h数据库服务器的主机名或ip -u用户名 -p密码 [数据库名]
SQL语句:结构化查询语言,以;结尾
select user() ; //查看当前登录数据库的用户 用户名@客户端地址
select database(); //显示当前所在的库
use test; //选择test库,use切换库命令
showtables; //查看当前所在库下的已有的表,每个表占一行
select * from 表名; //查看指定表中的所有记录 ,\G换行显示
select 字段名 from 表名;//查看指定字段
showdatabases; //显示数据库上已有的库,首次启动时创建默认库
use information_schema 可以不以;结尾
information_schema:虚拟库,存放的数据不占用物理磁盘空间,存放在当前的物理内存,记录当前数据库服务器上已有库和表的信息,以及数据库运行的参数信息。
#保存在当前数据库服务器已有的库和表的统计信息
#不占用物理磁盘空间其内的数据保存在系统内存里
mysql:授权库,
默认数据库管理员只能在数据库服务器本机登录,且没有密码,很重要,工作中要备份
(用此库里记录的信息,验证登陆服务器的用户)
#授权库
#保存用户的授权信息
#占用物理存储空间
performace_schema:保存数据库服务器运行时的参数信息,占用物理磁盘空间。
test:公共库,(默认是一个空库,没有数据)可以连接到数据库的用户对此库拥都有完全权限。占用物理磁盘空间。
数据库服务器上的库以文件夹的形式存放在数据库目录下,文件夹名与数据库名同名;表以文件的形式存放在自己所在的数据库对应的文件夹里,文件名与表名相同,默认情况下mysql会把一个表的数据用三个文件来保存
库和表以文件的形式保存在数据库目录下
数据库目录默认在 /var/lib/mysql
5.数据库管理
create database 数据库名; //创建数据库。所有者和所属组为mysql
show databases; //显示数据库上已有的库
drop database 数据库名; //删除数据库
drop table 数据库名.表名; //删除表
use 数据库名; //切换数据库
delete from 表名; //在当前库中删除表记录
数据库名的命名规则:数字、字母、下划线,区分大小写,不能用纯数字,具有唯一性,不能用SQL的关键字,不能用特殊字符,要有标识性
注意在/var/lib/mysql目录中创建一个目录,也是创建了数据库,权限是root,默认不能建表
表名字段名的命名规则和数据库的命名规则一样
建表要保存到库里
6、表管理
Use 库名
字段名 字段类型(宽度)约束条件,
字段名 字段类型(宽度)约束条件,
字段名 字段类型(宽度)约束条件, //(宽度)约束条件可选的
…
);
create table 数据库名.表名( //在指定库创建表
字段名 字段类型(宽度)约束条件,
字段名 字段类型(宽度)约束条件,
…
);
desc 表名; //查看表结构,表在当前库
desc 数据库名.表名
mysql> insert into 表名(字段名1,字段名2) values //给字段插入记录
mysql> (字段名1的值,字段名2的值), //要插入的值
mysql> (字段名1的值,字段名2的值), //要插入的值
mysql> (字段名1的值,字段名2的值); //要插入的值
//顺序项表中插入值时,可省略字段名,字符型的字段用双引号
例:
mysql>insert into webdb.regtab (age) values (88); //给字段age插入值88
select now(); //查看系统时间
select month(now()); //查看月份
select 字段名 from 表名; //查看指定字段mysql的数据类型
1)数值类型
(年龄、体重、身高、工资、成绩):
整数型(小整数tinyint 大整数smallint 极大整数bigint)即没小数点
浮点型(单精度float(n,m) n表示数字位数个数,m表示小数位个数
双精度 double(n,m) )小数点
小×××默认为有符号的、宽度4,unsigned指定无符号、宽度默认3
指定范围符号格式:
create table dd字段名 字段类型(宽度) unsigned;
数值类型的范围默认是无符号的,如果更改无符号,后面加unsigned
释例:create tables dd (name tinyint unsigned);
数值类型的宽度为显示宽度,不能限制当前字段能够存储多大的数值,能存多大的数值由当前字段的类型决定。
显示宽度不等于存储数值,存储数值取决于“范围”
设置宽度是为了节省物理内存
如:字段类型为int(3)时,不够显示宽度时,默认用空格补位,大于宽度3时正常显示,如果要使用零补位,则使用zerofill
示例:createtable student.t1 (id tinyint unsignedzerofill); //在student库下建表t1 ,表t1中字段名为id的为微小整数,使用无符号且值小于默认长度时,用零补位。
例子:
use studb;
createtable studb.game(level tinyint);
>insertinto 表名(字段名列表)
>values
>(字段值列表);
2)字符串类型(名字、家庭住址):
定长char: 0-255字节,当小于指定宽度时,用空格补齐默认为1
变长varchar:0-65535字节,当小于指定宽度时,根据实际长度占用空间。L+D,节省空间,开销大
字段名 类型(宽度)
Name char(3)
Name varchar(3)
Create tabletest.t5(name1 char(3),name2 varchar(3));
Desc t5
Insert into t5
Values
(“jim”,”jim”)
mysql> delete from t1; //删除表内所有记录
Query OK, 0 rows affected (0.02 sec)
字符类型与数值类型宽度的区别
数值类型是宽度是显示宽度与赋值宽度无关,若超出宽度则显示
字段能存储多大数值由字符类型决定。
当字段值不足显示位数时。默认使用空格在数字的左边补足显示位数。
当字段值超出显示位数时,正常显示
Int 数值类型指定宽度作用:
指定宽度使用指定宽度
不指定宽度显示11位
ZEROFILL 用0进行补位
浮点型???
Create tablet9(
Name varchar(5)
Id int(3)
);
Insert into t9
3)日期时间类型(生日、出生年份、注册时间、开会时间……):
年year YYYY
1个字节范围1901-2155
用两位给year赋值时,
01-69视为2001-2069,
70-99视为1970-1999
两位时不能为00
日期date YYYY-MM-DD
4个字节范围0001-01-01 9999-12-31
小时time hh:mm:ss
3个字节格式HH:MM:SS
日期时间datetime YYYY-MM-DD hh:mm:ss
timestamp YYYY-MM-DD hh:mm:ss
datetime8个字节,范围1000-01-01 00:00:00 9999-12-31 00:00:00 不赋值,为空
timestamp 4个字节 范围1970-01-01 00:00:00 2073-12-31 00:00:00
不赋值时,默认用系统当前时间赋值
手动添加时,值够位数时,系统自动分割
只存与字段类型匹配的部分
now() 获取开始执行函数时的系统时间
sysdate() 执行时动态获得系统时间
sleep(N) 休眠N秒
curtime() 获取系统当前时间
curdate() 获取系统当前日期
month() 获取指定时间中的月份
date() 获取指定时间中的日期
time() 获取指定时间中的时间
year() 获取指定时间中的年份
day (now()) 获取当前系统时间中的天
使用mysql
4)枚举类型
(性别、爱好):字段的值只能在列举的范围内选择
单选 enum(“值1”,”值2”,”值n”) 赋值时可用序号,字段的值只能在列表中选一个可以用数字表示,1代表第一个值,2为第二个值
多选 set(“值1”,”值2”,”值n”) 字段的值在列表里选择一个或多个
mysql> create table t16(name varchar(10),sexenum("boy","gril","no"),likesset("game","film","A","girl"));
Query OK, 0 rows affected (0.03 sec)
约束条件:
Null : 准许为空,默认设置 not null 可设置不允许为空
Key : 索引类型(是否主键)
Default : 设置默认值,默认情况下为NULL, 可用default在创建表时设置默认值
Extra:另外,特殊的约束条件
mysql> createtable yy(name char(3) not null default "aa"); //给表yy的字段name 设置了约束NULL为not null 约束Default默认值为aa
字段名|
字段类型|
字段是否允许为空默认值YES 允许字段赋空置
not null
name char(3)not null
是不是key字段
字段的默认值 默认值 null 当不给字段赋值时,使用默认值给字段赋值
age int(3) not null default 21
sex enum(“m”,”w”) not nulldefault “m”
字段的额外设置
空 null NULL
例外:selinux 主要配置文件 /etc/sysconfig/selinux
将此项设置为 SELINUX=disabled 代表不启用
防火墙iptables 配置文件为 /etc/sysconfig/iptables
Iptables –F 删除防火墙策略
service iptables save s(保存服务策略)
注释:删库时,有下面提示代表,studb库下有非数据库类型的文件,删除这个文件就可以把库删掉了。
mysql> dropdatabase studb;
ERROR 1010(HY000): Error dropping database (can't rmdir './studb/', errno: 17)
stu_id name sex age class mail xuefei start_day
学号 姓名 性别 年龄 班级 邮箱 学费 入学时间
查看表结构
插入2条学生信息(自己和同桌的)
查看表记录
/c”
create table test1.t2(
stu_id tinyint(1) not null,
namechar(8) not null,
sex enum("boy","girl") notnull default "boy",
age tinyint(1) not null default 25,
classchar(15) not null default 1405,
mailchar(30) not null,
xufei smallint(1) not nulldefault 16800,
start_day date not null
);
mysql> desc t2;
+-----------+--------------------+------+-----+---------+-------+
| Field |Type | Null | Key | Default| Extra |
+-----------+--------------------+------+-----+---------+-------+
| stu_id |tinyint(1) | NO | | NULL | |
| name |char(8) | NO | | NULL | |
| sex |enum('boy','girl') | NO | | boy | |
| age |tinyint(1) | NO | | 25 | |
| class |char(15) | NO | | 1405 | |
| mail |char(30) | NO | | NULL | |
| xufei | smallint(1) | NO | | 16800 | |
| start_day | date | NO | | NULL | |
+-----------+--------------------+------+-----+---------+-------+
8 rows in set (0.00 sec)
修改表结构
**修改表结构时,受表中已有记录的限制
**所有表结构一定要在插入表记录之前定义好
Alter tabale 数据库名.表处理动作
处理动作:
添加字段 add 字段名类型(宽度)约束条件,add 字段名类型(宽度)约束条件;
First 添加在所有表上方。
After name 添加在after字段下面。
删除字段 drop 字段名,字段名……;
修改字段类型alter table 数据库名.表名 modify 字段名 类型(宽度)约束条件
不变的部分原样写上 修改部分写新的设置就可以
更改字段名
alter table test1.t2 add shouji char(11) not null ,add zhuanye char(30) not null default "lunux";
mysql> alter table test1.t2 drop shouji;
alter table test1.t2 modify zhuanye char(30) default "c";