MySQL基础知识理解和实施

目录

常用概念 

数据库是什么?

数据库管理系统(DBMS)

结构化查询语言

DDL

DML

数据库的三级模式结构

层次模型

网状模型

关系的形式化定义及其相关概念

笛卡尔积

关系

元组

主码

关系模型

数据库常用数据类型

DDL常用

创建表

删除表   

修改表

修改字段

​修改字段的顺序

约束添加

 DDL常用表示           

聚合函数

DCL 数据控制

 约束

  多表查询                                                                                                

 内连接

外连接                                                                                                                             

视图

新建视图

修改视图

删除视图

范式

事务

三级封锁协议

触发器

常用概念 

mysql是一种关系型数据库

数据库是什么?

本质上就是一种文件系统,它保存了一组有组织的数据

数据库管理系统(DBMS)

一种操纵和管理数据库的大型软件,用于建立、维护、使用数据库,对数据库进行统一管理和控制

结构化查询语言

专门用来与数据库通信的语言

DDL

DBMS提供数据定义语言,定义数据的模式、外模式和内模式,定义模式、内模式和外模式、模式二级映像,定义有关的约束条件,例如create、drop、alter等用来建立、删除、修改数据库的语言

DML

数据库操纵语言,实现对数据库的基本操作,包括检索、更新、等,DML包含两类,一类是自主型,这一类属于交互式命令语言,另一类是宿主型的,对数据库的存取语句嵌入在高级语言中,不能单独使用

数据库的三级模式结构

美国标准学会将数据库系统内部的体系结构从逻辑上分为如下:

层次模型

最早的数据模型,用树型结构表示实体间的关系,只能表示一对多

网状模型

用有向图表示实体间的关系,可以表示多对多

关系的形式化定义及其相关概念

域是一种具有相同数据类型的值的集合

笛卡尔积

给定一组域(他们可以包含相同的元素,也可以不同)

关系

笛卡尔积D1*D2*D3的任一子集称为定义在域D1*D2*D3的n元关系 

元组

表中的一列即为一个属性,给每一个属性起一个名称和属性名

主码

表中的某个属性组,他可以唯一确定一个元组,也就是主键

关系模型

对关系的描述

数据库常用数据类型

char 定长字符串

varchar 不定长字符串

Date YYYY-MM-DD  日期值

DDL常用

 查看所有数据库 show databases;

查看当前数据库 show database();  注意括号

创建数据库 create database [if not exists] mydb1;

选择数据库 use mydb1;

查看当前数据库的所有表 show tables;

删除数据库 drop database 数据库名;

删除当前数据库中的表 drop table 表名;

查看表结构 desc 表名;

查询指定代表创建表语句 show create table 表名;

修改数据库编码 alter database 数据库名 character set utf8;

创建表

create table table_name(

字段1 数据类型  [约束条件][comment 注释],

字段2 数据类型  [约束条件][comment 注释]);

利用子查询来创建表

CREATE TABLE table_name

        SELECT 语句;

删除表
   

 DROP TABLE [IF EXISTS] table_name;
    删除指定表,并重新创建该表

   truncate 会直接清空表数据,但会保留表和索引等结构,而且不可回滚

  TRUNCATE  TABLE  table_name;

修改表


修改表名

ALTER TABLE old_table_name RENAME [TO] new_table_name;
               或 RENAME TABLE old_table_name TO new_table_name [ ,........];

增加字段
        在表的最后一个位置增加字段

                

 ALTER TABLE table_name  ADD 字段名 字段类型;

        在表的第一个位置增加字段

 ALTER TABLE table_name ADD 字段名 字段类型 FIRST;

        在表的指定字段之后增加字段

ALTER TABLE table_name ADD 字段名 字段类型 AFTER 字段名2;

修改表字段

   修改列属性

 alter  column 列名  类型

删除字段

ALTER TABLE table_name  DROP 字段名;

修改字段


        修改字段数据类型

ALTER TABLE table_name MODIFY 字段名 数据类型;

        修改字段名  

ALTER TABLE table_name  CAHNGE 旧字段名 新字段名 旧数据类型;

        同时修改字段名与数据类型

ALTER TABLE table_name CAHNGE 旧字段名 新字段名 新数据类型;

​修改字段的顺序

ALTER TABLE table_name  MODIFY 字段名 数据类型 FIRST | AFTER 字段名2;

FIRST 表示将字段调整到表第一个位置

AFTER 字段名2 表示将字段调整到字段2之后

约束添加

空值约束添加

alter table  表名  

        add constraint  约束名  default ... for  列名 

其他约束添加

alter table  表名

        add  constraint    约束名   关键字  列名

 DDL常用表示           

select、insert、delete、update

查看前几条记录

select   top  n  * from  表名   前n条记录

select   top  n  percent   * from  表名  前n%条记录

起别名

select name as '名字' , age as '年龄' from  user_table 

contract 组合

删除数据右侧多余的空格且使用contract拼接用户的名字和城市

使用MySQL的RTrim() 函数来完成

SELECT CONCAT(RTRIM(user_name), ' (',RTRIM(user_country), ')')

FROM vendors

ORDER BY vend_name;

+组合列

select  sno +'(' +sn+')'  from  表名

year函数

显示每名同学 的年龄  YEAR(Date())- YEAR(birthday)

关键字 distinct  去重复值

LEFT(str,len) 和RIGHT(str,len)

SELECT  RIGHT( certificates_no,2) FROM user 

特殊运算符

between  ... and  ...  指定值的范围 ,筛选的必须是数字,小的在前面,大的在后边

in   允许指定一组值

like    模糊查询    _单个字符、%代表零到多个

[]一个字符的取值范围

[^ ] 不在某个范围或集合内的任意指定字符

排序

order by  排序列 (asc/desc)

分组

group  by 列1 ,列2

聚合函数

min() 、max()、 sum()、avg() 、count()、count(*)、compute()

rollup  汇总,只能汇总一条属性

having  筛选列   操作符 

where是select的字句,having是group  by 的字句

DCL 数据控制

crant、revoke                                                                                                                                     

 约束

非空约束: not null
主键约束: primary key (简称PK)
唯一约束: unique
外键约束: foreign key (简称FK)
检查约束: check(mysql不支持,oracle支持)                                                                                          

# 主键
constraint 约束名(PK_表名称)   primary  key(列名)
#主键只能有一个

# 唯一性约束

 constraint  约束名(ix_表名称)  unique  (列1,列2...)


# 设置列为自增

#注意: 列类型必须为整型


#检查约束

constraint  约束名(ck_表名称)  regexp  (约束表达式  -> between ... and ...)

#默认值

default  '默认值' 
#注意:只能在列级别创建

#空值约束

not null  
#注意: 只能在列级别创建

#外键约束

constraint 约束名  foreign  key (列名) references  主键表名  (主键表列名)
#一个表最多可以有31个外键,在临时表中不能有外键,主键和外键的类型必须严格匹配 
#注意: 只能在列级别上创建

  多表查询                                                                                                

 内连接

内连接:把查询结果作为WHERE子句的查询条件即称为内连

SELECT filedlist FROM table1 [INNER] JOIN table2 ON table1.column1 = table2.column1

 

外连接                                                                                                                             

 外连接分为

左外连接

  以左表为参照,显示所有数据,如果右表的某行在左表中没有匹配行,则以null显示

SELECT patient.name ,user_info.name,certificates_url , address FROM  patient  LEFT JOIN user_info ON (patient.id=user_info.id)

右外连接           

 以右表为参照数据,如果左表中没有匹配行,则以null显示                                                         SELECT patient.name ,user_info.name,certificates_url , address FROM  patient RIGHT JOIN user_info ON (patient.id=user_info.id)                                                                             全连接

交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉连接也称作笛卡尔积。                                                                        

  insert

insert  into   表名   列1,列2.. values(?,?...)

update  表名   set  修改列=修改值  where   条件

视图

是一种数据库对象,以一个或多个数据表或视图导出的虚拟的表

新建视图

直接在视图右键新建视图

或者create view_视图名   [列1,列2,...]  as (子查询)

as指定视图要执行的操作

子查询不允许有order by 和 distinct

修改视图

alter  view  视图名称  as(子查询)

注意: 修改视图时,由于视图是一张虚拟的表,所以对视图的更新一定会转到对基本表的更新

删除视图

drop view 视图名称[1,2...] 可以同时删除多张视图

索引

是某个表中一列或者若干列的集合(是一种加快检索的数据库结构),提供 指向存储在表的指定列中的数据值的指针

创建索引的目的: 加快数据的检索

优点:使用索引可以加快查询效率,降低数据库IO成本

           使用索引可以对数据进行排序,降低CPU的消耗

缺点:索引也是一张表,该表保存了索引与主键的字段,并且指向实体的记录,所以,索引是要占空间的

           虽然索引加快了查询效率,但是在更新表时,同时需要更新索引表,影响更新效率

五种索引:

主键索引、唯一性索引、组合索引、

普通索引:普通索引是最基本的索引,它没有任何限制,值可以为空;仅加速查询

全文索引:全文索引主要用来查找文本中的关键字,而不是直接与索引中的值相比较。fulltext索引跟其它索引大不相同,它更像是一个搜索引擎

create  [unique]   index  <索引名> on   <表名|视图名> 列名  

范式

定义数据库的规范化过程为不同程序的规范化要求设立的不同的标准式准则称为范式

第一范式

 一个关系模式的所有属性都是不可分的基本数据项

第二范式

在符合第一范式要求下,每个非主属性都依赖于关系模式的主码

第三范式

在符合第二范式要求下,每个非主属性都不能派生出其他候选关键字,且没有冗余字段

事务

数据库执行的一个工作单位,用户定义的一组操作序列

A:原子性:事务是一个不可分割的最小单位

C:完整性:在事务执行前和执行后都没有被破坏

I:隔离性:每个事务都是独立的操作,互不干扰

D:持久性:事务一旦发生,那么应该是持久的

排他锁(写锁):简称为X封锁,禁止并发操作

共享锁(共享锁):简称为S锁,允许其他用户对同一数据进行进行查询,但不能修改

三级封锁协议

一级:事务T在修改数据对象之前必须对其加X锁,知道结束

二级:在一级基础上,加上事务T在读取数据时,必须加S锁

三级:在一级基础上,事务读数据时,加X锁,在读取数据后不释放,直到事务结束

封锁粒度:也就是封锁的单位,粒度越大,封锁的对象也就越多

触发器

是一种特殊的存储过程(通过事件进行触发而被执行)

指定的表中的数据发生变化时自动生效

唤醒触发器的响应也就是DDL

触发器分为两种

  after触发器:在数据改后完成以后,进行触发

  instead of   触发器 在数据表变动以前被触发

创建触发器

  create  trigger  触发器   on  表名   for   after/instead   of  

触发器执行的事件(insert、update、delete)  as    SQL语句(也就是触发器执行的命令)

CREATE  TRIGGER  trigger_select  AFTER  INSERT  ON `user` FOR EACH ROW  
INSERT INTO `user` (username,`password`) VALUES ('zhangsan','123456');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MySQL是一种开源的关系型数据库管理系统,是Web开发中最常用的数据库之一。以下是学习MySQL基础知识的几个关键点: 1. 数据库基础知识 你需要了解以下的基础知识: - 数据库的概念和特点 - 数据库管理系统(DBMS)和关系型数据库管理系统(RDBMS) - SQL语言的基础知识,包括SELECT、INSERT、UPDATE和DELETE等基本操作 2. 数据库设计 在设计数据库时,你需要考虑以下问题: - 数据库范式:数据库范式是一种规范化的设计方法,用于减少数据冗余和提高数据一致性。 - 数据库表的设计:如何分解数据,创建关联表以及定义主键和外键等。 - 数据库索引:索引可以提高数据库查询效率,你需要了解如何创建索引并选择正确的索引类型。 3. 数据库管理 在管理数据库时,你需要了解以下的内容: - 数据库安装和配置 - 数据库备份和恢复 - 数据库性能调整,包括查询优化、索引优化、缓存优化等。 - 数据库安全,包括用户管理、权限管理和数据加密等。 4. 数据库编程 在应用程序中,你需要使用编程语言来访问数据库。以下是一些你需要了解的内容: - 数据库连接:如何连接到数据库并执行SQL查询。 - 数据库事务:如何使用事务来保证数据的一致性。 - 数据库异常处理:如何处理数据库操作中可能出现的异常。 5. MySQL工具和技术 MySQL有许多工具和技术,可以帮助你更有效地管理和使用数据库,例如: - MySQL Workbench:一个用于管理和开发MySQL数据库的集成开发环境(IDE)。 - phpMyAdmin:一个用于管理MySQL数据库的Web界面。 - MySQL Cluster:一个用于处理大数据和高可用性需求的分布式数据库系统。 - MySQL Replication:一个用于复制MySQL数据的技术,用于实现数据备份和负载均衡等。 以上是MySQL基础知识的一些关键点,掌握这些知识可以帮助你更好地理解和使用MySQL数据库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羊驼有点累

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值