Mysql 复习总结

2021-08-27 09:52:41 浏览数 (1)

 /********** 基本数据类型*******************/

 #数值

 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,'60002@qq.com','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 被改变的列 新的列声明

0 人点赞