栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mysql从零到入土01

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mysql从零到入土01

sql基础语法

一.SQL(结构化查询语言)

1.mysql是一个数据库管理系统,可以科学有效的管理我们的数据,安装在操作系统上。

2.优点

简单易学体积小

二.关系型数据库与非关系型数据库

1.关系型:mysql,oracle,SqlServer,db2

(通过表与表,行与列之间的关系进行数据的存储)

2.非关系型数据库:Redis,mongDB

(用对象的方式进行存储,通过对象的自身属性来决定数据)

三.SQL的分类

1.DDL(定义):操作库,表,列

 操作库:

create database if not exists `库名` character set utf8;

drop database `库名`(要备份);

alter databases character set utf8;use `库名`;

show databases;show create databases `库名`;

操作表:

create table `表名`(列名 数据类型,。。。);

drop table if not exists `表名`;

alter table `表名`+rename to`新表名`/character set gbk/

          add `列名` int / modify `新列名`int / drop `列名`;

show tables;show create table `表名`;desc `表名`;(查看表的结构)

2.DML(操作):操作表里的数据

insert into `表名`(列名,...)valus(值,...);

  1. values  不能写成 value
  2. 在mysql中单引号和双引号都是支持的,但是我们推荐使用单引号
  3. 除了整数和小数,其他数据类型都要用单引号引起来
  4. 如果insert语句添加带中文的数据报错了,那么要考虑数据库和表的字符集
  5. 列名和值要一一对应(注意类型)
  6. 简化写法:省略表名后面的小括号,如果省略不写,默认表示要添加所有的列信息

delete from`表名`where+删除条件; turncate table `表名`;(删除时效率更高)

update `表名` set 列名=值,... where+修改条件;

3.DQL(查询):查询表里的数据

Select 属性列表

From 表名

join 联表

Where 条件语句

Group by 分组字段

having 过滤分组后的信息

Order by  排序字段

Limit分页属性

1.基础select

select `字段`from `表名`; `*`表示所有的(凡是带星的效率都偏低)

2.去重select

select  distinct `字段`from `表名`;

3.计算查询

*Null值与任何数值做四则运算,结果null。

*字符串和任何数值做四则运算,字符串为0

IFNULL(你要判断的值,你想要替换的值)

3.5联表查询

当一张表无法满足我们的查询需求时就需要从多张表中查询

隐式内连接

select * from `表名1` as t1,`表名2` as t2

where t1.`字段`=t2.`字段`;

(此种方式查会产生笛卡尔积,造成查询数据冗余,效率低)

   显示内连接

   select `字段列表`

   from `表名1` as t1 inner/left join `表名2` as t2

    on 条件

自连接

自己的表和自己一分为二

4.where 条件select

>  >=  < <=  =  !=

Between...and

In 在...里面 a in (a1,a2,...) a在其中返回true(效率比较低)

Is null

Is not null  

And  &&

Or   ||

Not

(SELECT * FROM emp WHERe sal IN (1100,1600);   #  in 效率略低)

5.模糊select

select * from `表名` where `列名` like '_k%';

5.5 子查询(嵌套查询)

SELECt * FROM emp WHERe sal = (SELECt MAX(sal) FROM emp);

外面的是父对象,查询时由里及外

6.排序select

 select * from `表名` order by `字段` asc(升序)/desc(降序);

7.聚合函数(用来对某一列进行纵向计算)

count()计数;sum()求和;max();min();avg();

select count(ifnull(`字段`,值)) from `表名`;

8.分组select

select `字段`,`字段`... from `表名` group by `分组字段` having +分组后条件;

注意:分组之后的查询字段:分组字段、聚合函数

一般聚合函数都会其别名

Where和having的区别?     

*where是在分组之前进行过滤的,having是在分组之后进行过滤的

*where后面不能跟聚合函数,having可以

9.分页查询

select * from `表名` limit 0,5; 0=(n-1)*pagesize ,5=pagesize

4.DCL(控制):操作访问权限和安全等级

GRANT,DENY

四.数据库三大范式

1.数据库表的每一列的值,不可再分割

2.基于第一范式,如果是单主键,主键以外的列必须安全依赖于主键,如果是符合主键,主键以外的列必须安全依赖于主键,不能只依赖主键的一部分(消除部分依赖从而消除了冗余数据)

3.基于第二范式,非主键列之间不能相关依赖

五.数据类型

int   double(3,1)12.1      decimal

varchar   text

date   datetime   time   timestamp year

六.基本sql语句

1.net start/stop  mysql80

2.mysql -uroot -p¥¥¥¥¥¥

3.sc delete mysql  (清空sql服务,重装)

4.localhost(修改用户密码)

5.flush privileges(刷新权限)

七.约束

约束:限制,用来限制表中的数据

约束的类型

  1. 非空约束:not null
  2. 唯一约束:unique
  3. 主键约束:primary key
  4. 外键约束:foreign key
  1. 非空约束
  1. 在创建表的时候添加非空约束    //掌握

CREATE TABLE stu(

id INT,

NAME VARCHAr(20) NOT NULL

);

  1. 删除非空约束   //了解

ALTER TABLE stu MODIFY NAME VARCHAr(20);

  1. 创建完表之后,添加非空约束  //了解

ALTER TABLE stu MODIFY NAME VARCHAr(20) NOT NULL;

  1. 唯一约束

不能重复     Duplicate:重复的(要求记忆)

  1. 创建表时添加唯一约束   //掌握

DROP TABLE stu;

CREATE TABLE stu(

id INT UNIQUE,

NAME VARCHAr(20)

);

  1. 删除唯一约束  //了解

ALTER TABLE stu DROP INDEX id;

  1. 创建完表之后,添加唯一约束   //了解

ALTER TABLE stu MODIFY id INT UNIQUE;

  1. 主键约束

主键 =  非空  + 唯一

特点:

一张表只能有一个主键,作为表中记录的唯一标识

  1. 创建表时添加主键约束   //掌握

DROP TABLE stu;

CREATE TABLE stu(

id INT PRIMARY KEY,

NAME VARCHAr(20)

);

  1. 删除主键约束    //了解

ALTER TABLE stu DROP PRIMARY KEY;

  1. 创建完表之后,添加主键约束   //了解

ALTER TABLE stu MODIFY id INT PRIMARY KEY;

  1. 外键约束

外键的作用:让多表之间的数据产生关联,从而使得我们的数据更加的准确和有效

语法:

CONSTRAINT 外键名称 FOREIGN KEY (需要关联其他表的字段) REFERENCES 另外一张表的名称(要关联的字段)

  1. 创建表时添加外键约束

CREATE TABLE employee(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAr(20),

age INT,

dep_id INT, -- 外键对应主表的主键

CONSTRAINT emp_dep_fk FOREIGN KEY(dep_id) REFERENCES department(id)

)DEFAULT CHARSET UTF8;

  1. 删除外键

ALTER TABLE employee DROP FOREIGN KEY emp_dep_fk;

  1. 建完表之后,添加外键约束

ALTER TABLE `employee` ADD CONSTRAINT em_dep_fk FOREIGN KEY(DEP_ID) REFERENCES `department`(ID);

八.表设计

我们怎么去设计一张表

  1. 表关系
  1. 一对一    //了解

Mysql中基本见不到,因为一对一的关系我们会设计成一张表

举例:一个人和身份证号码之间就是一对一的关系

一个人只能有一个身份证号码

一个身份证好么只能对应一个人

  1. 一对多

Mysql中很常见

举例:员工和部门之间

一个员工只能有一个部门

一个部门可以有多个员工

  1. 多对多

在mysql中时无法直接表示的(使用中间表实现)

举例:

学生和课程之间

一个学生可以选择多门课程

一个课程可以被多个学生选择

设计数据库和表的总结:

创建数据库:

CREATE DATABASE 数据库名称CHARACTER SET utf8;

CREATE DATABASE db4 CHARACTER SET utf8;

创建表:

CREATE TABLE 表名(

id INT PRIMARY KEY AUTO_INCREMENT,

。。。。

)DEFAULT CHARACTER SET utf8;

九.事务(俗称业务)

*** if 一起活着

          else 一起去死****

事物的三个操作,1.开启事务2.回滚3.提交事务

  1. start transaction:开启事务
  2. Rollback:回滚操作
  3. Commit:提交操作

 四大原则

1.原子性:把事务当成一个不可分割的最小单位,要么同时成功,要么同时失败

2.一致性 : 执行事务前后数据总和不变

3.持久性:事务没提交就回滚,事务一旦提交就存入数据库中持久存活

4.隔离性:多个事物,相互要独立,互不影响

事务的隔离级别

多个事务之间,是相互独立的,但是当多个事务操作同一批数据的时候,就会出现问题,我们需要设置不同的隔离级别来解决

问题:

脏读:一个事务读取到了另外一个事务没有提交的数据

不可重复读:一个事务读取到了另外一个事务已经提交的update语句

幻读:一个事务读取到了另外一个事务已经提交的insert语句

隔离级别:

Read uncommited:读未提交

可能出现脏读、不可重复读、幻读

Read commited:读已提交  (oracle默认隔离级别)

可能出现不可重复读、幻读

Repeatable read:可重复读(mysql默认隔离级别),可能出现幻读

Serializable:串行化,不会出问题

十.索引

(index:帮助mysql高效获取数据的数据结构)

1.分类

主键索引:primary key 唯一标识

唯一索引:unique key  避免重复的列出现,本身可以重复

常规索引:key/index

全文索引:full test

2.索引原则

 不要对经常变动的数据加索引 

 小数据量不要加索引

 索引不是越多越好

 索引一般加载到常用查询的字段上

//explen 分析sql执行的状况

//delimter $$ 写函数之前必须要写的

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1031808.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号