首页 > 代码库 > MySQL创建修改表结构

MySQL创建修改表结构

一、 数据库的概述

1、什么是数据库

  DBDataBase

数据库:依照某种数据模型进行组织并存放到存储器的数据集合

  DBMSDataBase Management System

数据库管理系统:用来操纵和管理数据库的大型服务软件

  DBSDataBase System

数据系统:即DB+DBMS,指带有数据库并整合了数据库管理软件的计算       机系统

2E-R数据模型

 实体—关系 模型(Entity-Relationship Model

3、常见的数据库服务软件

类型

厂商

Oracle Database(商业)

Oracle(甲骨文)

MySQL(开源)

Oracle(甲骨文)

SQL Server(商业)

Microsoft(微软)

Access(商业)

Microsoft(微软)

DB2(商业)

IBM

Sybase

Sybase

PostgreSQL(开源)

加州大学伯克利分校

跨平台:Oracle Database   DB2  MySQ  PostgreSQL

不跨平台:SQL Server  Access

4、关于MySQL

 开源分支MariaDB


5MySQL的特点及应用

1)主要特点

   适用于中小规模,关系型数据库系统

   支持Linux/UnixWindows等多种操作系统

   使用CC++编写,可移植性强

   通过API支持Python/Java/Perl/PHP等语言

   Mysql数据库服务器  关系型数据库

   2)典型应用环境

      LAMP平台,与Apache HTTP Server组合

      LAMP平台,与Nginx组合

二、构建MySQL系统

[root@localhost ~]# setenforce 0    //临时管理

[root@localhost ~]# getenforce

Permissive

[root@localhost ~]# vim /etc/sysconfig/selinux   //永久关闭

SELINUX=disable

Chkconfig   - level iptables off

1、 RPM方式安装

[root@localhost ~]# tar vxfMySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar

MySQL-shared-5.6.15-1.el6.x86_64.rpm       //共享库

MySQL-devel-5.6.15-1.el6.x86_64.rpm        //库和头文件

MySQL-embedded-5.6.15-1.el6.x86_64.rpm    //嵌入式版本

MySQL-test-5.6.15-1.el6.x86_64.rpm          //测试包

MySQL-server-5.6.15-1.el6.x86_64.rpm        //服务端程序

MySQL-shared-compat-5.6.15-1.el6.x86_64.rpm / /兼容包

MySQL-client-5.6.15-1.el6.x86_64.rpm         //客户端程序

[root@localhost ~]#yum y  remove mysql-server mysql  //卸载默认安装

[root@localhost ~]#mv /etc/my.cnf  /etc/my.cnf.old       //移走配置文件

spacer.gif至少安装serverclientshare*

采用U升级安装,可替换冲突文件

推荐将devel也装上,用于支持其他软件

[root@localhost ~]# rpm -Uvh MySQL-shared-*.rpm MySQL-client-5.6.15-1.el6.x86_64.rpm MySQL-server-5.6.15-1.el6.x86_64.rpm MySQL-devel-5.6.15-1.el6.x86_64.rpm

2、 更改配置文件

[root@localhost ~]#cp  /usr/share/mysql/my-default.cnf(模板) /etc/my.cnf

[root@localhost ~]#vim  /etc/my.cnf

[mysqld]

.. ..

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

explicit_defaults_for_timestamp=1   //启用显示时间戳

.. ..

3、 启动mysql数据库服务

[root@localhost ~]# service mysql restart

[root@localhost ~]# chkconfig mysql on

[root@localhost ~]# netstat -anultp |grep mysql

tcp        0      0 :::3306  :::*        //默认监听TCP3306端口

LISTEN      28470/mysqld

      *ps  aux  | grep  mysqld


进程名      mysqld

进程所有者   mysql

监听端口号   3306

传输协议     tcp

4、 修改root口令

spacer.gif默认的数据库管理账号

root,允许从localhost访问

  登录密码在安装时随机生成

[root@localhost ~]# cat /root/.mysql_secret

# The random password set for the root user at Tue Apr 29 12:14:06 2014 (local time): VaAcGHM0//随机生成的管理密码

spacer.gif操作方法:

通过客户端工具mysql连接本服务器

使用SET PASSWORD 重设口令

[root@localhost ~]# mysql -u root –p  //root登录,-p验证口令  

Enter password:                  //输入随机口令

mysql> set password for root@"localhost"=password("123");

//将密码设置为123

mysql>quit                      //退出mysql>环境

MySQL基本管理

1、 登录数据库服务器

默认情况下,只允许使用数据库管理(root),从数据库服务器本机登录。要其从其pc机登录,必须在数据库服务器本机做授权才可以。

2、 登录数据库服务器命令的语法格式

Mysql  -h ip/主机名 -u用户名  -p密码 数据库名 //登录到某个数据库

/root/.mysql_secret  数据库管理员root首次登录数据库服务器使用的密码

3、 使用mysql>管理环境

spacer.gif操作指令类型:

MySQL指令:环境切换、看状态、退出等控制

SQL指令:数据库定义/查询/操作/授权语句

spacer.gif基本注意事项:

操作指令不区分大小写(密码、变量值除外)

每条SQL指令以结束或分隔

不支持Tab键自动补齐

\c可废弃当前编写错的操作指令

4、 查看数据库结构

spacer.gif列出当前MySQL服务器上有哪些库

mysql>Show  databases

information_schema  虚拟库  存放数据库服务器上已有库和表的信息

                       在此库存放的数据不占用物理磁盘空间

mysql 授权库 (保存用户的授权信息,用户登录数据库服务器,用此库里的信息验证登录用户的权限)

performance_schema 数据库服务器运行时的参数信息

test 公共库   (任何用户登录到数据库服务器上,对此都有完全权限)

*存放数据库服务器上的库和表,是以文件的形式保存在数据库目录下


/var/lib/mysql   数据库目录

spacer.gif使用/切换到指定的库

mysql> USE  数据库名;

spacer.gif列出当前的库内有那些表

mysql>Show  tables

查看指定表的字段结构

Mysql>DESCRIBE 表名\G;以列表形式展现,否则为表格形式

创建数据库:creat   database  数据库名

spacer.gif数据库名的规则:

字母 数字 下划线唯一 、字母区分字母大小写、唯一、不能使纯数字、不要使用关键字或特殊字符、

删库:drop  database  数据库名; (如果库里有表,表会一并被删除)

Select  database(); //查看当前所在的库

Show tables  显示以创建的库

5、 创建表

*表存放在库里(创建表)

Create   table  表名(

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

.. ..

mysql> create table stu1 (name char(4),level tinyint(3) unsigned);//只保存正数

横着的是记录   竖着的是字段

查看表结构:desc 表名;

Desc   库名.表名

三、Mysql 数据类型

1、 常见的信息种类(不同的数值类型存储数值的范围不同)

数值类型

类型

大小

范围(有符号)

范围(无符号)

用途

tinyint

1字节

-128~127

0~255

微小整数

smallint

2字节

-32768~32767

0~65535

小整数

mediumint

3字节

-223~-223-1

0~223-1

中整数

int

4字节

-231~-231-1

0~232-1

大整数数

bigint

8字节

-263~-263-1

0~264-1

极大整数

float

4字节



单精度浮点数

double

8字节



双精度浮点数

decimal

decimalM,D),其中M为有效位数,D为小数位数,M应大于D,占用M+2字节

向表内插入内容:insert  into  表名(字段名列表)values(字段值列表);

Insert  into stu1namelevelvalues(“swk”,127);

字段名之间使用,号分隔

字段值列表之间是用,,号分隔

字段是字符类型的,值要用或“”把值扣起来

字段的值与字段类型匹配。是否只保存与字段类型匹配的部分

查看表中的记录 select * from stu1


整数型

spacer.gif关于整数类型字段:

使用unsigned修饰时,对应的字段只保存正数

         数值不够指定宽度时,在左边填空格补位

         宽度仅是显示宽度,存数值的大小由类型决定

         使用关键字zerofill时,填0代替空格补位

         当字段值与类型不匹配时,字段填为0处理

         数值超出范围时,仅保存最大/最小值

mysql> create table t1 (id int(5) unsigned);//建表

Query OK, 0 rows affected (0.03 sec)

mysql> desc t1;           //查看表结构

+-------+-----------------+------+-----+---------+-------+

| Field | Type            | Null | Key | Default | Extra |

+-------+-----------------+------+-----+---------+-------+

| id    | int(5) unsigned | YES  |     | NULL    |       |

+-------+-----------------+------+-----+---------+-------+

1 row in set (0.00 sec)

浮点型:单精度:定义格式:float(位数总宽度,小数位位数)

双精度:

mysql> create table stu1 (                           //创建stu1

-> name char(4),age tinyint(3),xuefei float(7,2)

-> );

mysql> desc stu1

数值类型的宽度时显示宽度,实际能存储的值与该数值类型有关,不指定宽度时默认为11

mysql> create table t3 ( gz int zerofill,id int(6) zerofill);  //zerofill0补齐,

mysql> desc t3

mysql> insert into t3 (gz,id)

   -> values

   -> (10000,1);

mysql> select * from t3;

+------------+--------+

| gz         | id     |

+------------+--------+

| 0000010000 | 000001 |

+------------+--------+

1 row in set (0.00 sec)

字符类型

定长char(固定长度)0~255

最大长度255字符

     不够指定长度字符时在右边用空格补齐

     自动截断超出指定字符数的数据

变长varchar(长度是变化的)0~65535

     按数据实际大小分配存储空间

    自动截断超出指定字符的数据

日期时间类型

datetime日期时间

 占用8个字节

  范围:1000-01-01 00:00:00.000000~9999-12-31 23:59:59.999999

timestamp日期时间

  占用4个字节

  范围:1970-01-01 00:00:00.000000~2038-01-19  03:14:07.999999

year  年

  占用1个字节

  范围:1901~2155

date 日期

  占用4个字节

   范围:0001-01-01~9999-12-31

time  时间

    占用3个字节

     格式:HH:MM:SS

关于日期时间字段

当未给timstamp字段赋值时,自动以当前时间赋值,而datetime字段默认赋值为0

    YEAR年份的处理

默认用4位数字表示

          当只用2位数字赋值时,00~69视为2000~2069,而70~99视为1970.1999

时间函数:

类型

用途

now()

获取调用此函数时的系统日期时间

sysdate()

执行时动态获得系统日期时间

sleepN

休眠N

curdate()

获取当前的系统日期

crutime()

获取当前的系统时刻

month()

获取指定时间中的月份

date()

获取指定时间中的日期

time()

获取指定时间中的时刻



枚举类型(字段值只能在给定范围选择)

从给定值集合中选择单个值,enum

 定义格式:enum(值1,值2,值N);

从给定集合中选择一个或多个值,set

 定义格式:set(值1,值2,值N

Set  (“film”,“book”,“music”)  多选

Enum (“boy”,“girl”,“no”)     单选

Create  table  t6

Name  varchar8),likes  set(film,book,music),

Sex enum(boy,girl) );

2、 约束条件

Not  null    不允许输入空值

Null         允许为空

Key          索引类型(是否为主键)

Default        设置默认值,缺省为null

四、 修改表结构

*修改表结构会影响表中的记录

修改表结构时受表中已有记录的限制

在还没有向表中插入记录时修改表结构

Alter  table   数据库名.表名   处理动作:

2 添加字段、add

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

mysql>alter  table  stuinfo

->add  email  varchar(30)  not null,

->add  tel   varchar(11)  not null;

默认将新添加的字段追加到已有字段的下方

Fist  把新添加的字段放在所有字段上方

mysql>alter table stuinfo

       ->add stu_num  char(4)  not null  first;    //添加在所有字段上方

After  把新添加的字段放在指定字段的下方

mysql>alter tablestuinfo

      ->add homeaddr  varchar(50)  not null  after  age;  //添加到age下方

2 删除字段、drop

drop  字段名;

mysql>alter table stuinfo

        ->drop tel,drop email;   //删除telemail

2 修改字段类型、modify

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

在修改时,不变的部分原样写出来就可以了

不设置部分,会使用建表时的默认设置

mysql>alter table stuinfo

   ->modify  name  varchar(20)  not  null;   //修改类型为20  不允许为空

更改字段名、change字段名在表里具有唯一性)

可以在修改字段名的同时修改字段类型

Change  原子段名  新字段名  类型(宽度)  约束条件;

mysql>alter table stuinfo

   ->change  stu_num  number  varchar(4)  not null;//将字段名改为number