MySQL创建修改表结构

一、 数据库的概述

1、什么是数据库

DB,DataBase

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

DBMS,DataBase Management System

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

DBS,DataBase System

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

2、E-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

5、MySQL的特点及应用

1)主要特点

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

支持Linux/Unix、Windows等多种操作系统

使用C和C++编写,可移植性强

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

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

2)典型应用环境

LAMP平台,与Apache HTTP Server组合

LAMP平台,与Nginx组合

二、构建MySQL系统

[[email protected] ~]# setenforce 0    //临时管理

[[email protected] ~]# getenforce

Permissive

[[email protected] ~]# vim /etc/sysconfig/selinux   //永久关闭

SELINUX=disable

Chkconfig  – - level iptables off

1、 RPM方式安装

[[email protected] ~]# 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         //客户端程序

[[email protected] ~]#yum –y  remove mysql-server mysql  //卸载默认安装

[[email protected] ~]#mv /etc/my.cnf  /etc/my.cnf.old       //移走配置文件

至少安装server、client、share*包

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

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

[[email protected] ~]# 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、 更改配置文件

[[email protected] ~]#cp  /usr/share/mysql/my-default.cnf(模板) /etc/my.cnf

[[email protected] ~]#vim  /etc/my.cnf

[mysqld]

.. ..

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

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

.. ..

3、 启动mysql数据库服务

[[email protected] ~]# service mysql restart

[[email protected] ~]# chkconfig mysql on

[[email protected] ~]# netstat -anultp |grep mysql

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

LISTEN      28470/mysqld

*ps  aux  | grep  mysqld

进程名      mysqld

进程所有者   mysql

监听端口号   3306

传输协议     tcp

4、 修改root口令

默认的数据库管理账号

root,允许从localhost访问

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

[[email protected] ~]# cat /root/.mysql_secret

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

操作方法:

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

使用SET PASSWORD 重设口令

[[email protected] ~]# mysql -u root –p  //以root登录,-p验证口令

Enter password:                  //输入随机口令

mysql> set password for [email protected]"localhost"=password("123");

//将密码设置为123

mysql>quit                      //退出mysql>环境

MySQL基本管理

1、 登录数据库服务器

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

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

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

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

3、 使用mysql>管理环境

操作指令类型:

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

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

基本注意事项:

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

每条SQL指令以;结束或分隔

不支持Tab键自动补齐

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

4、 查看数据库结构

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

mysql>Show  databases;

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

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

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

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

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

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

/var/lib/mysql   数据库目录

使用/切换到指定的库

mysql> USE  数据库名;

列出当前的库内有那些表

mysql>Show  tables;

查看指定表的字段结构

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

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

数据库名的规则:

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

删库: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


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

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

Insert  into stu1(name,level)values(“swk”,127);

字段名之间使用,号分隔

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

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

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

查看表中的记录 select * from stu1;

整数型

关于整数类型字段:

使用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);  //zerofill:0补齐,

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


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


sleep(N)


休眠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  varchar(8),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;   //删除tel,email

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

MySQL创建修改表结构

时间: 2024-12-21 05:23:58

MySQL创建修改表结构的相关文章

MySQL在线修改表结构pt-osc

MySQL在线修改表结构pt-osc 重所周知 MySQL的DDL操作操作是相比比较昂贵的.因为MySQL在修改表期间会阻塞任何读写操作. 基本上业务处于瘫痪.如果数据量较大可能需要好几个小时才能完成,无法容忍这个操作.Percona开发了一系列的工具 Percona Toolkit包,其中有一个工具pt-online-schema-change可以在线执行DDL操作,不会阻塞读写操作从而影响业务程序.当然也有其他的工具 例如 MySQL5.6的online ddl 还有gh-ost 本文主要讲

mysql 在线修改表结构工具 gh-ost

gh-ost使用测试: gh-ost -host='192.168.65.136' -user=root -password='' -database='haha' -chunk-size=100000  -allow-on-master -execute  -initially-drop-ghost-table -exact-rowcount --initially-drop-old-table  -alter='modify AreaID varchar(10)' -table='t_pol

在线修改表结构mysql5.5版本和pt-online-schema-change

一.测试环境 系统:Centos 6.2 数据库:mysql Ver 14.14 Distrib 5.5.18, for Linux (x86_64) using readline 5.1 percona工具:percona-toolkit-2.2.12 测试数据库大小:tx_ljxz_71--16G.t_log_item--3G 二.在线修改表结构的过程 mysql在线修改表结构 1 按照原始表(original_table)的表结构和DDL语句,新建一个不可见的临时表(tmp_table)

mysql初识(三)修改表结构

mysql 修改表结构 以下均用表名test5  只有一个字段hobby操作修改表名alter table test5 rename newtest; 修改字段的同时更名语句结构 alter table 表名 change 字段名 新的字段名 [first|after 字段名]first|after 可写可不写 写上就是改变字段的位置 是在最前或者在某字段的后面alter table newtest change hobby hob char(20); 只是修改字段语句机构 alter tabl

MySQL在创建相同表结构时as和like 使用的区别

1.MySQL的复制相同表结构方法: 1)create table table_name as select * from table1 where 1=2 (或者limit  0): 2) create table table_name like table1_name; 二者的用途: as :用来创建相同表结构并复制源表数据.(可根据后面的条件来控制要不要复制源表数据) like:用来创建完整表结构和全部索引. 二者的区别: as :创建出来的table_name缺少table1的索引信息,

必须会的SQL语句(二) 创建表、修改表结构、删除表

1.创建数据库表 --使用哪个数据库,如果不写这一句是默认的数据库,也可以用鼠标选当前数据库 use testDB --创建表 Create Table tablename ( --id表示字段名 --int 数据类型 --primary key 主键 --not null 非空 --identity(1,1)初始值是1 每次自增长1 id  int primary key not null identity(1,1), --unique 唯一 name varchar(20)  not nul

mysql笔记--数据库基本增删改查 修改表结构

数据库基本增删改查 1. 增-添加/插入数据,insert into 插入哪张表,那些列,什么值, 语句:insert into 表名(列1,列2,列3)values (值1,值2,值3): 可以不按原列的顺序插入,也可以插入部分列,但是值与列要一一对应,不能混乱!!! 一次插入多行数据 : Insert into 表名(列1,列2)values (值1,值2),(值1,值2): 2. 改-更新数据update 更新哪张表,哪些列,哪些值 语句:update 表名 set 列1=值1,列2=值2

MariaDB(MySQL)修改表结构报表空间满

今天数据库表修改表结构,需要添加一列: ALTER TABLE `xxxx_learn` ADD COLUMN `learn_stage_code` VARCHAR(32) NULL DEFAULT '99' COMMENT '学段' AFTER `qualified_rate`; 结果一直报错: ERROR 1114 (HY000) at line 303: The table 'xxxx_learn' is full 刚开始以为可能硬盘空间不够,df -h 查显示正常,所有分区都有空闲. 看

Mysql修改表结构工具OnlineSchemaChange使用心得

OnlineSchemaChange是Facebook开源的在线修改表结构的工具,具体原理这里不多说了,有兴趣的同学可以看下官方文档:https://github.com/facebookincubator/OnlineSchemaChange/wiki 这里主要介绍下在迁移的时候使用的情况,首先官网的OSC工具不支持主从同步,当时测试是在单库上进行测试,而生产环境是有主从的,结果在主库上直接运行了OSC,可以看到如下的输出: 可以看到主库运行基本正常,表结构也正常修改了,并没有锁表影响到线上正