Mysql基础汇总-------复习

库管理

显示创建数据库sql语句:

show create database 数据库名;

修改数据库(编码):

alter database 数据库名 charset=新编码;

删除数据库:

drop database 数据库名;

选择数据库:

use database 数据库名;



表管理:

创建数据表:

简单:

create database 数据库名 charset=utf8;

复杂:

create dadabase if not exists 数据库名 charset=utf8;
# if not exists (判断数据库名是否存在)

删除数据表:

简单:

drop database 数据库名;

复杂:

 drop database if exists 数据库名;

创建表:

create table [if not exists] 表名(
字段名 字段类型 [null|not null] [default 默认值] [auto_increment] [primary key] [comment 备注],
字段名 字段类型,
......
字段名n 字段类型n
) [engine=存储引擎]  charset=编码;

解释:
[if not exists] 判断是否存在,存在:不管,不存在:创建
[null|not null] 声明字段值是否可以插入null数据
[default 默认值] 声明字段值如果没有录入数据则使用默认值
[primary key] 主键(特点:字段值不能重复且不能为null)
[auto_increment] 自增(该属性必须配合primary key效果字段值自动增加1,2,3)
[comment 备注] 声明字段的作用
[charset=编码] 数据存储编码


显示创建表的语法:

show create table 表名\G

(\G代表格式化显示数据,自带结束,不用加分号)

复制表

create table 新表名称 like 原表名称;

增加数据:

insert into 表名(字段名1,字段2,........,字段n) values(值1,值2,......,值n);

删除数据:

delete from 表名 [where条件] [order by 排序 asc|desc] [limit 数量];

改数据:

update 表名 set 字段名=新值;

查数据:

select * from 表名;

查看mysql字符集设置:

show variable like 'character_set_%';

查看Mysq版本:

select version();

备注:

comment
eg.commment  '备注内容'


select 查询语句

in|not in

概念:判断字段是否在值定集合中
语法:

select * from 表名 where 字段 in (值1.....值n);
# in包含在里面,not in不包含在里面

between|not between

概念:判断字段是否在指定范围中

select * from 表名 where 字段 between 值1 and 值2;

字段起别名:as

select 字段 as 别名,字段2 as 别名,字段3 from 表名;

通配符

_(下划线)          表示任意一个字符
%                   表示任意字符

1.模糊查询:like

select * from stu where name like '小%';

2.分组查询:group by

概念:以分组的形式展示数据,如性别,地区分组;
目的:统计数据

select 列名 from group by 待分组字段名;
eg.select sex,avg(age) from stu group by sex; 

3.结果条件:having

where  条件是对表的数据进行筛选(通常配合分组使用)
hving  设置了查询条件,条件字段必须在查询结果中存在;

4.排序:order by

概念:按照指定字段值升序(asc)或降序(desc)

select * from stu order by age asc;

5.限制limit

select 字段 from 表名 limit 起始位置,显示条数

select * from stu order by id asc limit 3;
// 从0开始计数,0,1,2,3,4

6.联合查询:union

概念:联合查询就是将多条select语句,合并成一条sql语句(注:结果行增非列增)
语法:

select 字段 from 表a union[选项] select 字段 from 表b;

**选项内容**:
     all     显示两个表中所有记录(a表有5条,b表有10条,其中两条重复=15)
     distinct(默认)  去掉两个表中相同的记录(a表有5条,b表有10条,其中两条重复=13)

小总结:
1-联合查询sql语句必须用小括号包起来
2-字段个数必须一致

(select * from u3 where sex='男' order by age desc) union all (select * from u3 where sex='女' order  by age acs);

多表查询

概念:将多个表按照一定顺序组合起来(注:结果列多)

内连接:inner join

[表1.公共字段]用于声明字段属于哪个表,内连接查询两个表字段相同的数据

select * from 表1 inner join 表2 on 表1.公共字段=表2.公共字段

左连接:left join

概念:以左边的数据为标准,右边的表如果没有对应的的记录用null表示

select * from 表1 left join 表2 on 表1.公共字段=表2.公共字段;

右连接:right join

概念:以右边的数据为标准,左边的表如果没有对应的的记录用null表示

select * from 表1 right join 表2 on 表1.公共字段=表2.公共字段;



子查询:针对查询的结果在进行一次查询

分类:
标子量查询:子查询返回单个值(一行一列)
列子量查询:子查询返回一列值(多行一列)
行子查询:子查询返回一行(一行多列)
表子查询:子表查询返回多行多列(一个表)

exists和not exists

含义:判断指定查询语句是否有数据,有则执行主查询,反之则不执行

select 列 from 表名 where exists (子查询)

子查询的特定关键字:

any   查询的结果中,满足任意一个给定的条件
all   查询的结果中,满足所有给定的条件
some=any

视图(view)

概念:视图是存在数据库中虚拟的表(只是结构没有数据,数据来源于其他表),访问视图相当于执行某个特定的sql的语句

创建视图:

create view 视图 as sql语句;
eg.create view v_t1 as select * from stu;

修改视图:

alter view 视图名 as 新sql语句;

删除视图:

drop view 视图名;

精确查找视图:information_schema

select * from information_schema.view\G

显示创建视图的语法:

show create view 视图名\G

显示视图的结构:

desc 视图名;



主键:

primary key

特性:一个表只能有一个主键,不能重复且不能null(除非主键自增)
作用:保证数据完整性,加快查询速度

外键:

概念:从表中的公共字段称之为外键
作用:外键约束用来保证数据的完整性
语法

foreign key(外键)references 主表 (公共字段);

使用引擎必须是innodb类型不同
engine 是用来设置表存储引擎,声明表数据存储方式,不同的方式有各自的特性,如,是否支持外键,增删改查性能。

建表后添加外键:

alter table 从表名 add foreign key(外键) references 主表 (公共字段);

删除外键:

alter table c从表名 drop foreign key 外键名 ;

唯一键:

unquie

注:一个表可以有多个唯一键,不能重复可以为空

事物:

概念:事物用于保护多个sql语句的执行,只要有一个失败则全部失败,反之都成功。
开启事物:

start transaction 或 begin
提交事物:commit
回滚事物(撤销):rollback
存储引擎必须是innodb

事务的特性:
原子性:整个事务中的所有操作要么全部提交成功,要么全部失败回滚。
隔离性:一个事务的所在的修改在中最终提交以前,对其他事务是不可见的。
一致性:数据库数据从一个一致性的状态转换到另一个一致性的状态。
永久性:提交事务后对数据的修改是永久的。



修改sql语句结束符号:

delimiter //         (改为以//结束)

存储过程:
概念:Mysql 执行语句是要先编译,然后再执行,会浪费很多资源和时间。
解决:通过存储过程提前封装并编译,后期直接调用传递参数即可。
作用:提升性能。

存储过程的操作:

1.创建

delimiter //

create procedure 存储过程名称([选项] 参数 类型,.........[选项] 参数n 类型n)
brgin 
	sql语句等代码

end //

delimiter ;


调用语法:

call 存储过程名称(参数);

删除语法:

drop procedure 存储过程名称;

显示所有存储过程语法:

show procedure status\G

查看创建存储过程SQL语句:

show create procedure 存储过程名称;

设置全局变量:

set @变量名 = 值;

查看全局变量:

select @变量名;

设置局部变量:

declare 变量名 变量类型 [default 默认值];

给变量赋值:

set 变量名 = 值;

查询数据赋给变量:

select 字段名1,.......字段名n from 表名 变量名1,.......变量名n;
eg.
  delimiter //

  create procedure p3()
  begin
  declare data1 varchar(30);
  declare data2 varchar(30) default 111;
  declare data3 int;
  set data3 int;
  select data1,data2,data3;
  end //

 delimiter;
 call p3();

形参修饰符(in、out、inout)

in 特性:可以传递参数(默认)
out特性:不可以传递参数,但是可以输出参数(必须定义变量来接受输出参数)
inout特性:既可以传递参数,又可以输出参数。



SQL编程

if判断语句:

if 条件 then 
       #sql语句
elseif 条件 then
       #sql语句
......
else
end if;

while 循环语句

while 条件 do
        #sql语句
end while;



内置函数

数学函数:

select rand()             #随机数
select  round()          #四舍五入
select ceil()                #向上取整
select floor()              #向下取整

字符串函数:

select lenght('哈哈哈');           #返回数组长度
select concat('a','bcd');           #连接字符串
select replace ('abcdef','a',123);           #替换字符串,将a替换成123

截取字符串:

left(字符串,截取长度)
right(字符串,截取长度)
substring(字符串,开始位置,截取长度)

日期函数:

select now();        #当前时间
select unix_timestamp();            #时间戳
select  from_unixtime();

获取年月日时分秒

select
year(now())as '年',
month(now())as '月',
day(now()) as '日',
hour(now()) as '时',
minute(now()) as '分',
second(now()) as '秒';

加密函数:

md5(数据);
password(数据);

**条件**
if(数据,值1,值2)        #判断指定数据是否为真:真-值1,假-值2
ifnull(数据,值2)       #判断指定是否为null:null-值2,非null-本身

自定义函数:

delimiter //
create function 函数名 (参数名 类型,.....,参数n 类型n)returns 返回数据类型
begin
       #sql语句
       return 返回值;
end  //
delimiter ;

#调用
select 函数名();

显示所有函数:

show function status\G

删除函数:

drop function 函数名;

存储过程和函数的区别:

存储过程可以返回多值,而自定义函数只能返回一个值
存储过程一般独立执行,而函数往往作为其他sql语句的一部分来使用

触发器(trigger):

当进行插入数据,修改数据,删除数据之后触发触发器。(前提是提前设置好触发器)

创建触发器:

delimiter //
create trigger 触发器名称 before|after 事件 on 表名 for each row
begin 
     #sql语句
end //
delimiter ;

解释:
before |after 在执行增删改sql语句之前 或 之后 触发
事件 update/delete/insert
表名 声明哪张表被监控
for each row 声明一次性影响多条数据则触发n次

eg.
create table a (id int) engine=myisam charset=utf8;
create table b(id int) engine=myisam charset=utf8;

drop trigger if exists t1;
delimiter //
create trigger t1 after insert on a for each row
begin
insert into b values(9);
end//
delimiter ;

insert into a values(1);

删除触发器:

drop trigger 触发器名;

显示所有触发器:

show triggers;

显示创建触发器的sql语句:

show create trigger 触发器名称;

创建insert 触发器,添加的新数据自动存储在触发器内部的new关键字中
创建delete触发器,被删除的数据自动存储在触发器内部的old关键字中
创建update触发器,被更新的数据自动存储在触发器内部的old/new关键字中
触发器内部获取语法:new.字段名 或 old.字段名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值