MySQL 概述和基础
MySQL 概述
什么是数据库
- 存储数据的仓库
都有哪些公司在用数据库
- 金融机构、游戏网站、购物网站、论坛网站……
提供数据库服务的软件
MySQL、Oracle、SQL Server、DB2、MongoDB、MariaDB
如何选择使用那个数据库软件
1、是否开源
- 开源:MySQL、MariaDB、MongoDB(游戏网站、购物网站、论坛网站)
- 商业软件:Oracle、DB2、SQL Sever(政府部门、金融机构)
2、是否跨平台
- 不跨平台:SQL Server
MySQL的特点
- 关系型数据库
- 关系型数据库特点
- 数据是以行和列(表格)的形式去存储的
- 表中的每一行叫做一条记录,每一列叫做一个字段
- 表和表之间的逻辑关联叫关系
- 关系型数据库的核心内容是关系即二维表
- 示例
- 关系型数据库存储
姓名 年龄 班级
小明 25 三班
小张 25 六班``` ```表2、班级信息表
班级 班主任
三班 老李
六班 老白```
- 非关系型数据库中存储
{"姓名":"小明","年龄":25,"班级":"六班","班主任":"老李"}
- 关系型数据库存储
- 关系型数据库特点
- 跨平台
- 可以在Unix、Linux、Windows上运行数据库服务
- 支持多种编程语言
- python、java、php……
- 关系型数据库
数据库软件、数据库、数据仓库的概念
- 数据库软件
- 一个软件、看得见、可操作、实现数据库的逻辑功能
- 数据库
- 一个逻辑概念,用来存放数据的仓库,侧重存储
- 数据仓库
- 从数据量来熟,比数据库庞大的多,主要用于数据分析和数据挖掘
网购:
- 数据库:user表
- 数据仓库:那个时间段用户登录量最多……- 数据库软件
MySQL 安装
Ubuntu安装MqSQL服务
- 安装服务端
sudo apt-get install mysql-server - 安装客户端
sudo apt-get install mysql-client - Ubuntu安装软件
sudo apt-get update
- 访问源列表中的每个网址,读取软件列表,保存到本地/var/lib/apy/lists/
sudo apt-get upgrade
- 把本地已安装与刚下载的软件列表进行对比,如果发现已安装软件版本过低,则更新
sudo apt-get -f install
- 修复依赖关系
- 安装服务端
Windows安装MySQL服务
- 下载MySQL安装包(windows)
- mysql-installerxxxx.msi
- 下载MySQL安装包(windows)
启动和连接MySQL服务
服务端启动
- 查看MySQL状态
sudo /etc/init.d/mysql status
sudo /etc/init.d/mysql start stop restart
- 查看MySQL状态
客户端连接
- 命令格式
mysql -h主机地址 -u用户名 -p密码
mysql -hlocalhost -uroot -p123456(本地连接可省略h选项)
- 命令格式
基本的SQL命令
使用规则
- SQL每条命令必须以";"结尾
- SQl命令不区分大小写
- 使用 "\c" 来中止当前命令的执行
macOS存放位置
- mac中添加环境:
PATH="$PATH":/usr/local/mysql/bin - 数据库目录:
/usr/local/mysql/data
Linux存放位置
- 数据库目录:
/var/lib/mysql
库的管理
库的基本操作
查看已由库
show databases;创建库(指定字符集)
create database 库名 [character set utf8];查看创建库的语句(字符集)
show create database 库名查看当前所在库
select database();切换库
use 库名;查看库中已有表
show tables;删除库
drop database 库名;
库名的命名规则
- 数字、字母、下划线,但不能使用纯数字
- 库名区分字母大小写
- 不能使用特殊关键字和mysql关键字
表的管理
- 表的基本操作
查看已有表
show tables;创建表(指定字符集)
create table 表名(
字段名 数据类型,
字段名 数据类型,
...
字段名 数据类型)character set utf8;查看已有表的字符集
show create table 表名;查看表结构
desc 表名删除表
drop table 表名;
表记录管理
insert 插入:
- insert into 表名 values(值1),(值2),...;
- insert into t1 values(1, 'Lucy', 90),(2, 'Green',86);
- insetr into 表名(字段1,...) values(值1),...;
- insert into t1(name,score) values('Peter',100); # id默认为空select 查询:
- select * from 表名 [where 条件];
- select 字段1,字段2, from 表名 [where 条件];alter 修改:
- 语法:
alter table 表名 执行动作;
- 添加字段(add)
alter table 表名 add 字段名 数据类型;
alter table 表名 add 字段名 数据类型 first;
alter table 表名 add 字段名 数据类型 after 字段名;
- 删除字段(drop)
alter table 表名 drop 字段名;
- 修改类型(modify)
alter table 表名 modify 字段名 新数据类型;
- 表重命名(rename)
alter table 表名 rename 新表名;练习:
1、查看所有库
2、创建新库 studb
3、在 studb 中创建表 tab1 ,指定字符集utf8,字段有id、name、age
4、查看tab1的表结构
5、在tab1中随便插入两条记录
6、在tab2中的name、age两个字段插入两条记录
7、查看tab1中所有记录
8、查看tab1中所有人的姓名和年龄
9、查看tab1表中年龄大于20的信息
如何更改默认字符集
(Ubuntu):
- 获取root权限
sudo i
cd /etc/mysql/mysql.conf.d/ - 备份
cp mysqld.cnf mysqld.cnf.bak - subl mysqld.cnf
[mysqld]
character_set_sever = utf8 - 重启mysql服务
/etc/init.d/mysql restart
- 获取root权限
(macOS):
vim /etc/my.cnf
[mysqld]
character_set_server = utf8
数据类型
- 能存所有的,包括音频视频,但是一般存一个路径就好了
数值类型
整型
- int 大整型(4个字节)
- 取值范围:2**32-1(42亿多)
- tinyint 微小整型(1个字节)
- 有符号(signed默认):-128~127
- 无符号(unsigned):0~255
- 例如:age tinyint unsigned;
- smallint 小整型(2个字节)
- bigint 极大整型(8个字节)
- 取值范围:2**64-1
- int 大整型(4个字节)
浮点型
- float(4个字节,最多显示7个有效位)
- 用法:
字段名 float(m,n) m->总位数 n->小数位位数
float(5,2)取值范围是:-999.99~999.99
- 用法:
- decimal(最多显示28个有效位)
- decimal(m,n)
- 存储空间(整数、小树分开存储)
- 规则:将9的倍数包装成4个字节
余数 字节
0 0
1-2 1
3-4 2
5-6 3
7-9 4
示例:decimal(19,9)
整数部分:10/9=1...1 4个字节+1个字节=5个字节
小数部分:9/9=1...0 4个字节+0个字节=4个字节
占:9字节
- 规则:将9的倍数包装成4个字节
- float(4个字节,最多显示7个有效位)
字符类型
char(定长)
- 取值范围:1~255
- name char(10) 会在后面加空格,始终是10个字符的大小
- 浪费存储空间,但是效率高
varchar(变长)
- 取值范围:1~65535
- varchar(10) 会根据大小来开辟空间
- 节省存储空间,但是效率低
text / longtext(4G) / blob / longblob(4G)
注意:
- 浮点型,插入整数时会自动补全小数位数
- 小数位数多于指定位数,会对下一位进行四舍五入
数值类型宽度为显示宽度,只用于select查询显示,和占用内存无关,可用zerofill(用零填充)查看效果。
字符类型的宽度超过之后则无法存储
枚举类型
单选(enum):
字段名 enum(值1,值,2,...)多选(set):
字段名 set(值1,值,2,...)create table t5(
id int(3) zerofill,
name varchar(15),
sex enum("M","F","Secret"),
likes set("F","M","Study","Python")
);
多选插入记录时要insert into t1(likes) values("F,Study,Python");
日期时间类型
- date:"YYYY-MM-DD"
- time:"HH:MM:SS"
- datetime:"YYYY-MM-DD HH:MM:SS"
- timestamp:"YYYY-MM-DD HH:MM:SS"
datetime不给值默认返回NULL
timestamp不给值默认返回系统时间
create table t7(
id int,
name varchar(15),
birthday date,
money int,
shijian datetime) insert into t7 values(1, "小明", 19900910, 5000, 20180731090000);
日期时间函数
- now() 返回服务器当前时间
- curdate() 返回当前日期
- curtime() 返回当前时间
- year(date) 返回指定时间的年份
- date(date) 返回指定时间的日期
- time(date) 返回指定时间的时刻`select * from t7 where date(shijian)='20180712';`
`select * from t7 where date(shijian)>'20180712 and ....';`
日期时间的运算
- select * from 表名 where 字段名 运算符(时间-interval 时间间隔单位);
- 时间间隔单位:
1 day/ 2 hour/ 1 minute/ 2 year/ 3 month1、查询1天以内的记录
select * from t7
where shijian > (now()-interval 1 day) 2、查询一年以前的记录
select * from t7
where shijian < (now()-interval 1 year) 3、查询1天以前,3天以内的记录
select * from t7
where shijian <(now()-interval 1 day) and
where shijian >(now()-interval 3 day;
MySQL 概述和基础的更多相关文章
- MySQL 调优基础(一) CPU与进程
一般而言,MySQL 的调优可以分为两个层面,一个是在MySQL层面上进行的调优,比如SQL改写,索引的添加,MySQL各种参数的配置:另一个层面是从操作系统的层面和硬件的层面来进行调优.操作系统的层 ...
- (2.16)Mysql之SQL基础——函数
(2.16)Mysql之SQL基础——函数 关键词:mysql函数,mysql自定义函数,mysql聚合函数,mysql字符串函数,mysql数值函数 1.自定义函数 -- (1)一般形式 creat ...
- (2.15)Mysql之SQL基础——开发设计最佳规范
(2.15)Mysql之SQL基础——开发设计最佳规范 关键字:mysql三大范式,mysql sql开发规范 分析: show profile.mysqllsla.mysqldrmpslow.exp ...
- (2.14)Mysql之SQL基础——游标
(2.14)Mysql之SQL基础——游标 关键词:Mysql游标 -- (1)定义游标 declare cur_name cursor for select * from table_name wh ...
- (2.13)Mysql之SQL基础——触发器
(2.13)Mysql之SQL基础——触发器 关键词:Mysql触发器 1.一般形式 -- 0.查看触发器[1]SHOW TRIGGERS;[2]SELECT * FROM `information_ ...
- (2.11)Mysql之SQL基础——存储过程与变量
(2.11)Mysql之SQL基础——存储过程 关键字:mysql存储过程 查看存储过程: []SELECT * FROM information_schema.ROUTINES WHERE ROUT ...
- (2.10)Mysql之SQL基础——约束及主键重复处理
(2.10)Mysql之SQL基础——约束及主键重复处理 关键词:mysql约束,批量插入数据主键冲突 [1]查看索引: show index from table_name; [2]查看有约束的列: ...
- (2.9)Mysql之SQL基础——索引的查看与删除
(2.9)Mysql之SQL基础——索引的查看与删除 关键词:mysql索引查看,mysql索引删除 1.索引查询(以下包括主键,唯一,普通,复合,全文,但不包括外键) (1)按库查询 select ...
- (2.8)Mysql之SQL基础——索引的分类与使用
(2.8)Mysql之SQL基础——索引的分类与使用 关键字:mysql索引,mysql增加索引,mysql修改索引,mysql删除索引 按逻辑分类: 1.主键索引(聚集索引)(也是唯一索引,不允许有 ...
随机推荐
- java 链接server上的 mongodb 出现 connect time out 问题
异常信息 十二月 22, 2014 5:27:58 下午 com.mongodb.DBTCPConnector initDirectConnection 警告: Exception executing ...
- vim 技巧之用宏命令批量处理文件
今天遇到了一种情况,就是我需要同时修改34个文件中的某些字符串的内容,如果一个个打开需改的话,那也太麻烦了.后来就想着能不能通过vim的宏命令来修改呢?现在就总结下关于宏在文件列表中的应用1.首先,我 ...
- c++中sizeof()的用法介绍
1. 定义 sizeof是一个操作符(operator). 其作用是返回一个对象或类型所占的内存字节数. 2. 语法 sizeof有三种语法形式: 1) sizeof (obje ...
- Java_Learn
20180417 集合类 Collection 如果是实现了list接口的集合类,具备的特点是有序,可重复: 如果是实现了set接口的集合类,具备的特点是无序,不可重复: Collection中的方法 ...
- hbase xshell
用Xshell登陆linux主机后,在hbase shell下死活不能使用backspace和delete删除误输的指令,只得不停退出,重登,仔细输..又错了,再退出,再登,仔细输...又错了...又 ...
- 在Xampp中添加memache扩展
1.首先下载phpmemcache,地址为: http://up.2cto.com/2012/0522/20120522094758371.rar 解压下的文件,解压后有以下文件: 接着以管理员身份打 ...
- Python day3 知识回顾
names = ["Jonathen","Joesph","Jotaro","Josuke",["Mea&qu ...
- 关于Blocking IO,non-Blokcing IO,async IO的区别和理解
来源:http://shmilyaw-hotmail-com.iteye.com/blog/1896683 概括来说,一个IO操作可以分为两个部分:发出请求.结果完成.如果从发出请求到结果返回,一直B ...
- .Net中的缓存依赖配置
缓存--能非常好的提高网站的性能. 在訪问量大,但更新较少的站点中使用缓存,能够大大提高执行效率. 在.net中给我们提供了非常好的缓存机制.页面缓存.数据缓存,还有非常好的依赖缓存. 依赖缓存优点就 ...
- 图片裁剪的js有哪些(整理)
图片裁剪的js有哪些(整理) 一.总结 一句话总结:如果用了amaze框架就去amaze框架的插件库里面找图片裁剪插件,如果没用,jcrop和cropper都不错. 1.amazeui的插件库中有很多 ...