Mysql学习笔记备份

来源:互联网 发布:cf23 2网络出现异常 编辑:程序博客网 时间:2024/04/28 01:04
查找支持的储存引擎
show engines;
\g方式查看比较友好






创建数据库:create database +库名字
删除数据库:
查看库:show databases
创建表:drop database +名字
1.use 库名字
2.create table +表名字
查看表:use 库名字
        show 表名字


创建表的形式如下:
create table class(
 stu int ,
 name varchar(20),
 age int ,
 area varchar(20)
 );




修改表的名字(库名是不能改的):
rename table (oldname) to (newname)


删表:
drop table+ 表名字


描述一张表:
desc+表名


\c终止从新开始




在一张表里写东西
insert into 表名
(id,title,name,content)
values
(1,'初来乍到','张三',‘谁不服?’);
查看表:
select *from +表名


声明插入的字符集:
set names gbk;




增加:
insert into student
(stu,name,age,area)
values
(2,'我',17,'不'),
(3,'asas',23,'sas');






改:
update student
set
stu=3;
where 
stu=2;






删除:
delete from student
where name='';




    查:
查找列:
select +你想要查找的列的名字+form 表名
查找行:
select *from 表名where name='';










create table class(
id int primary  key auto_increment,
name varchar(10),
age tinyint 
)charset utf8;
insert into class
(name,age)
values
('张三',25);




tinyint(M)unsigned 1字节 m using
smallint 2字节
mediumint 3字节
int和integer 4字节
bigint 8字节






增:
insert into 表名
(id,title,name,content)
values
(1,'初来乍到','张三',‘谁不服?’);




改:


update student(表名)
set
id=2(属性名)
where 
name='';(定位)






整形列的可选属性
M:宽度,填充为0时才有意义
unsign;无符号
zerofill:用零填充










增加一列:
alter table +表名 add age2 tinyint +(属性);




可以声明列默认值,并且推荐设置:
not null default 0


例如可以:
alter table +表名 add age2 tinyint not null default 0






浮点列
浮点型Float(M,D)m:存储范围 总位数 d:代表小数位
定点型decinal(M,D)更精确一点








字符型
char (M)定长M:最大可容纳字符数,注意代表的是字符而不是字节 不够用空格补齐,拿的时候去掉  会丢失尾部空格
vaichar(M)变长  多占1-2字节 用来表示实际长度 也就是说最多表示65535个字节转换为字符之后其实可以表示大概22000个字
选的原则:1.空间利用效率2.速度上定长的速度更快
text 大段的文本  搜索速度慢 不能加默认值






尽量用空间换时间;


赋值取出
select concat (name,'!')from stu;将name取出赋值'!';








年:year;
年月日:date;
时间:11:00:00 time
年月日时间:datetime
插入的方式例如:
select * from 表名(
x,y)
values
(‘1991’,‘1991-11-11’);注意时间用单括号因为其实是字符型








正式开发中多用时间戳而不是datetime






枚举类型:
create tbale t(
gender emun('男','女')
)charset utf8;




1.排序:order by 默认是升序
desc降序排列
asc显示声明
可以多字段排序
2.limit起到限制条目的作用
取价格4到6的商品
limit [],[] 第一个是偏移量 第二个是取出数量
limit 第一个不写 limit 0,n


union:
把多次查询结果合并起来
要求:两次查询的次数一致  可以来自多张表
select *from ta
union
select*from tb
如果不同表中有完全相同的行,将会合并,加all就可以破
如果语句中有order by 或limit要加括号










连接查询:表可以看成集合
左连接:1.接上表
        2.连接条件


select
取出的列名
from
表名1 left join 表名2
on 表名1.列名=表名2.列名


完全可以当成一个大表看 可以加五个子句




左为准,右补齐;多则多,少则null  左连接兼容性好


右连接:换成right






内连接:换成inner  左右都连 不要null 左右连接的交集


不支持外连接(左右连接的并集),但是可以用union达到目的


可以三表内连接!!
















表的创建
表增加列 alter table 表名 add 列名 列类型 not null default ...;
默认最后一列 可以用after来声明新增的列在谁后面
如果想增加到第一列最后加first 就可以


修改列  
   alter table 表名 change 被改变的列名 改变后的列名 列声明  


删除列 
   alter table 表名 drop 列名












视图:view
  语法
 create view 视图名 + as select
删除视图:
drop view 视图名
作用
1.可以简化查询
2.可以进行权限控制
3.大数据分表时可以用到 
表的行数超过200万时会变慢,把一张表的数据拆成4张表来存放
id%4+1=(1,2,3,4)表 


还可以把4张表合成一张视图
create  (algorithm=merge )view newa as select from n1 union select n2 union....


查看视图:show create view + 视图名;
select * from 视图名


 
视图的修改
alter view as select ...
mysql> alter algorithm=merge view info_view(id,name,gender,address)  as select i
d,name,sex,address from work_info where age<20 with local check option;


视图的更新(单行修改)








视图和表的关系:
视图是表的查询结果 ,表的数据改变了影响视图的结果
视图的修改也会影响表
但是视图并不是总能影响表
注释:一一对应时可以修改




 


视图的algorithm
algorithm=merge/temptable/undefined
merge 意味着只是一个规则,语句规则,在使用的时候替换
temptable 创建了临时表
undefined 未定义,系统帮你选










字符和编码
1.告诉服务器,我给你发送的数据是什么编码的?character_set_client
2.告诉转换器转换成什么编码?character_set_connection
3.查询结果用什么编码?character_set_results
如果以上三者都为字符集N,则可以简写为set names N






推论什么时候产生乱码:
1.client 声明与事实不符
2.result 与客户端不符




什么时间将会丢失数据:
utf8-->gbk


校对集






触发器:
监视某张表,触发某种操作   
监视器:增删改
相关操作:增删改






主键:
1.单字段主键primary key
2.多字段主键primary key(分别包含字段名)










外键:
create table example3(
id int primary key,
stu_id int,
course_id int,
constraint 外键名fk_id foreign key(当前表的字段名)references example2(对应表的主键字段名));






唯一属性:unique


自动增加字段:
auto_increment




显示详细表信息:
show create table  example \g






修改表名:
alter table 旧表名 rename to 新表名
修改表的数据类型:
alter table 表名 modify 字段名 varchar(30);
修改字段名:
alter table 表名 change 旧属性名 新属性名 新数据类型;
增加字段:
alter table 表名 add 属性名1 数据类型(完整性约束条件)(first|after 属性名2);




删除父表需要先删除外键


删除外键:
alter table 表名 drop foreign key 外键名


表的引擎
Myism  粗略
innodb 仔细






事物
1.一切操作要么都发生要么都不    原子性
2.看不到中间过程                隔离性  
3.保证数据发生前发生后总额一致  一致性
4.事务产生的影响是不能够撤销的  持久性




清空表:truncate table ...


max : 求最大
min : 求最小
sum : 求总和
avg : 求平均
count:求总行数




where,group by,having,order by,limit








索引:
在存的时候:frm文件是结构文件 myd是数据文件 Myi是索引文件
1.普通索引:就是加快搜索速度
2.主键索引: 主键必然是唯一,但是唯一不一定是 主键,一张表上,只能有一个主键但是可一多个唯一
3.唯一索引:行上不能重复
4.全文索引:就是全文加




查看表上的所有索引
show index from 表名\G换显示格式


建立索引:
alter table 表名 add  index/unique/fulltext 索引名<如果不加就默认列名>(列名)
primaty key:不能写索引名 其他同上




增加主键:alter table 表名 add primary key(列名);




删除非主键索引:
alter table 表名 drop index 索引名;
删除主键的索引:alter table 表名 drop primary key;
删除主键时要先删除数据再删除主键






导入表时:要先删索引,再导入数据,再统一建索引
 建索引时:1.在where条件最频繁的地方2.尽量唯一可查的值(不要男女这种)


搜索方式:select * from 表名 where match(列名)against <'匹配词'>;
全文索引的匹配度:


select ...match(列名)against ('匹配词')from 表名;




exists;
 SELECT CategoryName 


 FROM Categories 


 WHERE EXISTS (SELECT NULL) 


ORDER BY CategoryName ASC 

0 0