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   LNMPNginx)

mysql  主要和网站一起用。

3mysql软件有哪些优点

     1)适用于中小规模、关系型数据库管理系统(100M左右、表表之间有联系,非关系型数据库-NoSQLogic

     2)跨平台,支持AIX FreeBSD  HP-UX  Linux Windows等多种操作系统

     3)使用CC++编写你,支持多种编译器,保证源代码的可移植性(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 可以不以;结尾

 

 

                            spacer.gif

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  表名(                      //  在当前库中创建表

字段名  字段类型(宽度)约束条件,

字段名  字段类型(宽度)约束条件,

字段名  字段类型(宽度)约束条件,  //(宽度)约束条件可选的

); 

     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 * from 表名;   //查看表记录

select now();                       //查看系统时间

select month(now());  //查看月份

select 字段名 from 表名;  //查看指定字段mysql的数据类型

 

1)数值类型

(年龄、体重、身高、工资、成绩):

整数型(小整数tinyint 大整数smallint 极大整数bigint)即没小数点

浮点型(单精度float(n,m) n表示数字位数个数,m表示小数位个数

双精度 double(n,m) )小数点

小×××默认为有符号的、宽度4unsigned指定无符号、宽度默认3

 

指定范围符号格式:

create table  dd字段名  字段类型(宽度) unsigned;

数值类型的范围默认是无符号的,如果更改无符号,后面加unsigned

释例:create tables  dd (name  tinyint unsigned);

spacer.gif

 

  数值类型的宽度为显示宽度,不能限制当前字段能够存储多大的数值,能存多大的数值由当前字段的类型决定。

显示宽度不等于存储数值,存储数值取决于“范围”

设置宽度是为了节省物理内存

 

如:字段类型为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

变长varchar0-65535字节,当小于指定宽度时,根据实际长度占用空间。L+D,节省空间,开销大

 

字段名         类型(宽度)

Name                   char3

Name                   varchar3

 

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 varchar5

Id int3

);

 

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:另外,特殊的约束条件

spacer.gif

mysql> createtable yy(name char(3) not null default "aa");   //给表yy的字段name 设置了约束NULLnot null  约束Default默认值为aa

 

 

 

字段名|

字段类型|

字段是否允许为空默认值YES 允许字段赋空置

                  not null

                 name char3not 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";