初学mysql(原创)

110 阅读9分钟

1.数据库

数据库(Database)DB是按照数据结构来组织、存储和管理数据的仓库,每个数据库还具有一个或者多个API用于创建和管理或者复制我所保存的数据,之前我们可以将数据存储到本地文件中(序列化) 但是再本地文件中读写速度特别慢 不适合大量的数据存储 所以存储到数据库是最好的方式, 主要分为两种:

  • 关系型数据库
  • 非关系型数据库(nosql数据库)

1.1 关系型数据库

关系型数据库: 建立在关系模型基础的上的,关系模型就是二维表的方式进行存储 类似于excel表格 常见关系型数据库:

  • mysql
  • sql server
  • oracle
  • db2
  • 达梦
  • GaussDB

1.2 非关系型数据库

非关系型数据库(nosql): 没有特定的关系,不需要创建表结构,存储的数据之间也可以没有关系 适合存储海量的 复杂的 碎片化数据 读写速度特别快 所以一般是基于内存操作的

常见的非关系型有哪些:

  • redis
  • mongodb

2.1 Navicat快捷键

 1.ctrl+q   打开查询窗口
 2.ctrl+/   注释sql语句  -- 
 3.ctrl+shift+/ 取消注释sql语句  
 4.ctrl+r   运行查询窗口所有sql语句
 5.ctrl+shift+r 只会运行选中的sql语句
 6.ctrl+l   删除一行
 ...

3.Mysql

mysql是一种关系型数据库,是由瑞典Mysql AB公司研发的, 目前属于Oracle公司

优势:

  • mysql开源的,免费的
  • mysql支持大型的数据量存储,可以处理5千万级的数据
  • mysql使用标准sql语言格式(其他数据库如果也支持语法基本是一样)
  • mysql看可以运行在多个系统上 ,并且支持各种语言C C++ java Python...
  • mysql是可以定制化的,你可以修改源码开发属于自己公司mysql系统

4.Sql语句分类 --- 笔试题

  • DDL:数据定义语言,用于创建和删除数据库对象的命令(创建数据库 创建表 创建视图 创建索引 创建触发器 创建函数...) 共同特性不能回滚事务

    比如: create(创建) drop(删除) alter(修改) truncate(截断表)

  • DML:数据操作语言,用于操作(增 删 改)数据库表中的数据

    比如: insert(新增数据) delete(删除数据) update(修改数据)

  • DQL:数据查询语言,用于查询数据库表中的数据

    比如: select(查询数据) --- 最常用 最难得

  • DCL:数据控制语言,用来控制数据库组件许可或者权限

    比如: grant(授权) revoke(撤销权限)

  • TCL:事务控制语言,用于提交事务或者回滚事务得

    比如: commit(提交) rollback(回滚/撤销)

5.DDL语言

5.1 create命令创建表:

 -- 语法规则:  [] 可有可无
 -- 创建   表关键字
 create    table     表名(
 字段1   数据类型  [约束]  [索引]  [注释] ,
 字段2   数据类型  [约束]  [索引]  [注释] ,
 ...
 字段n   数据类型  [约束]  [索引]  [注释]     
 ) [表类型] [表字符集][注释] ;
 ​
 ​
 CrEaTe table student(
 stuno  int  comment '学生编号',
 stuname  varchar(100) comment '学生姓名',
 money  double(10,2) comment '学生存款',
 time  date comment '入学时间'
 )comment='学生表';

注:关键字是table , 字段和字段之间通过"," 结束语通过";"

5.2 alter命令修改表

 --  修改表名:
 alter table 旧表名 rename 新表名;
 --  添加字段:
 alter table 表名 add 字段名 类型;
 --  修改字段:
 alter table 表名 change 原字段名 新字段名 类型;
 --  删除字段:
 alter table 表名 drop 字段名;

5.3 drop命令删除表

 drop table 表名;

6.DML语言

6.1 insert命令新增数据

 --新增语法1: 指定字段插入
 insert into 表名 (字段1,字段5,字段3) values (值1,值5,值3);
 --注: 前面声明得字段 必须和后面值是一一对应
 --新增语法2: 全字段插入
 insert into 表名 values(值1,...,值n);
 --注: 全字段新增 后面的值 必须和表声明的字段一一对应
 --新增语法3:  批量插入
 insert into 表名 (字段1,字段5) values(值1,值5),(值1,值5),(值1,值5);
 insert into 表名 values(值1,...,值n) , (值1,...,值n), (值1,...,值n);
 --新增语法4: 借助于select特点实现批量插入
 insert into 表  select1,...,值n  union
                 select1,...,值n  union
                 select1,...,值n ;

6.2 update语句

 语法:
 update 表名 set 字段1=1,字段2=2 ... where 条件;
 注: where 后面的条件 一般来说必须要加 否则全表更新  
 条件目的: 就是限制数据集 比如: > < = 来进行控制 

6.3删除语句

 语法:
 delete from 表名 where 条件
 注: 删除必须添加条件  否则全表删除

7.Mysql数据类型 ---面试题

  • 数值类型:
类型大小介绍
smallint2字节小整型
int4字节整型
bigint8字节大整型
float4字节单精度
double8字节双精度
decimal(参数)31字节精确数值浮点型
  • 字符串类型:

    类型大小介绍
    char255个字符定长字符串
    varchar65535字节 根据不同字符集存储的字符个数是不同的变长字符串
    text65535个字符长文本类型
    blob2的16次方-1字节,将文件转换成二进制保存,但是不推荐存储数据库 推荐存储云服务器或者文件服务器 数据库只需要存储地址二进制类型
    ......
    • char类型和varchar类型区别---面试题

      char是属于定长类型,无论存储多少数据所占的空间是固定的 比如:char(10)存储"1"字符也会占10个 比较浪费空间 适合存储一些长度固定的数据 比如:性别 状态

      varchar是属于变长类型,所占的空间是根据存储数据决定的 比如:varchar(1000)存储'1'字符也只会占1个 比较节省空间

  • 日期类型:

类型格式介绍
dateYYYY-MM-DD %y %m %d日期值
timeHH:mm:ss时间值
yearYYYY年份值
timestampYYYY-MM-DD HH:mm:ss时间戳
datetimeYYYY-MM-DD HH:mm:ss日期时间值
  • timestamp和datetime区别 ---面试题

    • 容量不同:timestamp占四个字节datetime在5.6之后占5个字节
    • 存储不同:timestamp存储的值转换成UTC的时间再进行存入 datetime不会转换 给什么存什么
    • 存储null: timestamp如果存储null自动转换now(),datetime不会给什么存什么
    • 存储now():timestamp可能与当前时间不一致 因为它会把当前时间转换成UTC来存储 datetime 不会转换 和当前时间是一致的

8.DQL --重点

多表连接查询单独放在下一篇文详解

8.1基础查询

 基本语法:[]可有可无 只要写了 前后顺序不能颠倒
 select 查询的字段,字段2,...   from 表名或者视图名
 [where 分组前条件]
 [group by 分组的字段]
 [having 分组后条件]
 [order by 排序的字段 升序(ASC)或降序(DESC)]
 [limit [起始下标,]行数];

8.2 where子句

就是将前面的查询结果做第一次筛选

 1.查询范围      mysql逻辑运算符: and or not
 select * fromwhere 成绩>60;
 select * frmo 表 where 成绩>60 and 成绩<80
 -- 属于闭区间 包括80和90
  select * frmo 表 where between 60 and 80
 2.筛选是否为null值
 select * fromwhere 字段 is null
 select * fromwhere 字段 is not null
 3.筛选不等于
 select * fromwhere 科目编号 !='java';
 select * fromwhere 科目编号 <>'java';  --不存在 ><
 4.筛选等于  或者等于多个值
 select * fromwhere 部门编号=20;
 -- 统计10 30 50部门的员工信息
 select * fromwhere 部门编号=10 or 部门编号=20 or 部门编号=50
 -- 简化写法 in()函数 等价于或者的意思
 select * fromwhere 部门编号 in(10,30,50);

8.3 like子句

如果做查询时,这个条件如果不具体

 语法:
 select 查询字段 fromwhere 字段 like ???;
 - :表示一个字符 一般情况确定 位数时使用
 % :可以表示0-n个字符 一般情况下不确定位数时使用
 比如:
 '%a' : 是a字符结尾
 'a%' : 是a字符开头的
 'a__': 长度是3 以a字符开头
 '%a_': 倒数第二个字符是a
 '%a%': 包含a字符的内容   后期做搜索功能最多的实现

8.4 union子句

mysql中union用于链接多个select语句的结果集 最终合并成一个结果集

特点: 浙西select语句如果有重复的数据会自动去重,并且还可以实现数据库列转行

 语法:
 select 字段1,字段2 from 表
 union
 select 字段1,字段2 from 表
 语法2:如果不想去除多个结果集重复数据 使用union all

注:要求多个查询语句的个数必须是一样的,跟字段类型没有关系

8.5 order by子句

数据库本身的数据默认无序的,因为不知道该用什么规则排序,如果想排序 需要通过关键字order by来实现,并且排序关键字是有先后顺序的 一般是写在除了limit语句的最后

 语法:
 order by 排序的字段 排序规则:
 排序规则: ASC升序(默认值) DESC降序

8.6 limit子句

limit是mysql中用于通过下标(索引值)来限定查询条数的一种方式,它后期也是实现数据分页非常重要的途径,并且limit一般要写在sql语句末尾

 语法:
 limit [起始索引值,]查询条数;
 比如:查询一张表 每页实现5条 查询第三页数据
 limit 10,5 //10表示下标为10的数据开始查询,查询5条
 比如:查询一张表 前10条数据
 limit 0,10;或者 limit 10;

9.mysql约束 --面试题

约束:

  • 非空约束:not null 保证字段不能为空

  • 默认约束:default保证字段一定会有值,如果没有插入 设置成默认值 如果插入null也算插入了值

  • 唯一约束:unique 保证字段唯一性 但是数据是可以为空的,并且 唯一约束 还会自动添加唯一索引

  • 检查性约束:check 是用于给字段做一些简单校验 但是mysql会失效,语法是通过的 但是没有效果

  • 主键约束:primary key(pk) 用于控制数据唯一的方式,主键约束自带唯一和非空两种功能 但是主键约束每张表只能写一个 并且主键约束也会自动添加索引 叫做主键索引

  • 外键约束:foreign key(fk) 定义在具有父子关系的子表中,子表中的外键必须对应父表中的主键(或者唯一键) 目的是为了确保数据的完整性 并且外键可以重复可以为null

    前提:添加外键时,一定是先创建父表再创建子表

 1.
 2.表已存在 添加约束
 alter table 
 alter table 表名 modify  字段 加字段类型 not null;
 alter table 表名 add 字段 check();
 alter table 表名 alter column 字段 set default 12;
 alter table 表名 add foreign key(city_id) references city(id);