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条数据