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系统
[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 //移走配置文件
至少安装server、client、share*包
采用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 :::* //默认监听TCP的3306端口
LISTEN 28470/mysqld
*ps aux | grep mysqld
进程名 mysqld
进程所有者 mysql
监听端口号 3306
传输协议 tcp
4、 修改root口令
默认的数据库管理账号
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//随机生成的管理密码
操作方法:
通过客户端工具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>管理环境
操作指令类型:
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