MySQL基础

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到任意个字符。代表一个字符)

你可能感兴趣的:(MySQL基础)