mysql合集_Mysql数据库知识点合集
一、Mysql数据库的操作命令
1、登录:mysql -h 服务器地址 -u 登录名 -p 密码
mysql -h 127.0.0.1 -u root -p root
2、数据库备份:mysqldump -h 服务器地址 -p 数据库名 > 文件名
3、数据恢复:mysql -h服务器地址 -u登录名 -p 数据库名 < 文件名
4、创建数据库:create database 数据库名称 【charset 数据库编码】 【collate 排序规则】
5、删除数据库:drop database 【 if exists 】 数据库名称
6、修改数据库:alter database 数据库名称charset 新的编码名 collate 新的排序规则名
7、显示所有数据库:show databases
8、显示数据库创建语句:show create database 数据库名称
9、进入数据库:use 数据库名称
二、字段类型
三、表操作命令
auto_increment:自动增长
primary key:设置为主键
unique key:设置唯一索引
not null:设置不为空
default 某值:设置默认值
comment:设置字段说明
1、创建表:creat table 表名称(字段名称 类型 字段属性) 【表选项】
create tablea (
idint auto_increment primary key,
usernamevarchar(32) not null unique key,
passwordvarchar(32) not null comment '密码',
agetinyint default 18)charset=utf8,engine=myisam;
2、索引
普通索引
key(字段名)
就是一个索引而已,没有其他作用,只能加快查找速度
唯一索引
unique key(字段名)
是一个索引,而且还可以设定其字段的值不能重复(唯一性)
主键索引
primary key(字段名称)
是一个索引,而且,还具有区分该表中的任何一行数据的作用(其实也是唯一性)它其实比唯一性索引多一点功能:唯一性可以为空null,而主键不能为空;
全文索引
fulltext(字段名)
外键索引
foreign key (字段名) references 其他表 (对应其他表中的字段名)
create tablea (
idintauto_increment,
usernamevarchar(32) not null,
passwordvarchar(32) not null comment '密码',
agetinyint default 18,primary key(id), --创建索引
unique key(username)
)charset=utf8,engine=myisam;
3、修改表
添加字段:alter table 表名 add [column] 新字段名 字段类型 [字段属性列表]
alter table a add date_entered datetime;
修改字段(并可改名):alter table 表名 change [column] 旧字段名 新字段名 新字段类型 [新字段属性列表];
alter table a change date_entered addtime int;
删除字段:alter table 表名 drop [column] 字段名;
alter table a drop addtime;
添加普通索引:alter table 表名 add key [索引名] (字段名1[,字段名2,...]);
alter table a add key date_entered (date_entered);
添加唯一索引(约束):alter table 表名 add unique key (字段名1[,字段名2,...]);
alter table a add unique key (username);
添加主键索引(约束):alter table 表名 add primary key (字段名1[,字段名2,...]);
alter table a add primary key (id);
修改表名:alter table 旧表名 rename [to] 新表名;
alter table a rename b;
4、删除表
drop table 【if exists】 表名;
其他表的相关语句:
显示当前数据库中的所有表: show tables;
显示某表的结构: desc 表名; 或:describe 表名;
显示某表的创建语句:show create table 表名;
重命名表:rename table 旧表名 to 新表名;
从已有表复制表结构:create table [if not exists] 新表名 like 原表名;
四、定义视图
1、语法:create view 视图名 【(字段名1,字段名2,字段名3,....)】 as select语句;
create view view_b as select * from b where id > 10;
2、删除视图:drop view 【if exists】 视图名;
drop view if exists view_b;
五、操作数据语句
1、插入数据:
insert [into] 表名 [(字段名1,字段名2,....)] values (值表达式1,值表达式2,....)
replace [into] 表名 [(字段名1,字段名2,....)] values (值表达式1,值表达式2,....)
其跟insert into几乎一样:唯一区别是,如果插入的数据的主键或唯一键“有重复”,则此时就会变成“修改该行数据”
insert into b (username, password, age) values ('yy', '123', 18);
2、修改数据:update 表名 set 字段1=值1,字段2=值2,...... 【where 条件】 【order by排序字段】 【limit 限定行数】;
update b set username = 'yang' where id = 1;
3、删除数据:delete from 表名 【where 条件】 【order by排序字段】 【limit 限定行数】;
delete from b where id = 1;
4、查询数据:select [all | distinct] 字段或表达式列表 [from子句] [where子句] [group by子句] [having子句] [order by子句] [limit子句];
all 和 distinct用于设定select出来的数据,是否消除“重复行”,可以不写,那就是默认值all:
all:表示不消除,即所有都出来,默认值;
distinct:表示会消除;使用all(跟不使用结果是一样的)
六、高级查询
1、连接查询
连接查询分类:
交叉连接(cross join)
左连接(left join)
右连接(right join)
内连接 (inner join)
1、内连接:select * from 表1 【inner】 join 表2 on 连接条件;
2、左连接:select * from 表1 left join 表2 on 连接条件;
3、右连接:select * from 表1 right join 表2 on 连接条件;
2、子查询
select * from product where price = (select max(price) from product );
使用in的子查询
select * from product where protype_id in( select protype_id from product_type where protype_name like ‘%电%’);
使用any的子查询
select * from tab1 where id > any (select f1 from tab2);
使用all的子查询
select * from tab2 where f1 > all ( select id from tab1 );
使用exists的查询
select * from product where exists (select * from product_type where like '%电%' and protype_id = product.protype_id);
3、联合查询union
语法:
select 语句1
union 【all | distinct】
select 语句2
1、要求多条查询语句的查询列数是一致的!
2、要求多条查询语句的查询的每一列的类型和顺序最好一致
3、union关键字默认去重,如果使用union all 可以包含重复项
七、用户管理
1、删除用户:drop user ‘用户名’@’允许登录的地址或服务器名’;
2、修改自己的密码:set password = password('密码');
3、修改他人密码:set password for '用户名'@'允许登录的地址' = password('密码');
4、授权:grant 权限列表 on 某库.某个对象 to ‘用户名’@’允许登录的位置’ 【identified by ‘密码’】;
5、取消权限:revoke 权限列表 on 某库.某个对象 from ‘用户名’@’允许登录的位置’
八、事务
事务执行的基本流程
1,开启一个事务:start transaction; //也可以写成:begin;
2,执行多条增删改语句; //也就是相当于希望这多条语句要作为一个“不可分割”的整体去执行的任务
3,判断这些语句执行的结果情况,并进行提交或回滚:
if( 没有出错 ){
commit; //提交事务;此时就是一次性完成;
}else{
rollback; //回滚事务;此时就是全部撤销;
}
数据库引擎Innodb有效
start transaction;insert into test(name, age) values ('yang', 18);commit;
九、存储过程、触发器
1、定义变量:
declare 变量名 类型名 【default 默认值】; //普通变量必须先这样定义
赋值形式:set 变量名 = 值;
取值:就直接使用变量名;
注:只能在存储过程或者函数内申明变量
set @变量名 = 值;
注:基本上哪里都可以用
2、函数:
create function 函数名 (参数1 类型1,参数2 类型2,。。。) returns 返回类型
begin
#这里写函数内容
return 返回值
end
注意事项:
1, 在函数内容,可以有各种变量和流程控制的使用;
2, 在函数内部,也可以有各种增删改语句;
3, 在函数内部,不可以有select或其他“返回结果集”的查询类语句;
create function test() returns int
begin
return 1;end;
调用:select 函数 as 别名
删除函数:drop function 函数名
3、存储过程:
create procedure test(【in | out | inout】 a int)
begin
--这里写完整的过程中语句
--其中可以有各种流程控制
--还可以是增删改查等
--其中查询语句会作为存储过程调用的结果
end;
说明:
1,in:用于设定该变量是用来“接收实参数据”的,即“传入”;默认不写,就是in
2,out:用于设定该变量是用来“存储存储过程中的数据”的,即“传出”,即函数中必须对他赋值;
3,inout:是in和out的结合,具有双向作用;
4,对于,out和inout设定,对应的实参,就“必须”是一个变量,因为该变量是用于“接收传出数据”;
create procedure test(in a int)begin
insert into test (name, age) values ('haha', 18);end;
调用存储过程:call 存储过程名 (实参1,实参2);
call test(1);
删除存储过程:drop procedure 过程名称;
3、触发器:
create trigger 触发器名 触发时机 触发事件 on 表名 for each row as
begin
//这里,才是编程的位置,也就是触发器的内部语句
end;
说明:
1,触发时机,只有2个: before(在....之前), after(在....之后);
2,触发事件,只有3个:insert, update, delete
3,即其含义是:在某个表上进行insert(或update,或delete)之前(或之后),会去执行其中写好的代码(语句);即每个表只有6个情形会可能调用该触发器;
4,通常,触发器用于在对某个表进行增删改操作的时候,需要同时去做另外一件事情的情形;
5,在触发器的内部,有2个关键字代表某种特定的含义,可以用于获取有关数据:
new:它代表当前正要执行的insert或update的时候的“新行”数据;通过它,可以获取这一新行数据的任意一个字段的值,形式为:
set @v1 = new.id; //获得该新插入或update行的id字段的值(前提是有该id)
set @v2 = new.age; //同上;
old:它代表当前正要执行的delete的时候的“旧行”数据,通过它,可以获取这一旧行数据的任意一个字段的值,形式为:
set @v1 = old.id; //获得该插入或update行的id字段的值(前提是有该id)
set @v2 = old.age; //同上;
CREATE TRIGGER SumOfSalary BEFORE INSERT ON tb_emp8 FOR EACH ROW SET @sum=@sum+NEW.salary;
CREATE TRIGGER double_salary AFTER INSERT ON tb_emp6 FOR EACH ROW INSERT INTO tb_emp7 VALUES (NEW.id,NEW.name,deptId,2*NEW.salary);
mysql合集_Mysql数据库知识点合集相关推荐
- mysql 修改库的校对集_mysql数据库的基本操作(增删改查、字符集、校对集)
MySQL数据库概述 MySQL数据库是经典的关系型数据库管理系统,MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Dat ...
- mysql删除原则_MySQL数据库的增删选查
数据库是专门存储数据对象的容器,这里的数据对象包括表.视图.触发器.存储过程等,其中表是最基本的数据对象. 创建数据库 在 MySQL 数据库中存储数据对象之前,先要创建好数据库. 语法: creat ...
- mysql select表达式_MySQL数据库SELECT查询表达式解析
数据的管理在很大一部分是在进行查找工作,而SELECT占据了很大的一部分 SELECT select_expr [,select_expr...] [ FROM table_reference WHE ...
- mysql断网_mysql数据库断网链接
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- centos72安装mysql配置密码_MySQL数据库之170419、Centos7下完美安装并配置mysql5.6
本文主要向大家介绍了MySQL数据库之170419.Centos7下完美安装并配置mysql5.6 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. linxu环境: centos ...
- mysql 关闭锁_mysql数据库取消锁
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- mysql权限表_MySQL 数据库赋予用户权限操作表
MySQL清空数据库的操作:truncate table tablename; MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户 一.grant 普通数据 ...
- mysql客户端查询_MySQL数据库之利用mysql客户端查询UCSC数据库
本文主要向大家介绍了MySQL数据库之利用mysql客户端查询UCSC数据库 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. UCSC Genome Browser是由Unive ...
- mysql 表上限_mysql 数据库表的上限
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
最新文章
- ​你知道计算机视觉与机器视觉区别何在?
- Linux下MySql插入汉字报错解决(/etc/my.cnf不存在)
- struts2核心配置
- HTML5响应式品牌服装设计类织梦模板
- 《基于MFC的OpenGL编程》Part 14 Quadrics
- 一加7 Pro高清渲染图曝光:A+屏幕 超棒手感
- 想要换壁纸,看这个网站就够了!
- Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7) 【转】
- SpringMVC入门实例及详细讲解
- Docker学习总结
- 关于学习的认知方法 | 九七的奇思妙想
- 电脑重装系统后文件还能恢复吗?恢复文件的详细图文教程
- 电脑设备管理器无端口显示怎么办?
- 搭建VUE大屏展示项目(一)环境搭建
- Exception in thread main java.lang.RuntimeException: java.net.ConnectException错误问题
- 【第三期】电子元器件创意作品,附带高清原图,共计60张
- Small Cell的基本概念
- 内蒙古职称计算机考试文件,2017年内蒙古职称计算机考试复习:word2003(三)
- 用Python爬取陈奕迅歌曲10万条评论的新发现
- thinkphp5多级控制器及其使用
热门文章
- 易到司机无法提现:客服电话变空号,要钱无路
- 狂奔的瑞幸咖啡讲了一个好故事 但还缺失一种 “感觉”
- 新一季“十大最堵互联网公司”出炉:360百度腾讯跻身三甲
- 「十年老测试」测试员的职场之路
- 提高django model效率的几个小方法
- 晨哥真有料丨这样的你很掉价!
- 苹果数据线不能充电_20亿个不能用的苹果充电器,库克,你的这波强制“环保”翻车了...
- nodejs实践录:pm2使用
- Java 四种线程池
- php 获取路由器mac地址,php如何获取网卡MAC地址(支持WIN与LINUX系统)