MySQL 的数据类型和表结构
DB,DataBase
- 数据库:依照某种数据模型进行组织并存放到存储器的数据集合.
DNMS,DataBase Management System
- 数据库管理系统:用来操纵和管理数据库的大型服务软件.
DBS,DataBase System
- 数据库系统:即 DB+DBMS, 指带有数据库并整合了数据库管理软件的计算机系统.
Oracle(甲骨文):Oracle Database , MySQL
Microsoft(微软):SQL Server ,Access
IBM: DB2
Sybase: Sybase
MySQL 主要特点:
- 关系型数据库
- 支持 Linux/Unix,Windows 等多种操作系统
- 使用 C 和 C++ 编写,可移植性强
- 通过 API 支持 Python/Java/Perl/PHP 等语言
应用环境:
-LAMP 平台,与 Apache HTTP Server 组合
-LNMP 平台,与 Nginx 组合
关系型数据库服务软件(RDBMS): 按照规定的结果存储数据,并且数据(values)之间可以做关联操作.
例:Oracle MySQL DB2 SQL Server
非关系型数据库软件 (NOSQL): 以键值对的形式,一一对应,数据 (values) 之间没有关联.
例:Redis mongdb
一,安装 MySQL
yum -y install perl-Data-Dumper Perl-JSON perl-Time-HiRes #依赖包
tar -xf mysql-5.7.17-1.el7.x86_64.rpm-bundle.tar
rpm -Uvh mysql-conmmunity-*.rpm #U 升级安装,可替换冲突文文件.
二,启动服务
/usr/lib/systemd/system/mysqld.service
或
systemctl start mysql
systemctl enable mysql
三,登录
默认的数据库管理员账号 root,允许从 localhost 访问.
首次登录密码在安装时随机生成,存储在错误日志文件里.
grep 'temporary password' /var/log/mysql.log
.....@localhost: matoa>AV
mysql -uroot -p"matoa>AV
mysql>
四,修改密码
0 or LOW 长度
1 or MEDIUM(默认) 长度,数字,小写 / 大写,和特殊字符
2 or STRONG 长度,数字,小写 / 大写和特殊字符,字典文件
通过客户端工具 mysql 连接本地服务器,使用 alter user 重设置口令.
mysql>set global validate_password_policy=0; #只验证密码长度
mysql>set global validate_password_length=6; #修改密码长度为 6 个字符,默认是 8 个字符.
mysql>alter user user() identified by"123456"; #修改登录密码
mysql>quit #退出
mysql -uroot -p123456 #使用新密码登录
要想实现永久生效需修改配置文件:
vim /etc/my.cnf
.....
validate_password_policy=0
validate_password_length=6
服务相关文件
/etc/my.cnf 配置文件
/var/lib/mysql 数据库目录
默认端口 3306
进程名 mysqld
传输协议 TCP
进程所有者 mysql
进程所属组 mysql
使用 mysql 命令:
mysql -h 服务器 ip -u 用户名 -p 密码 [数据库库名]
指令类型:
MySQL 指令:环境切换,看状态,退出等控制
SQL 指令:数据库定义 / 查询 / 操纵 / 授权语句
DDL 数据定义语言(create alter drop)
DML 数据操作语言(insert updata delect)
DCL 数据控制语言(grant revoke)
DTL 数据事物语言(commit rollback savepoint)
基本注意事项:
1. 指令不区分大小写(密码,变量值除外)
2. 每条 SQL 指令以 ";" 结束或分隔.
3.c \ 可废弃当前编写错的指令.
命令:
show databases; 查看所有的库
use 库名; 进入到指定库
show tables; 列出当前库内的所有表
describe 表名; 查看表的字段结构
create datebases 库名; 创建指定库
select database(); 查看当前所在的库
drop databas 库名; 删除指定的库
create table 库名. 表名 ( #创建指定的表
字段名 1 字段类型(宽度) 约束条件;
字段名 2 字段类型(宽度) 约束条件;
...........
);
例建表:
mysql>create table gamedb.stu(
mysql>name char(10),
mysql>age int
mysql>);
drop table 库名. 表名; 删除指定库下的表
insert into 库名. 表名 values(值列表); #插入表记录
例:
insert into gamedb.stu values("jim",21),("tom",29);
select * from 库名. 表名; 查看表的所有记录
delete from 库名. 表名; 删除表的所有记录
常见类型的信息
数值型:体重,身高,成绩,工资,价格等
字符型:姓名,工作单位,地址等
枚举型:兴趣爱好,性别等
日期时间型:出生日期,注册时间等
1. 数值型
类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 字节 -128~127 0~255 微小整数
SMALLINT 2 字节 -32768~32767 0~65535 小整数
MEDUIMINT 3 字节 -(2^23)~(2^23)-1 0~(2^24)-1 中整数
INT 4 字节 -(2^31)~(2^31)-1 0~(2^32)-1 大整数
BIGINT 8 字节 -(2^63)~(2^63)-1 0~(2^64)-1 极大整数
FLOAT 4 字节 单精度浮点数
DOUBLE 8 字节 双精度浮点数
DECIMAL 对 DECIMAL(M,D), 其中 M 为有效位数,D 为小数位数,M 应大于 D,占用 M+2 字符
1.1 整数型
使用 UNSIGED 修饰时,对应的字段只保存正数(无符号).
数值不够指定宽度时,默认是在左边填空格补位.
宽度仅是显示宽度,存数据值的大小有类型决定.
使用关键字 ZEROFILL 时,填 0 代替空格补位.
数值超出范围时,报错.
1.2 浮点型
定义格式:float(总宽度,小数位数)
当字段值与类型不匹配时,字段值作为 0 处理.
数值超出范围时,仅保存最大 / 最小值.
浮点型:根据存储数值的范围分为 单精度 双精度
单精度 float(n,m)
双精度 double(n,m)
n 表示总位数
m 表示小数位的位数
2. 字符类型
2.1 定长:char(字符数)
最大长度 255 字符.
不够指定字符数时默认在右边用空格补齐.
字符数超出时,无法写入数据.
2.2 变长:varchar(字符数)
按数据实际大小分配存储空间.
字符数超出时,无法写入数据.
缺点:每次都要计算,消耗资源.
2.3 大文本类型:text/blob
字符数大于 655535 存储时使用.
例:
mysql>create database ku;
mysql>create table ku.biao(
>name char(7) ,
>age tinyint(3) unsigend,
>high float(3,2)
>);
mysql>desc ku.biao;
Fied Type Null key Default Extra
字段名 字段类型 是否为空 索引类型 默认值 描述信息
3. 日期时间类型
3.1 日期时间,DATETIME
占用 8 个字节.
范围:1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999
例:2017-12-31 23:59:59
3.2 日期时间,TIMESTAMP
占用 4 个字节.
范围:1970-01-01 00:00:00.000000 ~ 2038-01-19 03:14:07.999999
例:2017-12-31 23:59:59
3.3 日期,DATE
占用 4 个字节.
范围:0001-01-01 ~ 9999-12-31
3.4 年份,YEAR
占用 1 个字节.
范围:1901~2155
3.5 时间,TIME
占用 3 个字节.
格式: HH:MM:SS
关于日期时间字段,当未给 TIMESTAMP 字段赋值时,自动以当前系统时间赋值,而 DATETIME 字段默认值为 NULL.
YEAR 年份的处理,默认用 4 位数字表示,当只用 2 位数字赋值时,01~69 视为 2000~2069,而 70~99 视为 1970~1999.
例:
mysql>create table ku.biao2(
>name varchar(8),
>starty year,
>birthy date,
>abc time
>);
时间函数:
now() 获取调用此函数时的系统日期
sysdate() 执行时间动态获得系统时间
sleep(N) 休眠 N 秒
curdate() 获取当前的系统时间
curtime() 获取当前的系统时刻
month() 获取指定时间中的月份
date() 获取指定时间中的日期
time() 获取指定时间中的时刻
例:
mysql > select now();
mysql > select date(now());
mysql > select time(now());
4. 枚举类型
4.1 从给定值集合中选择单个值,ENUM.
格式:enum(值 1,值 2,值 N)
4.2 从给定值集合中选择一个或多个值,SET.
格式:set(值 1,值 2,值 N)
例:
mysql>create table ku.biao3(
>name char(5),
>gen enum("boy","girl"),
>likes set("book","music","pingpang","sleep")
>);
约束条件
Null 允许为空, 默认设置
NOT NULL 不允许为空
key 索引类型
Default 设置默认值,缺省为 NULL
例:
mysql>create table ku.tbiao5(
>name varchar(4) not null,
>gen enum("boy","girl") default "boy",
>age int(3) not null default 22,
>);
mysql>desc ku.biao5;
修改表的字段
基本用法:
ALTER TABLE 表名 执行动作;
执行动作:
1. 添加新字段
ADD 字段名 类型 (宽度) 约束条件;
ADD 字段名 类型 (宽度) 约束条件 FIRST; // 添加字段到最前面
ADD 字段名 类型 (宽度) 约束条件 AFTER 字段名 2; // 添加字段到字段 2 后面
2. 修改字段类型
MODIFY 字段名 类型 (宽度) 约束条件;
3. 修改字段名
CHANGE 源字段名 新字段名 类型 (宽度) 约束条件;
4. 删除指定字段
DROP 字段名;
例:
mysql>alter table ku.biao5 add
>kuki varchar(5) not null ;
来源: http://www.bubuko.com/infodetail-2476494.html