Mysql 复习总结



 
 /********** 基本数据类型*******************/
 #数值
 tinyint   1字节 8位
 有符号  :-128--->127(只有后七位表示绝对值 最高位表示正负)
 无符号  : 0--->255
 smallint  2 字节 16位
 
 有符号  :[-32768]-2^15--->[32767]2^15-1(只有后七位表示绝对值 最高位表示正负)
 无符号   : 0--->[65535]2^16
 
 mediumint 3 字节 24位
 有符号  :[-8388608]-2^23--->[8388607]2^23-1(只有后七位表示绝对值 最高位表示正负)
 无符号   : 0--->[16777215]2^24
 int      4 字节 32位
 有符号  :[-2147483648]-2^31--->[2147483647]2^31-1(只有后七位表示绝对值 最高位表示正负)
 无符号  : 0--->[4294967295]2^32
 
 bigint      8 字节 64位
 有符号  :[-9223372036854775808]-2^63--->[9223372036854775807]2^63-1(只有后七位表示绝对值 最高位表示正负)
 无符号  : 0--->[ 18446744073709551615]2^64
 


 Tinyint(M) unsigned zerofill
 unsigned 表示零填充 ,影响值的范围
 M表示宽度  只有在 zerofill 时才有意义
 zerofill [默认 unsigned ]
 
 float (M,D)  浮点型
 decimal (M,D) 6,2  定点型
 
 M : 精度(总位数,不含小数点)
 D : 标度(小数位)
 
 银行的四舍五入算法 ,根据单双数舍,概念相同
 


 字符型:
 char (M)  定长 可存储 字节数M<=255  实占M个字符  不够右侧补空格
      取出除时去掉右侧空格


 varchar (M)  变长 可存储 字节数M<=65535,有1-2字节 记录真实长度
 
 
 日期时间类型:
 
 Year 类型
 1901-2155  年  [0000年  表示错误年份]
 两位  00-69 表示2000-2069
       70-99 表示1970-1999
Date 类型 格式 1992-08-12
1000-01-01-->9999-12-31


Time 类型
hh:mm:ss


datatime 类型
1990-02-25 12:12:12


真正存储时间  是用的时间戳 而不是具体时间


/********** 逻辑运算法*******************/
not !
or ||
and &&
between -- and --
in (2,3,4,5)
/********** 通配符*******************/


select * from student where name like '李%';
select * from student where name like '李*';
%匹配 单个字符
*匹配多个字符


/********** select 5个子语句 和 函数*******************/
max 
min
sum
avg
count
group by 
order by
having 




select max(id) from student ;
select * from student where id >2 order by name,id  asc ;


asc 升序
desc 降序
limit 


limit [offset,num] 
offset 偏移量
num    取出个数
select * from student where id >2 limit 3,3


where 把表达式放在行内,看表达式是否成立
取出的结果理解为一张临时表
select * from student where id in (select max(id) from student )
select * from student where id = (select max(id) from student )


1 where   把内层的结果看做是外层结果的比较条件
 通常用来查询  最大 最贵商品
 表达式在哪一行成立  哪一行就被取出来
  ==  ><  > <  >=  <=  in    between and  or and not
  
2 from    把内层的查新结果当成临时表[as 加临时表名],供外层再次查询
 通常用来查询  最新最贵商品
3 exists  把外层的查询结果 带入内层  看是否符合条件
select * from category where exists (select * from goods where cat_id = 栏目id )


(select * from goods where goods.cat_id = category.cat_id )


select good_id,good_name,market_price-shop_price as shengqian from goods having shengqian >1000;




4 group by 分组  一般配合统计函数一起使用
           max min avg sum count
5 having 表达式
         数据再表中 表在硬盘或者内存里
where针对 表文件发挥作用 查询结果可以看做一张表
having 针对查询结果起作用!!
 
 
6 order by  排序
可以针对字段  升序[asc] 降序[desc] 排列
如果一个字段排不出结果 可选择其他字段继续排序
order by 字段1[asc]、[desc],字段2[asc]、[desc]
7 limit  限制条目
limit [offset,]M
offset 偏移量
M 取出条目
 




union     合并查询结果 
          左连接 右连接 内连接
 把两次或者多次查询结果合并在一起
 要求:两次查询的列数一致
 推荐:查询的每一列的列类型一致
 
 


  select * from ta 
  union
  select * from tb
  
  自动去除重复的 
  如果不想去除 那么 加all
  
  select * from ta 
  union all
  select * from tb
  
  左连接
select 列1,列2...N from 
table a left join table b
on table a 的列 = table B 的列
where / having ....




           右连接
select 列1,列2...N from 
table a right join table b
on table a 的列 = table B 的列
where / having ....
 
 
 
           内连接
select 列1,列2...N from 
table a inner join table b
on table a 的列 = table B 的列
where / having ....
 
  取出 左右连接的交集
  
 
 
视图      如果一个查询结果非常频繁的进行操作,就把这个结果创建视图
          由查询结果形成的一张虚拟表(当做表看)
create view viewname select 语句
           使用视图的情况;
1 简化查询
2 把多张表放在一个里

drop view viewname 
alter view viewname as select 语句 


          视图中的增删改能影响到表
 视图 insert 必须包含所有表中没有默认值的列
 Algorithm = merge / temptable / undefined
 merge  引用视图的语句 与定义视图的语句合并
 temptable 引用视图时根据视图的创建语句建立临时表
瞬间创建一个临时表
 undefined 未定义,系统自动选set names gbk;
 择


字符集和校准集
create table table_name
(
...
) charset utf8
          表声明 字符集  存储就是那个字符集
 
 告诉服务器给它的数据 character_set_client = gbk / utf8 ;
 告诉转换器,转成什么格式 character_set_connection =  gbk / utf8 ;
 返回结果   character_set_result = gbk / utf8 ;
 
 如果三者相同  简写成  set names utf8
 
 出现乱码的情况:
 client 声明与事实不符
 result 与客户端页面不符时候
 
 collation 校准集
 


触发器
应用场景:
1 当想一个表中添加或者删除数据,需要再相关表中进行同步操作
2 当表上某列数据的值与其他表的数据有联系时
3 需要对某张表进行跟踪时




create trigger triggername
after / before 
insert / update /delete on 表名
for each row
begin


sql语句
 
end


分界符
delimiter #


如何在触发器引用行值


对于 insert 新增的行用 new 来表示
行中的每一列的值 用 new.列名来表示






对于 insert 删除的行用 old 来表示
行中的每一列的值 用 old.列名来表示






对于 update 修改前的行用 old 来表示 修改后的行用 new 
行中的每一列的值 用 old.列名来表示




清空表
truncate 表名;
 
 
 事务
 start transaction
 sql语句
 commit / rollback


 
备份


#导出库下的表
mysqldump -u 用户名 -p 密码  库名 表1 表2.。。>地址/文件名.sql
#导出库下所有表
mysqldump -u 用户名 -p 密码  库名 >地址/文件名.sql
#导出一个库
mysqldump -u 用户名 -p 密码  -B 库名 库名 >地址/文件名.sql
#导出所有库
mysqldump -u 用户名 -p 密码  -A >地址/文件名.sql




恢复
#以库为单位
source <地址/文件名.sql


#以表为单位
use database
再  source <地址/文件名.sql


索引 
# 原则
   不要过度索引
   索引条件 查询(where)比较频繁的时候
   散列值上(不集中)
   
普通索引 index    加快查询速度
唯一索引 unique index   行上的值不能重复
主键索引  primary key  主键必唯一 但是唯一索引不一定是主键
一张表只能有一个主键索引 可以一个或者多个唯一索引
全文索引 fulltext index 对于中文意义不大


 


 #增加索引
 
 alter table 表名 
 add index / unique index / fulltext index
 索引名(列名)  / primary key
 如:
alter table member add index tel(tel);
 
 主键索引
 alter table 表名 add primary key (列名)
 #删除索引
 alter table 表名 drop index 索引名
  alter table 表名 drop primary key
/********** 基本语句练习*******************/


#建表语句


create table demo 
(
age smallint ,
name varchar(20)

)


#增加行
insert into demo 
(age,name)
values
(20,'张三');


#设置编码
set names GBK


#删除列
 delete from demo where id = 3;
 
 #查询语句
 select * from demo ;
 


 
 
 
 
 select age,name from demo where age>10;
 # 新增列[ 一次只能增加一列]
 alter table demo add age2 tinyint unsigned ;
 alter table demo add age3 tinyint not null default 0;#声明默认值
 
 
 # 建表语句
 
 create table student
 (
    id smallint primary key auto_increment ,
name char (8) not null default "",
age tinyint not null default 0,
email varchar (20) not null default "",
date_in date not null default '2012-01-01'
 ) engine = Innodb charset = UTF-8;
 
 #插入数据
 insert into student
 (name,age,email,date_in)
 values
 ('张思',22,'[email protected]','2013-01-06');
 
 #修改数据
 update student set 
 name = '宋江',
 age=99
 where id =1; 
 
 
 #删除
 delete from student where id =3;
 
 delete from student where id between 1 and 5; 
 等价于: 
 delete from student where id >=1 and id<=5;
 delete from student where id  in (1,2,3,4,5);
 
 #列的增删改
 alter table boy add height tinyint unsigned not null default 149;
 
 alter table boy add height   tinyint unsigned not null default 149  after id;
 
 alter table boy change 被改变的列 新的列声明


  
 

你可能感兴趣的:(Mysql 复习总结)