启动/关闭MySQL数据库
cmd命令行
后面的CHARACTER为数据库的编码方式设置,否则的话按照数据库本身的默认编码方式;
其中,DATE一般表示日期范围:1000.01.01~9999.12.31;
DATETIME:1000.01.01 00:00:00~9999.12.31 23:59:59;
TIMESTAMP时间戳:1970年1月1日零点~2037年
其中,CHAR类型表示定长的字符型,对于没达到该长度的字符,用空格补齐;
VARCHAR表示变长的字符型;
==================1 创建数据表 CREATE ==================
使用USE命令打开一个数据库;使用SELECT DATABASE();命名查看当前打开的数据库,如上图所示;
=2=查看数据表
=3=查看数据表的列(字段)信息
=4=向表中插入行(记录)信息
=5=查找相应的记录信息
=6=字段的相关约束
自动编号约束必须与主键约束同时使用,而主键约束可以独自使用;且主键约束一张表只能有一个,且不能为空值;
唯一约束一张表可以有多个,可以为空值
======约束======
对于表级约束和列级约束的划分:由受约束的字段数目决定;如果约束只涉及一列,则为列级约束;如果涉及两列及以上的,则为表级约束;
当某一列设置了主键约束,则MySQL会自动为其创建索引;
在创建了外键约束之后,如果父表进行了插入删除等操作,对于子表是否也会进行相应的操作?
其中,NOT NULL和DEFAULT约束只有列级没有表级
=================== 2 修改数据表 ALTER ==================
first位于最前面,没有【】里面的时候则该新添加的列位于最后面
===============增加列用ADD关键字=====================
===================删除列用DROP关键字====================
======添加默认约束用SET关键字 删除默认约束用DROP关键字======
==================修改列信息用MODIFY关键字================
==========关键字CHANGE可以同时修改列名称和列定义============
=================修改表名称RENAME关键字==================
方法二可以同时修改多张表的名称,一般不建议修改表名称和列名称,因为在涉及视图和存储过程中,如果有对表名称和列名称的引用时,该修改会导致程序出错。
=========对数据表中的记录的操作——增、删、改、查========
INSERT插入记录的三种方式:
1》普通插入——VALUES| VALUE关键字
2》INSERT-SET插入方式(使用子查询)
3》INSERT-SELECT插入方式(将查询结果插入到指定数据表中)
对于设置为“自增”的字段,可以用NULL或者DEFAULT关键字表示值,从而不用赋值就可以遵守自增的要求;
对于其他的字段,可以是NULL/DEFAULT/或者是表达式(多条记录)或者函数(只能插入一条记录)
UPDATE更新记录
当无WHERE 条件时,将对所有记录进行更新,否则对某些特定记录进行更新;
DELETE删除记录
SELECT查找记录
tal_name.*方式可以方便多表查询时,有相同名称的字段,当带上相应的表名时,便于区分;
HAVING后的条件为:聚合函数(例如MAX/MIN/AVG/SUM,永远只有一个返回结果)或者要保证该字段一定要出现在当前SELECT后的语句中,否则会发生SELECT错误;
=============增删改 属于“写”操作、查 属于“读”操作=============
===========子查询=========
子查询并不是查找,而是所有SQL命令的统称;
当子查询返回多个结果时,可用ANY/SOME/ALL修饰,使其只返回一个结果
======================多表更新=========================
==========================连 接==========================
外链接A表决定B表,A表依赖于任何表,但是唯独不依赖于B表
foreign key是物理连接,而对于事务连接反而是更常用的;外键是将数据分开存储,反过来“连接”是将多张表联系在一起;
=====================运算符和函数========================
TRIM无法删除中间指定字符,只能删除头部和尾部;
删除前导指定字符——TRIM( LEADING '?' FROM ' ??MySQL???');
删除结尾指定字符——TRIM(TRAILING '?' FROM ' ??MySQL???');
删除所有指定字符——TRIM(BOTH '?'FROM ' ??MySQL???');
_(下划线)代表任意一个字符;
%(百分号)代表“任意个”字符;
要想让“%”表示百分号,而不是模式匹配符,可以用LIKE '%1%%' ESCAPE '1';
表示1(1可以是任意的都行,不一定非得为1)后面的百分号%取消通配符的作用,从而表示其原有意思;
between and表示是否在范围内,而IN表示的是一个集合,某个元素是否在该集合内;
last_insert_id()要使用时,该表中必须有自动编号的字段,字段名不一定为ID;当同时写入多条记录时,只会返回第一条的ID,而得不到后续记录的ID;
聚合函数的特点是只有一个返回值;
======================自定义函数=========================
参数与返回值没有必然的内在联系;
返回值必须要有,而参数无要求(但是个数必须小于1024个);
SET NAMES GBK;只会影响客户端的编码方式,不会影响服务器的编码方式;即客户端写汉字为gbk,而写入数据库中时,仍为数据库默认的编码方式;(因为数据库是存在于服务器中)
DELIMITER //;该命令会使得SQL语句以“//”结束;或者可以自行设置其他的字符结束格式;
定义了一个f1函数,无参数;
定义了一个F2函数,有2个输入参数;
定义复杂的函数体,有BEGIN和END实现;
=========================存储过程========================
SQL语句的执行过程
对于“语法分析”和“编译过程”,是可以省略的,从而优化SQL语句;
进而将一些SQL语句封装成“存储过程”,就可以直接调用编译结果,从内存中执行,从而达到了优化的效果;
过程体中的“任意”是有要求的;一般是对记录的“增删改查和多表连接”操作;
修改存储过程,只能修改简单的特性;当想要真正修改存储过程内容时,则必须要先删除再重建;
BEGIN和AND之间申明的变量为局部变量,其作用范围只能在函数体BEGIN和AND之间;
@i 这种带@形式的变量,为用户变量,是与数据库的客户端绑定的,只对当前用户所使用的客户端有效;
ROW_COUNT();函数返回被插入、更新、删除的行数;
存储过程一般是针对与整个表的;而函数一般不是用于表,一般与SQL语句混合使用;
存储在数据库内,可以由应用程序通过调用执行,允许用户声明变量,以及进行有条件的执行;
可包含程序流、逻辑、对数据库的查询,可接收参数(三种类型IN/OUT/INOUT);
关系型数据库中数据的存储以表的形式实现,存储引擎也可以称之为表类型;
处理并发控制是通过“锁”实现的;
锁粒度又称为锁颗粒,是对数据进行锁定时的单位;只需对需要修改的数据精确加锁,而无须对所有数据加锁;
要在锁开销和安全性之间寻求平衡;当锁粒度小,则开销大,然而安全性好;
事务是数据库区别于文件系统的重要特征之一;
使用索引可以快速访问数据表中的特定信息,索引是进行记录快速定位的方法;
分为普通索引、唯一索引、全文索引、btree索引、hash索引;
MyISAM使用与事务的处理不多的情况;
InnoDB适用于事务的处理较多的情况,需要有外键支持的情况;
其他存储引擎:BlackHole黑洞引擎,写入的数据都会消失,一般用于做数据复制的中继;