d3 tip mysql_mysql

字符:

char(10)->定长、10个字符宽度。如果右侧不够,则空格补齐,取出来的时候删除空格。

varchar(10)->变长、最多10个字符

如:存姓名的时候,没必要为了那几个长度去使用varchar,使用定长去存储会提高效率!

日期时间:

Year->1字节->95||1995->【1901-2155】

Date->日期->1998-12-31->【1000-01-01->9999-12-31】

Time->时间->13:56:23->->【-838:59:59->838:59:59】

datetime->时间戳->1970-01-01 00:00:00到当前的秒数

Tip:Date  Date  datetime在insert的时候需要加上引号 、实际开发中,一般不是用这些,直接使用787657676类似于这个样子的整形来存储(其实就是以1970年0点为准,然后换算成秒数存储)。搞iOS开发的肯定遇到过

not null:

1、NULL查询不便、索引效率不高、所以实用中避免列的值为NULL

2、声明列的值为NOT NULL,并且default一个默认值

主键与自增:

主键primary key此列不重复,就能够区分每一行!

一个表中只能有一个auto_increment,而且这一列必须加上primary key索引

修改列:

alter table tableName add 列名 类型 属性... ->默认在table的最后

alter table tableName add 列名 类型 属性 after 制定列名->将增加到制定的列名后面

alter table tableName drop column 列名

alter table tableName change 列名 新名字 类型 属性...

alter table tableName modify 列名 新属性...

change可以修改列名,但是modify不能修改列明,只能修改列的属性

视图(View):

create view vgoods as select goods_name , goods_id from goods;

view又被称为虚拟表,view是sql语句的一个查询结果。

好处:

1、权限控制时可以用;如:某几个列允许用户查询,其他列不可以。

create view tmpview as select goods_name from goods;

select * from tmpview;

2、简化复杂的查询;

3、修改物理表,虚拟表一定会被修改;如果物理表完全 一 一对应着虚拟表,则修改虚拟表会映射到物理表。但是,比如虚拟表是求平均之类的,不是一一对应的,则不能修改虚拟表,因为没法确认到物理表的具体的某一个位置。

查询view有两种可能:

1、将创建view的语句和查询view的语句合并,然后直接查物理表。这种方式叫做merge

2、如果view的形成就比较复杂了,那首先查询物理表,在内存中形成一个view,然后再查询这个view。

使用merge方式:create algorithm-merge view view1 as select ... from goods;

使用temptable:create algorithm-temptable view view2 as select ... from goods;

自己搞不定就让数据库自动决定!

表\视图管理语句:

查看所有表:show tables;

查看结构:desc table/view-name;

查看建表/视图过程:show create  table/view  table/view-name;

删除表/视图:drop table table/view-name;

查看表的详细信息:show table status;加上\G会竖着显示

改表名:rename table old-name to new-name;

清空表数据:truncate;

delete和truncate的区别:

delete  from table-name where id = 2;(id是auto_increment的),下次再插入一个数据的时候,id会直接从3开始,而不会从2开始,即使id=2的已经被删掉。

truncate table-name;相当于执行了两步,首先drop掉这个table。然后又重新建立一次!

所以...自己体会

存储引擎:

Myisam:单纯的存取而已,没有什么检查之类的!

InnoDB:存取都有检查,有自己的日志!

以上两者参考燕十八的比喻!

eg:create....( ... ) engine-InnoDB default charset-utf8;

字符集乱码问题:

文本本来的字符集与展示的字符集不一致就导致了乱码!

我要存的类型是gbk/utf8:set character_set_client = gbk/utf8;

我要取数据,请返回给我gbk/utf8类型的数据:set character_set_result = gbk/utf8;

连接器不要设置比较小的字符集,不然会损失掉数据,而且是不可逆的!

如果client、result、connect都设置为同一样字符集,比如utf8,那就可以直接简写为set names utf8;

乱码的话检查四个地方:php文件类型、php mate类型(meta charset='utf-8')、创建的table的类型、有没有执行set names utf8;

校对集就是一种排序规则。

索引:

作用:

1、索引就相当于数据的目录,能快速定位数据的位置。

2、索引是有代价的,它提高了查询的速度,但是损耗了增删改的效率。

3、一般在查询比较频繁的列上加索引,而且重复率低的的列上效果更好。比如:性别,只有男、女(shit,其他的不考虑),所有就没必要加上索引。

类型:

普通索引key、唯一索引unique key、主键索引primary key、全文索引(在中文环境下无效,一般用第三方的解决方案)

索引在所有的列设置完了之后设置!

1f273728c12e

设置索引

1f273728c12e

设置索引长度

1f273728c12e

多列索引

冗余索引:

就是在某个列上存在多个索引。

索引操作:

show index from table-name \G;

alter table table-name drop index index-name;/drop index index-name on table-name;  (删除索引)

alter table table-name add index unique index-name(line-name);(增加索引)

alter table table-name add primary key (line-name);(增加主键索引,不需要索引名)

alter table table-name drop primary key;(删除主键索引)

事务:(myisam不支持事务)

特性:隔离性、原子性、一致性、持久性(一旦commit之后,就没法rollback)。

start transaction;启用事务

commit;确认

rollback;回滚

我算是知道什么是事务什么事回滚了!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值