MySql基础
1、初识Mysql
1.1 什么是数据库
数据库(DataBase):长期存放在计算机内,有组织,可共享的大量数据的集合,是一个数据“仓库”
数据库的作用:保存,并能安全管理数据,减少冗余
数据库分类:
- 关系型数据库(SQL)
- MySQL,Oracle,SQLServer.....
- 关系型数据库通过外键关联来建立表与表之间的联系
- 非关系型数据库(NOSQL)->Not Only SQL
- Redis,MongoDB...
- 非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定
1.2 什么是DBMS
数据库管理系统(DataBase Management System):数据库管理软件,科学组织和存储数据,高效的获取和维护数据。
2、操作数据库
2.1 结构化查询语句分类
名称 | 作用 | 命令 |
---|---|---|
DDL(Data Definition Language)数据定义语言 | 定义和管理数据对象,如数据库,数据表 | create,drop,alter |
DML(Data Manipulation Language)数据操作语言 | 操作数据库对象中所包含的数据 | insert,update,delete |
DQL(Data Query Language)数据查询语言 | 查询数据库数据 | select |
DCL(Data Control Language)数据控制语言 | 管理数据库的语言,包括权限管理以及数据更改 | grant,commit,rollback |
2.2 数据库操作
命令行操作数据库
创建数据库:create database [if not exists] 数据库名;
删除数据库:drop database [if exists] 数据库名;
查看数据库:show database;
使用数据库:use 数据库名;
2.3 创建数据表
语法:
create table [if not exists] `表名`(
’字段名‘ 类型 [属性][索引][注释],
’字段名‘ 类型 [属性][索引][注释],
......
’字段名‘ 类型 [属性][索引][注释]
)[表类型][表字符集][注释]
2.4 数据值和列类型
数值类型
类型 | 取值范围 | 存储空间占用 |
---|---|---|
tinyint(非常小的数据) | 有符号:-2~2-1 无符号:0~2 8-1 |
1Byte |
smallint(较小的数据) | 有符号:-215~215-1 无符号:0~216-1 |
2Byte |
mediumint(中等大小的数据) | 有符号:-223~223-1 无符号:0~224-1 |
3Byte |
int(标准整数) | 有符号:-231 ~231 -1 无符号:0~232-1 |
4Byte ----常用 |
big(大整数) | 有符号:-263~263-1 无符号:0~264-1 |
8Byte |
float(单精度浮点数) | 4Byte | |
double(双精度浮点数) | 8Byte | |
decimal(字符串形式的浮点数) | decimal(m,d) | m个字节 ----,金融计算用,无精度问题 |
字符串类型
类型 | 说明 | 最大长度 |
---|---|---|
char | 固定长度的字符串,检索快但费空间, 0<=M<=255 |
M字符 |
varchar | 可变字符串0<=M<=65535(2^16) | 变长度 -----常用 |
tinytext | 微型文本串M<=255 | 2^8-1字节 |
text | 文本串 | 2^16-1字节 ----用于存储大文本 |
日期和时间型数值类型
类型 | 说明 | 取值范围 |
---|---|---|
date | YYYY-MM-DD,日期格式 | 1000-01-01~9999-12-31 |
time | HH:mm:ss,时间格式 | -838:59:59~838:59:59 |
datetime | YY-MM-DD hh:mm:ss | 1000-01-01 00:00:00至 9999-12-31 23:59:59 |
timestamp | YYYYMMDDhhmmss格式表示的时间戳 | 1970-01-01 00:00:01到2038-01-19 03:14:07 |
year | YYYY格式的年份值 | 1901~2155 |
2.5 数据字段属性
UnSigned
- 无符号的
- 声明该数据列不允许负数
ZEROFILL
- 0填充
- 不足位数的用0来填充,如int(3),5则为005 ----建立数据库时int类型的长度就是用在此处,长无影响,短则补0
Auto_InCrement
- 自动增长的,每添一条数据,自动在上一个记录数上加一(默认)
- 通常用于设置主键,且为整数类型
- 可定义起始值和步长
- 当前表设置步长(AUTO_INCREMENT=100):只影响当前表
- SET @@auto_increment_increment=5;影响所有使用自增的表(全局)
NULL和NOT NULL
- 默认为NULL,即没有插入该列的数值
- 如果设置为NOT NULL,则该列必须有值
DEFAULT
- 默认的
- 用于设置默认值
-- 每个表必须存在的字段 阿里规范
id 主键
`version` 乐观锁
is_delete 伪删除
gmt_crate 创建时间
gmt_update 修改时间
创建表时列的注释关键字:COMMENT
常用的逆向命令
--查看数据库的定义
show create database 数据库名;
--查看数据表的定义
show create table 表名;
--显示表结构
DESC 表名;
2.6 数据表的类型
常见类型:InnoDB,MyISAM...等对比:
名称 | MyISAM(旧) | InnoDB(新) |
---|---|---|
事务处理 | 不支持 | 支持 |
数据行锁定 | 不支持(表锁) | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 支持 |
表空间大小 | 较小 | 较大,约2倍 |
适合场合 | 节约空间及响应速度 | 安全性,事务处理及多用户操作数据表 |
文件 | .frm表结构定义文件 .MYD数据文件 s*.MYI索引文件 |
只有*.frm以及上一级目录的ibdata1文件 |
2.7 修改数据库
修改表(ALTER TABLE)
-- 修改表名
alter table 旧表名 rename sa 新表名
-- 添加字段
alter table 表名 add 字段名 列属性 [属性]
-- 修改约束
alter table 表名 modify 字段名
-- 改名 也可同时改约束
alter table 表名 change 旧字段名 新字段名 [列类型 [属性] ]
删除数据表
-- if exists为可选用于判断是否存在该数据表 如果删除不存在的数据表会抛出错误
drop table [if exists] 表名;
其他
1 可以用反引号(`)为标识符包裹,以避免与关键字重名,中文也可以作为标识符(不推荐)
2 每个库目录存在一个保存当前数据库的选项文件db.opt中
3 sql注释
/* */多行注释
-- 单行注释
4 模式通配符
_任意单个字符
%任意多个字符
单引号需要进行转义 \'
5 SQL对大小写不敏感(关键字)(在Mac和Windows上大小写完全不敏感,但是在Linux上标识符大小写敏感)
3、MySQL数据管理
3.1 外键
外键概念
将一个表的值放入第二表表示关联,所使用的的值是第一个表的主键值。此时。第二个表中保存这些值的属性被称为外键(foregin key)
外键作用
保持数据一致性,完整性,主要目的是控制存储在外键表中的数据,约束。使两张表形成关联,外键只能引用外表中的列的值或使用空值。
创建外键
-- 方法1:创建表时创建
foreign key(子表的外键字段) references 父表的表名(父表的主键的字段名)
-- 方法2:建表后增加
alter table 子表的数据表名 add foreign key(子表的外键名称) references 父表的数据表名称(父表的主键名称)
删除外键
-- 删除具有主外键关系的表时,要先删除子表,再删除主表
alter table 表名 drop foreign key 外键名
3.2 DML语言
数据库的意义:数据存储,数据管理
DML语言:数据操作语言
- insert(添加数据语句)
- update(更新数据语句)
- delete(删除数据语句)
3.3 添加数据
-- 添加数据可添加多条
insert into 表名[(字段1,字段2,.....)] values (值1,值2,....)[,(值1,值2,....)]
注意:
- 字段或值之间用英文逗号隔开
- 添加的值务必与表结构,数据列,顺序相对应且数量一致
- 可同时插入多条数据,values后用英文逗号隔开
3.4 修改数据
update 表名 set 列名=值 [where ....]
3.5 删除数据
-- 如果无条件则删除表中所有数据
delete from 表名 [where ....]
--用于完全清空表数据,但表结构,索引,约束不变
truncate [table] 表名
两者区别:truncate重新设置计数器而delete的计数器仍会在原来基础上继续,使用truncate不会对事物有影响,truncate速度更快
4、使用DQL查询数据
DQL语言
语法
-- select 语法
select [distinct] 数据列
from 表名 [as 别名]
[left|right|inner join 表名] -- 连表查询
[where ...] -- 判断条件(不能使用聚合函数
[grouo by ...] -- 结果按那几个字段分组
[having] -- 过滤分组的记录必须满足的次要条件(可以使用聚合函数
[order by] -- 指定查询记录按一个或者多个条件排序 DESC降序 ASC升序
[limit 起始条数,显示条数]
distinct的作用:去掉select语句查询返回的记录结果中重复的记录(所有返回列的值都相同的)只返回一条
as的作用:可以给表,列起别名,可以把经计算或总结的结果用另一个新名称来代替
where条件语句:
操作符 | 语法 | 作用 |
---|---|---|
= | a=b | 等于 |
<>或!= | a!=b | 不等于 |
> | a>b | 大于 |
< | a | 小于 |
>= | a>=b | 大于等于 |
<= | a<=b | 小于等于 |
between | between 5 and 10 | 在某个范围之间 |
and或&& | 5>1 and(&&) 1>0 | 逻辑与,同真则真,一假为假 |
or或|| | 5<1 or(||) 1<5 | 逻辑或,同假则假,一真为真 |
in | a in (.....) | a等于...中某一个则为真(具体值不能用%,_) |
not或! | not a或!a | 逻辑非 |
is null | a is null | 为null则为真(不能用=null) |
is not null | a is not null | 不为null则为真 |
like | a like b | 若a匹配b则为真(可以用%,)(%代表0到任意个字符。代表一个字符) |