MYSQL学习笔记_主键和外键的补充_02

1  注意事项

查找时所有属性,可以选择用*,则select * from tb1;

但是用*效率低,因而实际会使用,形如select id,name from tb1;

想要

2 主键和外键补充

//以两列来标识主键

CREATE TABLE t1(

 nid int(11)  NOT NULL AUTO_INCREMENT,

pid int(11)  not NULL,

num int(11) NULL,

PRIMARY KEY(nid,pid) //将nid和pid同时设为主键

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

CREATE TABLE t2(

id int AUTO_INCREMENT PRIMARY KEY,

name CHAR(10),

id1 int,

id2 int,

CONSTRAINT fk_t1_t2 foreign key (id1,id2) REFERENCES t1(nid,pid)

)engine=innodb default charset=utf8;

 

3  新学的命令

desc t1;                            //查看t1表中的字段和类型以及可否为空等属性

show create table t1 \G ;    //可以把t1表的创建语句,以工整的格式输出

alter table t1 auto_increment=1; //如果使用的是delete from t1清空表,使用此命令可设置新id 的起点

4  自增步长-MYSQL是基于会话级别的

在sql server里面的步长是基于表级别的。简单说,sql sever中可以通过对单个表进行设置相应的步长。

而对于mysql而言,步长设置可是全局也可是局部的。局部设置单个会话窗口的步长,不影响其他会话窗口的步长。而全局设置则是设置所有会话窗的步长。

MYSQL中设置自增步长:

   首先使用命令查看步长信息(也可能为): show session variables like 'auto_inc%';   #offset为默认起始值

   设置局部步长为C:set session auto_increment_increment = C;   

   设置全局步长C:set global auto_increment_increment = C;

   设置起始(一般不改):set session auto_increment_offset = 2;  #即设置2为起始值,把session该为global就变为了全局的了

 

  5   唯一索引:    约束和加速查找的功能。与主键的区别是,主键不能为空

      create table t1(

         id in[自增+主键],

         num int,

         xx int,

         unique uq1(num)          //以num为唯一索引,不可重复

         unique uq2(num, xx)    //以num和xx二者为联合唯一索引,(num,xx)序对唯一

)engine------;

 

6  数据表的增删改查补充

   1 增  

     insert into tb2(name, age) select name,age from tb1;

   2 删

     delete from tb2 where id >=2 and name='alex';

     delete from tb2 where id != 2 or name='alex';

   3 改

     update tb2 set name='alex' where id<2 and name='xx';

     update tb2 set name='alex',age=19 where id=4 and name='xx';

  4 查

as的使用:select id,name as cname from tb2 where id>2 or name='xx';  //将name改成cname后显示,仅改变名称。

sleect name,age,11 from tb2;       //查找出tb2 的name和age,并且添加以11命名的列,且所有值均为11

select * from tb2 where id in (1,5,23);  //在tb2表中找出id是1,5,23的行出来

select * from tb2 where not in (1,5,23);  //在tb2表中找出除了id为1,5,23的行

select * from tb2 where id between 2 and 8;//找出id属于[2, 8]区间的行

select * from tb2 where id in (select id from tb1);

    5  通配符查找

select * from tb2 where name like "%a%";  //找tb2里面的,只要name中有a的行就行。若为%a则是以a结尾的行,a%则为以a开头的行

select * from tb2 where name like "a_";     //找出tb2里name中以a_开头的行。其中a_,下划线只能是一个字符。例如ab。

   6  限定查找

select * from tb2 limit 10;//取前10条数据

select * from tb limit 20,10; //从第20条数据起,依次去0条数据

(mysql特殊写法:select * from tb2 limit 10 offset 20;相当于-----limit 20,10;从第20条起取10条)

   7 排序

select * from tb2 order by id desc;//以id为基准,降序排列,也就是从大到小

select * from tb2 order by id asc; //升序排列,即从小到大

 

select * from tb2 order by id desc limit 10;  //取后10条数据

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值