超级详细MySQL笔记整理

[] 数据类型
  • tinyint--1--byte
  • samllint--2-short
  • int--4-int
  • bingint--8--long
  • folat--4--float
  • double--8--double
[] 字符串类型
  • char(n)--长度不超255字符--剩余空间空格填充--存储速度最快,浪费空间,存等长
  • varchar(n)--最长不超65535字节--剩余留给别的数据使用,不浪费空间
  • text--超过255时使用--大文本类型,
[] 日期类型
  • date--年月日
  • time--时分秒
  • datetime--年月日时分秒--1000-9999
  • timestamp--时间戳,某刻毫秒值--最大2038--自动更新
[] 字段(列)约束
  • 主键约束--primary key 主键auto increament自增
  • 非空约束--not null 不能能有空值
  • 唯一约束--unique-不重复,可有null值
  • 外键约束--表与表之间关系的列
  • 自增
[]添加主键约束
  • * 语句 ALTER TABLE 表名 ADD【CONSTRAINT[给主键起名-可省略]】PRIMARY KEY(id)
[] 添加唯一约束
  • * 语句:ALTER TABLE 表名 ADD[CONSTRAINT[起名可省略] UNIQUE(列名)-可以一次条件多个
[]添加外建
  • * 语句:ALTER TABLE 表名 ADD[CONSTRAINT[起名可省略]] FOREIGN KEY (当前表列名) REFERENCES   父表名(id--参照列)
  • 添加/删除默认约束
  • ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值(例如15)
  • * ALTER TABLE 表名 ALTER 列名 DROP DEFAULT--删除默认值
[] 删除主键约束
  • ALTER TABLE 表名 DROP PRIMARY KEY
[]删除唯一约束
  • SHOW INDEXES FROM 表名--查看表有哪些约束
  • ALOW TABLE 表名 DROP INDEX (key-名字那个)
[]删除外键
  • ALTER TABLE 表名 DROP FOREIGN KEY 外键名字
  • SHOW CREATE TABLE 表名--查看外键名字
  • ALTER TABLE 表名 DROP INDEX 索引名--删除索引
[] MYSQL操作类别
  • 写操作:INSERT,UPDATE DELETE(增删改)
  • 读取操作:SELECT--查
  • tinyint(1)--布尔判断--1为true 0为Flase
[] MySQL--操作
  • shouw databases;--查看服务器所有库
  • use +库---进入指定库
  • select database();--查看已经进入的库
  • show rables;--查看库所有元素
  • drop database if exists +库;--删除指定已有的库
  • create databse 库名 charset utf8;--创建库
  • drop table if exists 表名--删除表
  • create tabale 表名(列名+数据类型,多个用逗号隔开)
  • desc 表名;---查看表结构
  • #空格 --空格---注释
  • insert into 表名(列1,列2)values(值1,值2);
  • insert into 表名 values(值1,值2)--只能所有列加入值
  • update 表名 set 列名=列名+值 where  列名2=值2--给列名2所有值都加值
  • update 表名 set 列名=列名+值;---给表中所有值加值
  • update 表名 set 列名=ifnull(列名,0)+10;--将空值以零对待
  • delete from 表名 where 列名=值;--删除值的所有信息
  • delete from 表名;--删除表中所有信息
  • select 列名1,列名2 from 表名--显示列名1,2
  • select * from 表名;--显示所有列
  • select distinct 列名 from 表名;--剔除指定列中的重复值
[] where子句查询
  • = 等 <>不等 >大于>=大于等于<<=
  • between x and y---在x和y之间
  • like(%m%-包含m,%-表任意0或多个字符,"_"表任意一个字符
  • in(值1,值2)查询集合包含的值
  • not--否定后面的条件
  • and--和,or或,is null 是否为空,is not null-是否不为空
  • as--定义别名,where不能使用列别名,可使用表别名
  •  
[] 排序查询
  • order by 列名 asc --升序
  • select 列名 from 表名 order by 列名 asc;---升序
  • select 列名 from 表名 order by(列名)desc;---降序
[] 分组查询
  • select * from 表名 group by 列名1--按照列名1分组
[] 聚合函数查询
  • select max(列名) as from 表名;--最大值--min最小值
  • select count(*) from 表名 where 列名>值;--统计大于值的人数
  • select sum(列名) as from 表名;--统计指定列的总值
  • select avg(列名) as from 表名;--算出指定列的平均值
  • select 列名1 coun(*),avg(列名2) from 表名 group by 列名1--多聚合一起查询
  • 聚合函数不能用在where子句中
  • 没有分组时,聚合函数不能喝其他普通字段一起查询
  • select 列名1,列名2 from 表名 where 列名2=(select max(列名2) from 表名)---子查询
  • ceil(数值)---向上取整floor(数值)--向下取整
  • round(数值)---向下取整,rand--随机数
  • select 列名1,列名2,ceil(列名2*1.1547) from 表名;--工资上涨15.47%的,向上取整
  • 日期函数:curdate()--返回当前年月日
  • curtime()---返回当前时分秒
  • now()--返回当前年月日时分秒
  • date add(),date sub()--增加/减少日期
  • year()--获取年,month()--月,day--日hour()--时,minute()分
  • second()--秒
  • select now();--查询当前系统时间
  • select 列名1,year(curdate())-year(列名2) from 表名;--显示姓名和年龄
[]主键创建实现案例
CREATE TABLE provinces(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
pname VARCHAR(20) NOT NULL);---省份表--父表--设置主键后自动创建索引
CREATE TABLE usere(
id  SAMLLINT UNSIGED PIMARY KEY AUTO_INACEMENT NOT NULL
pid SMALLINT UNSIGNRD,
FOREIGN KEY (pid) references(id) );
参照省份表的id--字表
pid--外键列 省份表的id为参照列
语句:SHOW INDEXES FROM 表名\G--查看有没有建立索\G表格显示
[] 外键
  • 员工表的id列(dept_id)和部门表的id一一对应,dept_id--就是外键
  • foreign key(列表1_id) references 列表1(id)--添加--指定为外键
  • 建表后:create table 表名(id int primary key auto_increment)--建表后外键设置
  • 如果表已存在,可以使用下面这种方式: alter table emp add constraint fk_dept_id foreign key(dept_id) references dept(id); 其中 add constraint fk_dept_id 表示新增列,列名为 fk_dept_id ( 名字由自己定义 foreign key(dept_id) 中的 dept_id 为外键
  • 外键删除:1--show create table 表名--查询含有外键名的语句
  • 2--alter table 表名 drop foreign 外键名字---完成删除
  • 1对多:1~*
  • 一对一
  • 多对多
[] 外键的作用
  • 外键:是用于保证数据一致性的策略
[]外键约束参照操作
参照表添加值
INSERT provinces(pname) VALUES("A");
INSERT provinces(pname) VALUES("B");
INSERT provinces(pname) VALUES("C");
子表添加值
INSERT user1(username ,pid)VALUES("tom",3);
INSERT user1(username ,pid)VALUES("jon",1);
INSERT user1(username ,pid)VALUES("sum",3);
CASCADE:
CASCADE :从父表删除或更新且自动删除或更新子表中匹配的行
SET NULL:从父表删除或更新行,并设置子表中的外键列 为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL 
RESTRICT :拒绝对父表的删除或更新操作。
 NO ACTION :标准SQL的关键字,在MySQL中与RESTRICT相同
[] where--不能使用别名
  • SQL语句书写顺序
  • select * | 列名--确定查询的列有哪些
  • from 表名---确定要查询那张表
  • where 条件---筛选过滤,剔除不符合条件的记录
  • group by 分组的列----根据那一列进行分组
  • having 条件--通过条件对分组后的数据进行筛选过滤
  • order by 排序的列---指定那一列进行排序
  • limit(countpage-1)*rowCount,rowCount--指定返回第几页记录以及每项显示多少条
[] SQL执行顺序
  • from 表名---确定查询那张表
  • where 条件---一下全部同上
[] 修改表操作
  • alter table 表名 add 添加的列名 列名的类型--新增列
  • alter table 表名 modify id int primary key---修改id列,将id设为主键
  • alter table 表名 modify id int auto increment--修改id列,将id主键设为自动增长
  • alter table 表名 drop 列名---删除列
添加单列
ALTER TABLE 表名 ADD[COLUMN(可不加)]列名 [FIRST(表示插在最前面)|AFTER(指定在某列后方) 被指定列 ]--省略两个指定将默认插入在后方
例:ALTER TABLE user1 ADD password VARCHAR(32) NOT NULL AFTER 被指定列名
添加多列
ALTER TABLE 表名 ADD[COLUMN](列1,列2.。。。。。)
删除列
ALTER TABLE 表名 DROP[COLUMN] 列名
删除多列
ALTER TABLE 表名 DROP[COLUMN] 列名1,列名
[] 单引号和\c---结束SQL语句
[] 基础语句
  • select distinct 列名 from 表名--剔除有重复的数据
  • delete from 表名 where   判断条件--删掉表中符合条件的内容
  • update 表名 set 列=值 或 where 判断条件--给所有加值或符合条件的加值
  • insert into 表名 values(给表调加的值);--给表添加值
  • primary key auto_increment--设置主键和自增
  • desc 表名--查看表结
  • delete from 表名--删表名
  • create table 表名(表结构)--创建表
  • drop table if exists 表名---删除表
  • show tables--查看库的所有表
  • use 库名--进入库
  • create database if not exises 库名 charset utf8;--创建库
  • drop database if exists 库名--删除库
  • show create database 库名--查看建库时的语句
  • show databaes();--查看已经进入的库
  • show databases;--看MySQL的所有库
[] where查询
  • 语句:select  显示的列 from 表名  where  判断条件
  • 加减乘除大小等于 or and  in (not in)--不在 ifnull(判断指定列是否包含null,有则第二条替换)  (is null)--为空
  • (not null)--不为空 like '%'--开头包含结尾  '*'--任意  “刘_”--以刘开头
  • year(列名)--年 month(now())+1=month(列名)--下个月  month(now())=month(列名)+1--上个月 
  • BINARY--区分大小写--如果内容小写,查询输入大写则查不到,默认不区分
  • UNION[ALL(包含重复数据)|DISTINCT(删除结果集重复数据)]--接在条件后面
[] 分组查询
  • 语句:select 查询的列 from 表名  group by 根据指定的列进行分组
  • 例子:select count(*)[统计人数] from emp group by jod;--按照职位进行分组
  • 计算格式:select 计算函数(列名) from 表名
  • sum--求和 avg--平均值  max--最大值  min--最小值 
[] 排序查询
  • 语句:select 显示的列 from 表名  order by 排序的列 asc;---升序
  • desc--降序
[] 分页查询
  • 语句:select * from 表名 limit 页数,显示数据数(计算公式(页码-1)*每页显示记录数)
[] 关联查询
  • select * from 列名 left join 表名 on 条件(例如id相等)--左连接--左边全查出,右边只查匹配的
  • left换成right就右连接--刚好相反
[] 子查询
  • 语句:select 显示的列 from 表名 where  判断条件(sal(列名)>(select  sal from 表名 where name='王海涛')
[] 关联查询
  • select 显示表1表2符合的列  from 表名 a 表名2  b(给表起别名)  where a-id=b-dept-id and d-name="培优部"--where后面基本都是关联条件
[]自查询
  • select  查询的列 from 查询的表(表1 表2) where  判断条件(表1id=表2id)
  • where --后面不能使用分组函数
  • select 显示列名.min(判断列名) from 表名 group by 显示列名---分组
[] 常用命令
  • show databases;--|查看服务器所有数据库
  • use myaql;
  • use test;----进入某一数据
  • select database();---查看已进入的数据库
  • show tables;--查看当前数据库的所有表
  • drop database mydb11;--删除指定数据库
  • drop database if exists mydab1--如果没有就创建再删除
  • create database mysql character utf8;--创建库指定编码为utf8;
  • create database if not exists mydb1 charset utf8--没有就创建
  • show create database mydb1;--查看建库时语句
  • use mydb1,drop table if exists stu;---如果没有就创建再删除表
  • use myab1;
  • create table stu(id int primary key auto_increment,--设置为健值
  • name vachar(10)---字符串类型
  • birthday  date,---时间类型
  • desc stu;---查看表结构
  • insert into stu(id,name,birthday)---指定顺序添加
  • value(1,'good','2019');
  • insert into stu values(2,'第二种方式','2019');
  • update stu set score=score+10--给所有列都加10
  • update stu set score=88 where name='good';--给指定名字改值
  • delete from stu;--删除记录语法
  • delete from stu where name='老刘' or name='删除'--或删除
  • select * from emp;--查看所有列
  • select dept,job from emp;--筛选查看
  • select distinct dept from emp;--剔除重复记录
  • select name ,sal from emp wher sal>3000--大于筛选
  • ifnull(列,值)---判断是否包含null值
  • select sal between 300 and 400--在  什么和什么之间
  • in(100,200,300)--什么和和什么和什么之间
  • not in(10,200,300)--不在什么和什么和什么之间
[]or---或
  • 模糊查询
  • like '刘%';--以刘开头
  • like ‘%刘%’--包含刘
  • like ‘刘+下划线’---刘开头且为两字的
[]分组查询
  • select count(*) from emp group by job;--按照职位分组
  • max--最大
  • *--如果为null就统计
  • sum--和
  • year(时间名称)---提取年月日时分秒--前面换单词
  • select year(now());--填单词获取当前年月日时分秒
  • where month(now())+1=month(birthday);--下个月
  • where month(now())=month(birthday)+1;--上个月
  • curdate() 获取当前日期 年月日--
  • curtime() 获取当前时间 时分秒 -curdate+curtime=now
  • sydate()--获取当前日期年月日时分秒=now
[]排序查询
  • order by 列 asc--升序
  • order by 列 desc--降序
  • limit (页码-1)*每页显示记录数, 每页显示记录数
  • select * from emp limit 0,3;--第一页
  • select * from emp limit 3,3;--第二页
  • select*from 列 left join 表--左连接查询
  • select*fro,m 列 right join 表--右连接查询
  • 列 a--重命名
[] 内连接
  • UPDATE tab_goods INNER JOIN(内连接) tab_goods_cate(被链接的表名)ON(链接调加) goods_cate = cate_name(值或内容相等的链接条件)
   SET(更新的值) goods_cate = cate_id(表1的这行改成新建表的id值)  内连接:两张表的交集
 
SELECT 表1id,表1名字 FROM 表1名  INNER JOIN  表2名 
ON 表1名.id=表2名.id;
[] 左外连接:符和左边全部右表显示符合条件的
 
  • SELECT 表1id,表1名字 FROM 表1名 LEFT JOIN  表2名  ON 表1名.id=表2名.id;
[] 右外连接--与左相反
 
  • SELECT 表1id,表1名字 FROM 表1名 RIGHT JOIN  表2名  ON 表1名.id=表2名.id;
[] 多表连接--三表连接
 
  • SELECT 列名1,列名2 FROM 表名 AS g INNER JOIN 表名2 AS  c ON g.cate_id=c.cate_id   INNER JOIN  列名 AS b ON g.brand_id=b.brand 
[] 无限极分类设计
  • SELECT s.type_id,s.type_name,p.type_name FROM tdb_goods_types AS s   LEFT JOIN tdb_goods_types AS p ON s.parent_id = p.type_id
[]补充4、SQL语句的书写顺序和执行顺序:
[]  SQL语句的书写顺序:
  •     select...
  •     from...
  •     where...
  •     group by...
  •     order by...
  •     ...
[]  SQL语句的执行顺序:
  •     from... -- 确定要查询的是哪张表 (定义表别名)
  •     where... -- 从整张表的数据中进行筛选过滤
  •     select... -- 确定要显示哪些列 (定义列别名)
  •     group by... -- 根据指定的列进行分组
  •     order by... -- 根据指定的列进行排序
[] 存储过程
  • 存储过程:是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理
  • 优点:增强SQL语句的功能和灵活性
  • 实现较快的执行速度
  • 减少网络流量
[] 函数体
 
  • IN:表示改参数的值必须在调用存过过程时指定--只能进不能出
  • OUT:表示该参数的值可以被存储过程改变,并且可以返回
  • INOUT:表示该参数的调用时指定,并且可以被改变和返回
  • 语句:CREATE[DEFINER={user|CURRENT_USER}]--可省略--省略表示登录当前mysql用户
  • PROCEDURE sp_name(存储过程的名字))([proc_parameter[....]](可以带有0个到多个的???))?
  • [characteristic....]routine_body
  • proc_parameter:
  • [IN|OUT|INOUT]parm_name type--参数类型
[]过程体
 
  • 由合法的SQL语句构成
  • 可以是任意的SQL语句:存储过程不能创建表和库,主要指:增删改查或多表连接
  • 如果为复合结构则使用BEGIN...END语句--超过两个就要BEGIN...END包在其中
  • 复合结构可以包含声明,循环,控制结构
  • []创建存储过程
  • CREATE PROCEDURE sql() SELECTION VERSION();
  • 调用存储过程
  • CALL sql--调无参
  • CALL sql()--调无参
[] 调用有参
  • DELIMITER //--把分号定界符改成双下滑线
  • 创建过程
  • CREATE PROCEDURE removeUserById(存储过程的名字,随便起)(IN(in类型的参数) id(参数名) INT(数据类型)  UNSIGNED)
  • BEGIN(一个也可以带有)
  • SQL语句:DELETE FROM users WHERE id(数据表当中的字段) = id(需要传递的参数);--批??????????
  • END
  • //
  • DELIMITER ;--定界符再修改成分号
[] 调用
 
  • CALL removeUserById(3)--调用上面封装的存储过程
  • 参数名id和表中字段重名时就全部把表的内容删除了--注意注意
[] 删除存储过程
  • DROP PROCEDURE [IF EXISTS] 存储过程的名字
DROP PROCEDURE [IF EXISTS] 存储过程的名字
 
[]重新构建存储 过程
 
  • DELIMITER //--把分号定界符改成双下滑线
  • CREATE PROCEDURE removeUserById(存储过程的名字,随便起)(IN(in类型的参数) p-id(参数名) INT(数据类型)  UNSIGNED)
  • BEGIN(一个也可以带有)
  • SQL语句:DELETE FROM users WHERE id(数据表当中的字段) =p-id(需要传递的参数);--批量删除操作
  • END
  • //
  • DELIMITER ;--定界符再修改成分号
  • CALL  removeUserById(22)--调用上面封装的存储过程--删除了id=22的记录
[]删除id不固定的记录并且返回剩余的固定数
  • DELIMITER //--把分号定界符改成双下滑线
  • CREATE PROCEDURE removeUserAndReturnUserNums(存储过程名)(IN p-id INT UNSIGNED,OUT userNums INT UNSIGNED)
  • BEGIN
  • DELETE FROM users WHERE id=p-id;--第一个删除语句
  • SELECT count(id)(返回总数) FROM users INTO(将返回的总数放到userNums中)userNums;
  • END
  • //
  • DELIMITER ;--定界符再修改成分号
[] 调用
  • SELECT COUNT(id) FROM users;--先看总id有多少
  • CLAA removeUserAndReturnUserNums(27,@nums(接收返回的总数--代表变量);
  • SELECT @nums;--查看返回的总数
  • 局部变量--只在BEGIN里有效
  • SET @i =7;--对当前MySQL用户都--声明用户变量
  • BEGIN...END声明的变量叫局部变量
  • 通过INTO,@(艾台)声明的变量叫用户变量--作用域在当前用户内
[] 多参多返回值
  • SELECT ROW_COUNT();---得到删除更新的总数
  • INSERT 表名(列名)VALUES(值1),(值2),(值3);--插入多行
  • 定义开始
  • DELIMITER //--把分号定界符改成双下滑线
  • CREATE PROCEDURE removeUserById(IN p-age SMALLINT UNSIGGED,
  • OUT delete SMALLINT UNSIGNED,OUT user SMALLINT UNSIGNED)
  • DELETE FROM 表名 WHERE  age = p-age;--传参删除
  • SELECT EOW_COUNT(id) INTO  deleteU--返回删除更新总数
  • SELECT COUNT(id) FROM users(表名) INTO usec;---返回剩余总数
  • END
  • //
  • DELIMITER //
  • CALL removeUserById(20,@a ,@b)--调用
  • SELECT @a,@b;
[] 存储过程与自定义函数的区别
  • 存储过程实现的功能要复杂一些,而函数的针对性更强
  • 实际开发中存储过程常用
  • 可以通过程序实现存储过程的功能但是效率没有存储过程高
  • 存储过程可以有多个返回值,而函数只能有个返回值
  • 存储过程一般独立的来执行,而函数可以作为其他SQL语句的组成部分来出现
[]修改存储过程:只能修改简单的属性或者重新重新创建
[]自定义函数
  • 内置函数举例:字符,数值,日期时间,加密等函数
  • 定义:用户自定义函数(user-defined function,UDF)是一种对mysql扩展的途径,其用法与内置函数相同
  • 两个必要条件:参数,返回值( 可无参,但一般都有返回值)
  • 函数可以返回和接收任意类型的值,
  • 参数不能超过1024个
[] 创建函数
  • CREATE FUNCTION name(函数名)
  • RETURNS(返回值的类型)
  • {STRING|INTEGER|REAL|DECIMAL}(类型举例)
  • routine_body(函数体)可以包含:任意合法的SQL语句构成
  • 也可以是简单SELECT或INSERT语句
  • 如果为复合结构则使用BEGIN...END语句
  • 复合结构可以包含声明,循环,控制结构
[]创建函数举例
  • SET NAMES gbk--改编码方式
  • SELECT NOW();当前时间
  • SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日 %H点:%i分:%s秒');
  • 开始封装这个过程
  • CREATE FUNCTION f1() RETURNS VARCHAR(30)
  • RETURN DATE_FORMAT(NOW(), '%Y年%m月%d日 %H点:%i分:%s秒');
  • SELECT f1()--调用--不带参数
[]创建带有参数的函数
  • CREATE FUNCTION f2(numl SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)
  • RETURNS FLOAT(10,2) UNSIGNED
  • RETURN (numl+num2)/2;--封装完成 
  • SELECT f2(20,10);--传参调用
[] 创建带有复合结构的函数
  • DELIMITER //
  • CREATE FUNCTION adduser(username VARCHAR(20))
  • RETURNS INT UNSIGNED
  • BEGIN--创建存储过程
  • INSERT test(uscrname) VALUES(username);
  • RETURN LAST_INSERT_ID();
  • END
  • //
  • DELIMITER ;
  • SELECT adduser('Rose')--传入参数插入
  • DROP FUNCTION [IF EXISTS] 函数名--删除函数
[]运算符和函数
  • 运算符
  • 函数
  • 字符函数
  • 数值运算符与函数
  • 比较运算域函数
  • 日期时间函数
  • 信息函数
  • 聚合函数
  • 加密函数
[] 字符函数
  • SELECT CONCAT (“iomoc”,“mysql”)--结果iomocmysql--多个连接也可以--- 字符连接
  • SELECT CONCAT (列名1,列名2)AS 别名 FROM 表名;//两列拼接-- 字符连接
  • SELECT CONCAT_WS ('|','A','B','C')//A|B|C-- - 使用指定的分隔符进行字符连接
  • SELECT FORMAT (125660.75,1)//12,5660.8保留一位小数且四舍五入---- 数字格式化
  • SELECT LOWER ('MySQL')--mysql--- -转化成小写字母
  • SELECT UPPER ('mysql')--MySQL---- 转换成大写字母
  • SELECT LEFT ('MySQL',2)--My--- 获取左侧字符
  • SELECT LOWER (LEFT('MySQL',2));--函数嵌套--取两位在转小写my-- 切割转换小写
  • SELECT RIGHT (('MySQL',3)--SQL--- 获取右侧字符
  • LENGTH()---获取字符串长度
  • LTRIM()----删除前导空格
  • RTRIM()---删除后续空格
  • TRIM()---删除前导和后续空格
  • SUBSTRING()---字符串截取
  • [NOT]LIKE()---模式匹配
  • REPLACE()---字符串贴换
  • 数据截取都是1开始:正截整数,倒截取用负数,也可以只有一个起始点
  • SELECT * FROM 表名 WHERE 列名 LIKE '%1%%' ESCAPE '1';--表示1后面%不是通配符
[] 数值运算符与函数
  • SELECT 3+4;
  • SELECT CEIL(3.01)--4-- 进1取整
  • SELECT FLOOR(3.99)--3---- 舍一取整
  • SLEECT 3 DIV 4;--0---- 整数除法
  • SELECT 5%3=SELECT 5MOD3;-- 同理--取余数(取模)
  • SELECT POWER(3,3)--平方--- 幕运算
  • SELECT ROUND(3.65231,2)--保留两位两数--- 四舍五入
  • SELECT TRUNCATE(125.89,1)125---- 数字截取
  • SELECT TRUNCATE(125.89,-1)120--不做四舍五入操作--- 数字截取
[]比较运算与函数
  • SELECT 15 BETWEEN 1 AND 22;--1,1--表示true 0-flase--- [NOT]BETWEEN...AND【不】在范围之内
  • SELECT 35 NOT BETWEEN 1 AND 22;--1,1--表示true 0-flase--- 【NOT】IN()--【不】在列出值范围内
  • SELECT 10 IN(5,10,15,20);--1-----
  • SELECT NULL IS NULL--1---- IS [NOT] NULL【不】为空
  • SELECT * FROM 表名 WHERE 列名 IS NULL--那些为空
  • SELECT * FROM 表名 WHERE 列名 IS NOT NULL--那些不为空
[] 日期时间函数
  • NOW()---当前日期和时间
  • CURDATE()----当前日期
  • CURTIME()---当前时间
  • DATE_ADD()---日期变化
  • DATEDIFF()---日期差值
  • DATE_FORMAT()--日期格式化
  • SELECT DATE_ADD('2019-11-23',INTERVAL 365 DAY)--2020-11-23--负数为减
  • YEAR--年 WEEK--星期--加单位就行
  • SELECT DATEDIFF('2019-11-23','2018-11-23');--365
  • SELECT DATE_FORMAT('2014-3-2','%m%d%Y')--03/02/2014
[] 信息函数
  • CONNECTION_ID()--连接ID
  • DATEBASE()---当前数据库
  • LAST_INSERT_ID()---最后插入记录的ID号
  • USER()--当前用户
  • VERSION()---版本信息
  • SELECT CONNECTION_ID()--当前线程的id值
  • SELECT LAST_INSERT_ID;\--需要有设置主键和自增,一次多写入只算第一次
  • INSERT 表名(列名1,列名2)VALUES('值1','值2');--插入
[] 聚合函数
  • AVG()--平均值
  • COUNT()---计数
  • MAX()---最大值
  • MIN()---最小值
  • SUM()---求和
  • SELECT AVG(3,4,5);--可以添加列和添加在四舍五入里
  • SELECT MAX(列名)AS counts FROM 表名
[] 加密函数
  • MD5()--信息摘要算法
  • PASSWORD()--密码算法
  • SELECT MD5('admin')--32位数加密字段
  • SELECT PASSWORD('admin')--
  • SET PASSWORD=PASSWORD('dimitar');--修改当前用户数据库登录密码
  • exit;--退出登录
  • cls;--清除屏幕内容
  • mysql -uroot -pdimitar--把密码改回来
[] 事务
  • BEGIN或START TRANSACTION--显式开启一个事务
  • COMMIT WORK等价于COMMIT--提交--永久保存
  • SAVEPOINT 参数 允许在事务中设置一个保存点也可多个
  • RELEASE SAVEPOINT 参数--删除一个保存点
  • ROLLBACK TO  参数把事务回滚到标记点
  • SET TRANSACTION--设置事务隔离级别
[] 事务处理主要方法
  • BEGN--开始一个事务
  • ROLLBACK--回滚
  • COMMIT--提交
  • SET AUTOCOMMIT=0--禁止自动提交
  • SET AUTOCOMMIT=1--开启自动提交
[] 事务的定义
  • 指作为单个逻辑工作单元执行的一系列操作,要么都执行,要么都不执行
  • 绑定一堆增删改查的SQL语句,要么都成功执行,要么都执行不成功。
[] 索引
  • 索引:是对数据表一列或多列的值进行排序的一种结构
[] 修改存储引擎的方法
  • 修改配置文件:default-storage-engine=engine
  • 建表时指定:CREATE TABLE 表(列定义内容) ENGINE=MyISAM  DEFAULT CHARSET =utf8
  • 建表后:ALTER TABLE 表名 ENGINE =InnoDB;
[]事务的四大特性
  • 是用于保证数据库的完整性
  • 原子性 (Atomicity) --所有操作是一个整体-要么全部执行要么全部都不执行
  • 一致性 (Consistency) ---数据库状态与其他业务规则保持一致(无论成功与否,两个账户总金额之和不变)
  • 隔离性 (Isolation) ---各个事务之间相互隔离,互不影响--隔离级别高时
  • 持久性 (Durability) --事务操作成功时,就持久的保存到硬盘上
  • 简称:ACID
  • 开启事务时,在提交或回滚(撤销)成功之前,里面的数据不变,提交或回滚(撤销)后才会改变。
  • start transaction--开起事务
  • rollback--回滚
  • commit--提交
  • quit---中断操作 
  • 脏读--别的窗口可以读到了事务为提交前的数据
  • 不可重复读--在这个事务结束之前,读到了别的事务中提交后数据--两次查询不一致
  • 幻读---在这个事务结束之前,读到别的事务插入或删除--导致一个事务查询不一致--无法插入
  • 只是查询就不用使用事务  增删改查--必须要用事务
  • JDBC--默认开启事务--一天语句即为事务--开启和提交
[] 事务隔离级别
  • 语句:set tx isolation='read-uncommitted(级别)';
  • READ UNCOMMITFED(读未提交数据)--安全级最低性能最好--(可出现脏读,不可重复读 幻读)
  • READ COMMITTED(读已提交,Oracle默认)--防脏读,不防不可重复读和幻读
  • REPEATABLE READ(可重复读mysql默认)--防脏读和不可重复读-不防幻读
  • SERIALIZABLE(串行化)--不出现任何问题--性能最差
[] 设置隔离级别
  • select@@tx isolation;--查询前设置隔离级别
  • JDBC设置隔离级别
  • 调用:Connection.setTransactionIsolation(in level)
  • 1-读未提交 2-读已提交 4-读可重复 8-串行化 0-不使用事务
  • 索引分类:普通索引,唯一索引,全文索引,btree索引,hash索引
  • CSV存储引擎不支持索引
  • BlacKHole:黑洞引擎,写入的数据都会消失,一般用于做数据复制的中继
  • 常用两种存储引擎
  • MyISAM:适用于事务的处理不多的情况
  • InnoDB:适用于事务处理比较多,需要有外键支持的情况
[] 并发控制
  • 定义:当多个连接对记录进行修改时保证数据的一致性和完整性
  • 解决这个问题需要有锁控制
  • 共享锁(读锁):在同一时间段内,多个用户可以读取同一个资源
  • 排他锁(写锁):在任何时候只能有一个用户写入资源,当进行写锁时会阻塞其他的读锁或者写锁操作
  • 锁的颗粒:即锁的单位,对修改的数据精确加锁即可(对表或者某条数据)
  • 锁颗粒:
  • 表锁:是一种开销最小的锁策略
  • 行锁:开销最大的锁策略--支持并发的一种情况--因为每行都有可能加锁
 
  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值