数据库服务软件有 MySQL Oracle SQL_Server MongoDB DB2 Maraidb
MySQL特点
- 关系型数据库(innoDB)
数据以 行和列(表) 的形式去存储的
表中行: 一条记录 列: 一个字段
表和表之间的逻辑关联叫关系 - 非关系型数据库存储(mySAM)
以字典存储, 每条字典独立, 优点查询快
数据库软件\数据库\数据仓库,概念区分
- 数据库软件
可操作, 实现数据库的逻辑功能 - 数据库
逻辑概念, 存储数据, 侧重于存储 - 数据仓库
数据量特别庞大, 主要用于数据分析, 数据挖掘
MySQL 安装
- 安装服务端
sudo apt-get install mysql-server - 安装客户端
sudo apt-get install mysql-client
安装软件时,修复依赖关系
- sudo apt-get install update
- sudo apt-get -f install
设置环境变量的方法
- vi .bash_profile
- 添加如下内容保存退出
export PATH=${PATH}:/usr/local/mysql/bin - source .bash_profile
mysql -uroot -p密码
- 查看服务状态
sudo /etc/init.d/mysql start 启动服务端
sudo /etc/init.d/mysql status客户端连接
远程连接 mysql -h主机地址 -u用户名 -p密码
本地连接 mysql -hlocalhost -uroot -p123456
本地连接 mysql -uroot -p
基本SQL命令
1. 库
- 查看所有库
show databases; - 创建库(指定字符集)
Create database 库名 character set utf8; - 查看创建库的语句(查看字符集)
show create database 库名; - 查看当前所在库
select database(); - 切换库
use 库名; - 查看库中的表
show tables; - 删除库
drop database 库名;
2. 表
- 创建表(别忘了选择库, 指定字符集)
create table 表名(
字段名 char(10),
字段名 数据类型,
字段名 数据类型
)character set utf8;
字段名与数据类型以空格分隔 - 修改表名(rename)
alter table 表名 rename 新表名; - 查看创建表的语句(字符集,存储引擎)
show create table 表名; 查看表结构
desc 表名;desc开头 describe\descend\ascend
3. 表字段
- 语法: alter table 表名 ...;
- 添加字段(add)
alter table 表名 add 字段名 数据类型; 默认位置在最后
alter table 表名 add 字段名 数据类型 first;
alter table 表名 add 字段名 数据类型 after 字段名; - 删除字段(drop)
alter table 表名 drop 字段名; - 修改
修改字段数据类型(modify)
alter table 表名 modify 字段名 新的数据类型;- 会受到表中已有数据的限制
修改字段名(change)
alter table 表名 change 原字段名 新字段名
- 会受到表中已有数据的限制
- 查看表结构(查看表中字段)
desc 表名;
4. 表记录
- 插入(insert)
- insert into 表名 values(一条记录1),(一条记录2),(..);
- insert into 表名(字段1, 字段2)values(值1), (值2);
- 删除表记录(delete)
- delete from 表名 where 条件;
- 注意
一定要加where条件, 不加where条件全部删除表记录
- 更新表记录(update,set)
- update 表名 set 字段名1=值1,字段2=值2 where 条件;
- 一定要加where
- 查询(select)
- select * from 表名 where 条件;
- select 字段1, 字段2... from 表名 where 条件;
表字段, 表记录操作
表字段(alter table 表名) | 表记录 | |
---|---|---|
增: | add | insert into 表名 .. |
删: | drop | delete from 表名 .. |
改: | modify | update 表名 set ... |
查: | desc 表名; | select * from 表名 ... |
表的复制
- create table 表名 select ... from 表名 where 条件;
- 复制表结构
create table 表名 select ... from 表名 where false;
数据类型
- 数值类型
- 字符类型
- 枚举类型
日期时间类
- 日期时间函数
- 日期时间运算
- 运算符操作
- 模糊查询(like)
1. 数值类型
- 整型
- int 大整型(4个字节) 32位
取值范围: 0~(2^32 -1) 42亿多 - tinyint 微小整型(1个字节)
1. tinyint signed(默认):-128~127
2. tinyint nusigned: 0~255
age tinyint unsigned, - smallint 小整型(2个字节)
- bigint 极大整型(8个字节)
- 浮点型
- float(4个字节,最多显示7个有效位)
字段名 float(m,n)
m: 总位数最大为7
n: 小数位位数
例: float(5,2)取值范围: -999.99 ~ 999.99 - double(8个字节)
字段名 double(m,n) - decimal(m,n)
存储空间(整数部分, 小数部分分开存储)
规则: 将9的倍数包装成4个字节
余数 | 0 | 1-2 | 3-4 | 5-6 | 7-8 |
---|---|---|---|---|---|
字节 | 0 | 1 | 2 | 3 | 4 |
例:decimal(19,9)
整数部分: 10/9=1余1 4字节+1字节 = 5
小数部分: 9/9=1余0 4字节+0字节 = 4
总共 : 9个字节
2. 字符类型
- char() : 定长
char(宽度) 宽度取值范围: 1 - 255
name char(20)
"A" --> 占20个字节 - varchar() : 变长__一定要传宽度值__
varchar(宽度) 宽度取值范围 : 1 - 65535 限制最大字符串长度 - text / longtext(4G) /blob /longblob
- char 和 varchar的特点
- char :浪费存储空间, 性能高
- varchar: 节省存储空间, 性能低
- 字符类型的宽度和数值类型的宽度的区别
- 数值类型宽度为显示宽度, 只用于select查询时显示, 和占用存储无关, 可用zerofill设置用0填充
例 id int(3) zerofill,(不够3个数左补零) - 字符类型的宽度超过后无法存储
3. 枚举类型
- 单选enum
sex enum('值', '值',...) DEFAULT '值', - 多选set
likes set('值', '值',...)
枚举类型使用示例
create table students( id int(3) zerofill,
name char(15),
age tinyint unsigned,
sex enum('male', 'female', 'secret'),
likes set('ml','killtime','sm','kickyouass'), score float(3,1)
)character set utf8;
指定为SET('one', 'two') NOT NULL
的列可以有下面的任何值:
''
'one'
'two'
'one,two'
4. 日期时间类
- date : 'YYYY-MM-DD'
- datetime : 'YYYY-MM-DD HH:MM:SS'默认值NULL
- timestamp : "YYYY-MM-DD HH:MM:SS"默认值CURRENT_TIMESTAMP
- time : 'HH:MM:SS'
1. 日期时间函数
- now()函数, 返回服务器当前日期时间"YYYY-MM-DD HH:MM:SS"
curdate() 当前日期'YYYY-MM-DD' curtime() 当前时间'HH:MM:SS'
- date('1999-09-09 09:09:09') 提取 年月日
- time('...') 提取 时分秒
year('...') 提取 年
select * from t2 where date(cztime) > '2018-08-00' ;
select * from t2 where date(cztime) <'2018-09-01' and date(cztime) > '2018-08-00';
2. 日期时间运算
1. 语法格式
select * from 表名
where 字段名 运算符(时间-interval 时间间隔单位);
时间间隔单位:2 day | 3 hour | 1 minute | 2 year | 3 month
- 示例
- 查询1 天以内的充值记录
select * from t2 where
cztime >= (now()-interval 1 day); - 查询1年以前的充值记录
select * from t2 where cztime < (now()-interval 1 year); - 查询1天以前, 3天以内的充值记录
select* from t2 where cztime cztime <= (now()-interval 1day) and cztime >= (now() - interval 3 day );
- 查询1 天以内的充值记录
3. 运算符操作
- 数值比较&&字符比较&&逻辑比较
- 数值比较: = != > >= < <=
- 字符比较: = !=
- 逻辑比较:and or
- 范围内比较
- between 值1 and 值2
- in(值1, 值2)
- not in(值1, 值2)
- 匹配空 和 非空
- 空: is null
- 非空: is not null
- 注意
- NULL :空值 , 只能用is, is not去匹配
- "" : 空值字符串,只能用 =, != 去匹配
- 模糊查询(like)
- where 字段名 like 表达式
- 表达式
- _: 匹配单个字符
- %: 匹配0到多个字符