mysql笔记手抄本
设计一个项目数据库的流程
了解需求
根据功能制定功能模块,设计出方案图表
然后在是设计数据表
设计索引
设计视图
设计触发器
删除带有外键约束的字段时
SET foreign_key_checks = 0; # 取消外键关联
这里使用delete 字段名 from 表名;
SET foreign_key_checks = 1; # 设置外键关联
浅谈关键字
where
select 选择的字段是什么
from 是来自那个表
set 设定字段值的类型
通常是在创建表时候就做好了,或者使用alter table table_name add 方法添加
创建索引(index 索引名(字段名)),主键(primary key 字段 ),外键
delete和drop
delete 删除通常需要加from (from后通常接表名)
drop删除直接加表名(字段名,视图名) (但一般要root的权限),目前已知只有索引需要加on tablename(无论是创建还是删除)
约束
主键:插入主键的两种形式,主键的类型
外键:通常关联什么,一个表中能有几个,关联的字段有什么讲究
非空:如果用户再添加数据时没指定值,就报错
唯一:该列唯一,运行为空;Unique
默认:指定某列的默认值
alter的使用常见
修改表名(rename),字段的数据类型(modify),字段名添加(change);
xxx代表括号中的()值
alter table tablename xxx
alter语句是DDL语句,还可添加数据字段(add),删除字段(drop),修改排列顺序使用的是modify再加 字段1 字段2.总之他
还可以做到更改表的存储引擎(ENGINE=)、删除表的外键约束( DROP FOREIGN KEY <外键约束名>)。
insert的使用注意点
insert声明向表中插入记录的方法,并不是sql的标准语法,这种语法不一定被其他数据库支持,只能再mysql中使用。
删除数据表的注意事项
删除关联子表的父表时,需先删除关联的外键
删除数据
用delete;
DELETE FROM table_name、
[WHERE condition>] ;
计算列采用Generated always
索引
创建索引可以找出某一列中特定的行
找出某个列中的特定的值;索引存储类型:BTREE和HASH
四种索引类型
普通和唯一索引,单列和组合索引,全文索引,空间索引
创建索引的3种方法
在创建表的定义语句create table种指定索引列,使用alter table 语句在存在的表上创建索引,使用create index语句在已存在的表上添加索引
使用explain语句查看索引是否正在使用,在创建数据表中使用Index(前面定义的字段名)<==这是普通用法,唯一:unique index
单列索引
index singleindex(xxx) # xxx表示索引长度
组合索引
index multidx(xxx) xx表示字段名 # index后可自行命名
全文索引
fulltext index 索引名(字段名) #只有MyISAM存储引擎支持,而mysql8.0默认存储引擎为Inn0db.
空间索引
必须在MyISAM存储引擎上创建,且空间索引的字段必须为非空。
查看表中创建的索引
show index from 表名 \G
在创建好的数据库中添加索引
alter table 表名 add 创建索引的语法
查看索引是否正在使用
explain 查询 语句
使用create index语句在存在的表上添加索引
create 创建索引语法 on 数据表名(字段名)
删除索引
使用alter table;drop index
alter删除语法
alter table table_name drop index index_name
注意:添加了auto-incvement约束字段的唯一索引不能删除
drop删除所有语法
drop删除索引注意后面是加on table_name表名,不能直接空白删除
drop index index_name on table_name
删除索引注意点
删除表中的列时,如果该列是索引的组成部分,则该列也会从索引中删除。(列指的是字段名,当然也包括字段名携带的参数)
视图
什么是视图
视图就是一个虚拟表,建立在数据表基础上的虚拟表,对视图的操作,表也会跟着操作,对表的操作,也会同步到视图中去。
视图的规则
视图的作用
创建视图
语法1:
create view 视图名 as 跟sql语法从数据库中选择字段
create view 视图名 as select 字段名,xxx from 表名
语法2:
通过指定视图名(xx字段来创建视图) # 没看懂
在多表中创建视图
记得在不同表的字段上添加数据表名
查看视图
describe(describe)、show table status和show create view
查看数据库下的所有视图信息
select * from 数据库名.views \g
修改视图
就是重新创建了一遍视图,但这个是覆盖;并不是,他是有相关语法的
更新视图
注意无法更新的情况
删除视图
mysql函数
为什么mysql中也会有函数
函数的操作大大简便了人们对基础语句的依赖,提高了效率
函数的作用
函数的类型
处理计算数字,字符串,日期函数
条件判断函数对变量的结果进行判断并返回相应的值
系统信息函数
返回系统的多个信息
加密函数
对数据进行加密
存储过程与函数
1.存储过程的过程具体是什么,为什么要使用存储过程
存储过程就是一条或多条sql语句,这样说插入很多条数据使用的就是存储过程了
2.存储过程的相关操作,这里的操作就是创建存储过程
调用,查看,修改,删除等等,存储过程与函数是一个东西
3.创建存储过程
存储过程有点函数的意思了,存储程序分为存储过程和函数,它们分别使用的语句是create procedure和create function。
存储过程需要使用begin和end包括在存储过程的函数体内
delimiter // 语句作用是将mysql的结束符设置为//,存储函数中还可以定义变量,还可以传入参数
无论是创建函数还是创建存储过程都要使用delimiter来更改sql语句的结束符号(原符号为;)
存储过程需要使用begin和end包括,在存储过程的函数体内
4.调用存储过程和函数
使用call语句调用存储过程和函数。
call sp_name(xx,xxx) # sp_name代表存储过程,xx表示输入的值,xxx表示返回的变量
调用存储函数
存储函数的使用方式与mysql内部函数的使用方法是一样的,但我不知道这里为啥还加了个select
还可以从语句外调用(通过引用函数名);存储过程中也可调用其他存储过程。
5.存储过程的语法
create function fanc_name([func_parameter])
returns type # 表示返回的数据类型
主体内容
declare 语句定义变量 ==> 在存储函数中
set 语句为函数赋值
select xx into 为一个或多个变量赋值,这是直接把选定的列的值赋值到变量中
## 例如
select f_name,f_price into fruitname,fruitprice # f_name,f_price为字段名(包含字段名的数据)
查看存储过程和函数
show status 查看存储过程和函数的状态
show [procedure|function] status like '%C' \G
使用show create查看定义
show create function 数据库名.proceduce_name # proceduce_name代表存储过程
查看存储过程和函数的信息
在information_schema.Routines表中查看存储过程和函数的信息
修改存储过程和函数
alter语句
删除存储过程和函数
drop语句
定义条件使用declare语句
定义条件指的是事先定义程序执行过程中遇到的问题,处理程序定义了遇到这些问题时应当采取的处理方式,并且保证存储过程或函数在遇到警告或错误时能继续执行。
光标的使用
光标可以在数据量非常大的时候查看数据,用光标移动逐条读取数据
存储函数的条件判断语句
与其他编程语言的条件判断语句类似,特别是C语言的,有if,case,loop(循环语句重复执行某些语句),leave(用来退出任何被标注的流程控制标准),ITERATE(将执行顺序转到语句段开头处),repeat语句(带条件判断的语句),while(带条件判断的语句)
触发器
1.为什么需要触发器?
2.触发器的原理是什么?
触发器的概念是:触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发激活,从而实现执行
答1
有些事件是与要一连串的语句执行的,而这些语句的执行是某些特定的事件所触发。
如:学生毕业后,学校删除该学生的记录,同时也希望能删除该同学借书的记录。
若要执行上述事件,就需要用到delete语句,insert语句和update语句。
答2
触发器的原理就是创建的触发器对象可以包含多个事件所需的sql语句。
事务和锁
什么是事务:事务就是具有4种特性,原子性,一致性,隔离性和持久性来保证一件事件或程序的合理执行。
锁的产生一般都是在对数据有并发处理的时候,我们需要对并发操作进行控制。
权限与安全管理
mysql是一个多用户数据库,具有功能强大的访问控制系统,可以为不同用户指定允许的权限。