Python9-MySQL索引-外键-day43
1.以ATM引出DBMS
2、MySQL
-服务端
-客户端
3、通信交流
-授权
-SQL语句
-数据库
create database db1 default charset=utf8;
drop database db1;
-数据表
create table tb2;
create table tb1(
id int not null auto_increment primary key,
name char(10),
department_id int,
constraint fk_user foreign key(department_id) reference tb2(tid)
)engine=innodb default charset=utf-8;
补充外键: 什么时候用主键, 主键的用处?
一张表只能有一个主键
一个主键可以是多个列
CREATE TABLE t5 (
nid int(11) NOT NULL AUTO_INCREMENT,
pid int(11) not NULL,
name char(11),
primary key(nid,pid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; create table t6(
id int auto_increment primary key,
name char(10),
id1 int,
id2 int,
CONSTRAINT fk_t5_t6 foreign key (id1,id2) REFERENCES t1(nid,pid)
)engine=innodb default charset=utf8;
-数据行
insert into tb1(name,age) values('alex',19);
delete from tb1;
truncate talbe tb1;
delete from tb1 where id >10;
update tb1 set name = 'root' id >10;
select * from tb1;
select id,name from tb1;
mysql> desc t5;
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| nid | int(11) | NO | PRI | NULL | auto_increment |
| pid | int(11) | NO | PRI | NULL | |
| num | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+----------------+
mysql> alter table t6 AUTO_INCREMENT=2;
mysql> show create table t6 \G;
*************************** 1. row *********************
Table: t6
Create Table: CREATE TABLE `t6` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`num` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
mysql> select * from t6;
+----+------+
| id | num |
+----+------+
| 20 | 15 |
+----+------+
对于自增:
desc t6;
show create table t6 \G;
alter table t6 AUTO_INCREMENT=2;
Mysql :自增步长
基于会话级别:
查看全局变量
mysql> show session variables like 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+--------------------------+-------+
设置会话步长
mysql> set session auto_increment_increment=2;
Query OK, 0 rows affected (0.01 sec) mysql> insert into t6(num) values(66);
Query OK, 1 row affected (0.44 sec) mysql> select * from t6;
+----+------+
| id | num |
+----+------+
| 20 | 15 |
| 21 | 88 |
| 23 | 66 |
+----+------+
起始值
mysql> set session auto_increment_offset=2; 基于全局级别步长:
mysql> set global auto_increment_increment=200;
mysql> show global variables like 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 200 |
| auto_increment_offset | 1 |
+--------------------------+-------+
mysql> show session variables like 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 200 |
| auto_increment_offset | 1 |
+--------------------------+-------+
起始值
mysql> set global auto_increment_offset=22;
唯一索引:约束不能重复(可以为空),加速查找;
主键也不能重复,主键不能为空,加速查找; create table t1(
id int ....,
num int,
xxx int
unique uq1 (num,xxx)
)
一对一
create table userinfo1(
id int auto_increment primary key,
name char(10),
gender char(10),
email varchar(64)
)engine=innodb default charset=utf8; create table admin(
id int not null auto_increment primary key,
username varchar(64) not null,
password VARCHAR(64) not null,
user_id int not null,
unique uq_u1 (user_id),
CONSTRAINT fk_admin_u1 FOREIGN key (user_id) REFERENCES userinfo1(id)
)engine=innodb default charset=utf8; 多对多
create table userinfo2(
id int auto_increment primary key,
name char(10),
gender char(10),
email varchar(64)
)engine=innodb default charset=utf8; create table host(
id int auto_increment primary key,
hostname char(64)
)engine=innodb default charset=utf8; create table user2host(
id int auto_increment primary key,
userid int not null,
hostid int not null,
unique uq_user_host (userid,hostid),
CONSTRAINT fk_u2h_user FOREIGN key (userid) REFERENCES userinfo2(id),
CONSTRAINT fk_u2h_host FOREIGN key (hostid) REFERENCES host(id)
)engine=innodb default charset=utf8;
MySQL语句数据行操作的补充
增:
insert into tb11(name,age) values('alex',12);
insert into tb11(name,age) values('tim',12),('root',11);
insert into tb12(name,age) select name,age from tb11;
create table tb12(
id int auto_increment primary key,
name varchar(32),
age int
)engine=innodb default charset=utf8;
删:
delete from tb12;
delete from tb12 where id=2;
delete from tb12 where id=2 and name ='tim',
改:
update tb12 set name='tim' where id >12 and name = 'xx'
查:
select * from tb12;
select id,name from tb12;
select id,name from tb12 where id >10 or name ='xxx';
select name,age as cname from tb12;
select name,age,111 from tb12;
select * from tb12 where id not in (1,4,5);
select * from tb12 where id between 1 and 201;
select * from tb12 where id in (select id from tb11) 通配符:
select * from tb12 where name like '%a'
select * from tb12 where name like 'a_' 分页:
select * from tb12 limit 2;
select * from tb12 limit 1,3;
select * from tb12 limit 2 offset 20;
排序:
select * from tb12 order by id desc; 大到小
select * from tb12 order by id asc; 小到大
select * from tb12 order by id asc limit 2;
select * from tb12 order by age desc,id desc;
# select mac(id),part_id from uerinfo5 group by part_id;
# count
# max
# min
# sum
# avg
# 对于聚合函数的结果进行二次筛选,必须用having
# select count(id),part_id from userinfor5 group by part_id where haveing count(id) >1;
# select count(id),part_id from userinfo5 where id >0 group by part_id haveing count(id) >1;
连表
select * from userinfo5 where userinfo5.part_id = department5.id;
select * from userinfo5 left join department5 on userinfo.part_id = department5.id;
userinfo5 左边全部显示 select * from userinfo5 right join department5 on userinfo.part_id = department5.id;
department5右边全部显示
select * from userinfo5 innder join department5 on userinfo.part_id = department5.id;
将出现null时一行隐藏
Python9-MySQL索引-外键-day43的更多相关文章
- mysql字段约束-索引-外键---3
本节所讲内容: 字段修饰符 清空表记录 索引 外键 视图 一:字段修饰符 (约束) 1:null和not null修饰符 我们通过这个例子来看看 mysql> create table wo ...
- MySQL数据库--外键约束及外键使用
什么是主键.外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯 ...
- MySQL中MyISAM与InnoDB区别及选择,mysql添加外键
InnoDB:支持事务处理等不加锁读取支持外键支持行锁不支持FULLTEXT类型的索引不保存表的具体行数,扫描表来计算有多少行DELETE 表时,是一行一行的删除InnoDB 把数据和索引存放在表空间 ...
- 第二百八十节,MySQL数据库-外键链表之一对多,多对多
MySQL数据库-外键链表之一对多,多对多 外键链表之一对多 外键链表:就是a表通过外键连接b表的主键,建立链表关系,需要注意的是a表外键字段类型,必须与要关联的b表的主键字段类型一致,否则无法创建索 ...
- MySQL 建立外键约束
http://www.jzxue.com/shujuku/mysql/201109/06-8742.html MySQL 建立外键约束的语法太晦涩难懂了, 不得不记下笔记. 1. 在建表时建立外键 C ...
- MySQL定义外键的方法
MySQL定义外键的方法是每个学习MySQL的人都需要掌握的知识,下文就对MySQL定义外键的语句写法进行了详细的阐述,供您参考. 外键为MySQL带来了诸多的好处,下面就为您介绍MySQL定义外键的 ...
- MySQL删除外键定义的方法
MySQL外键在定以后,如果我们不再需要这个外键,可以进行删除操作,下面就为您介绍MySQL删除外键定义的方法,供您参考. 不知道大家有没有发现,在定义外键的时候articles.member_id外 ...
- MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作)
MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作): a.创建2张表 create table userinfo(nid int not nul ...
- mysql添加外键无法成功的原因
最近很忙,碰到很多问题都忘了发上来做个记录,现在又忘了,FUCK,现在碰到一个问题, 就是mysql添加外键总是无法成功,我什么都试了,就是没注意signed和unsigned,FUCK,因为我用my ...
随机推荐
- SharePoint 2010开发方面的课堂中整理有关问题
SharePoint 2010开发方面的课堂中整理有关问题 这是我这几天在做一个SharePoint开发的课程的时候,大家提出的一些问题,及我的解答,分享给更多的朋友参考一下 这个文档,也可以在这里下 ...
- mysql必知必会学习笔记(1)
chapter 13 13.1 数据分组 如果要将数据分为多个逻辑组怎么办?? 要用数据分组 13.2 创建分组 使用group by子句.group by会指示对mysql进行分组,然后对每个组进行 ...
- xmanger图形化登陆远程服务器
由于网上的资料比较杂,经过本人整理实际操作验证,保证ok 本人的服务器系统为centos5.8 下面的都是centos服务器上的操作,需要简单的配置下: win客户端使用xmanger软件:首先是服 ...
- 玩转Docker之常用API(四)
原文地址:http://accjiyun.cn/wan-zhuan-dockerzhi-chang-yong-api-si/ 任何一个开发的平台都会向开发者开发API,以供开发者更加自由地使用平台所提 ...
- String与Date转换
public class TimeTraining { public static void changeStr(String str){ str = "137878"; } pu ...
- Flash图表控件FusionCharts调整图表百分比大小
用户可以为图表的宽度和高度设置百分比值,用来替代绝对的像素值. 以百分比的方式调整图表,首先需要更新HTML代码,如下所示: <div id="chartContainer" ...
- JAVA继承与使用
说来惭愧,java学完已经两年了,开发也已经做了快一年了,现在才基本了解继承怎么用,平时都是在一个类中乱写一气.现在感觉原来学的知识真正运用起来还是具有一定的差距.希望能够先夯实基础,共勉.写一下自己 ...
- java 千分位的添加和去除
转至:http://blog.sina.com.cn/s/blog_8f99a1640102v1xh.html 将一个数字转换为有千分位的格式: NumberFormat numberFormat1 ...
- java 多线程的经验总结
什么是线程? 线程是操作系统所能运算调度的最小单元,包含于进程之中,作为进程的实际运作单位:线程与进程的区别,线程是进程的子集,一个进程可以有多个线程,每个线程并行执行不同的任务,不同的进程使用不同的 ...
- iphone 弹出键盘,文本框自动向上移动。
1.让类继承UITextViewDelegate UITextView *inputTextView;UIScrollView * _scrollView; 2.在init函数中先创建scrollVi ...