自增补充

这是查看怎么创建的表, \G示旋转90度显示表的内容

表的自增的关键是** AUTO_INCREMENT=3**,在表中添加数据后,这个会自动改变,通过alert可以改变这个默认值

  1. mysql> show create table t1 \G;
  2. *************************** 1. row ***************************
  3. Table: t1
  4. Create Table: CREATE TABLE `t1` (
  5. `id` int(11) NOT NULL AUTO_INCREMENT,
  6. `name` char(10) DEFAULT NULL,
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

下一次添加的内容的id会从20处添加

  1. alter table t10 AUTO_INCREMENT=20;

自增步长

mysql是的默认步长是基于会话session的,sqlserver是基于表的。

查看全局变量,其中默认是1

  1. mysql> show session variables like 'auto_inc%';
  2. +--------------------------+-------+
  3. | Variable_name | Value |
  4. +--------------------------+-------+
  5. | auto_increment_increment | 1 |
  6. | auto_increment_offset | 1 |
  7. +--------------------------+-------+
  8. 2 rows in set (0.00 sec)

设置步长基于会话步长,只能自该自己的会话

  1. set session auto_increment_increment=2; 设置会话步长
  2. set session auto_increment_offset=10; 设置开始的位置

基于全局的级别的,可以修改全部的会话

  1. show global variables like 'auto_inc%'; 查看全局变量
  2. set global auto_increment_increment=2; 设置会话步长
  3. set global auto_increment_offset=10;

唯一索引

unique

  1. create table t1(
  2. id int ....,
  3. num int,
  4. xx int,
  5. unique 唯一索引名称 (列名,列名),
  6. constraint ....
  7. )

这了唯一的意思是:

  • 约束不能重复(可以为空)
  • 主键不能重复(不能为空)

作用是加速查找

外键的变种

  • 单列

  • 联合

关联一对多

  1. create table userinfo(
  2. id int auto_increment primary key,
  3. username varchar,
  4. usertype int,
  5. )engine=innodb default charset=utf8;
  6. create table admin(
  7. id int auto_increment primary key,
  8. user_id int,
  9. passwprd varchar,
  10. unique index(user_id),
  11. constraint fk_key1 foreign key (user_id) references userinfo(id)
  12. )engine=innodb default charset=utf8;

  1. -- 外键关联多个列
  2. create table t2(
  3. nid int not null auto_increment,
  4. pid int not null,
  5. num int,
  6. primary key(nid,pid)-- 这里的关联两个列的主键
  7. )engine=innodb default charset=utf8;
  8. create table t3(
  9. id int auto_increment primary key,
  10. name char,
  11. id1 int,
  12. id2 int,
  13. constraint fk_t3_t2 foreign key (id1,id2) references t2(nid,pid)
  14. )engine=innodb default charset=utf8;

多对多

  1. -- 多对多
  2. -- 用户表
  3. create table userinfo(
  4. id int auto_increment primary key,
  5. username varchar,
  6. gender int,
  7. )engine=innodb default charset=utf8;
  8. -- 主机表
  9. create table computer(
  10. id int auto_increment primary key,
  11. name varchar,
  12. )engine=innodb default charset=utf8;
  13. -- 用户主机关系表
  14. create table userandcom(
  15. id int auto_increment primary key,
  16. user_id int,
  17. host_id int,
  18. unique index(user_id,host_id),
  19. constraint fk_key2 foreign key (user_id) references userinfo(id),
  20. constraint fk_key3 foreign key (host_id) references computer(id)
  21. )engine=innodb default charset=utf8;

SQL语句数据行操作补充

  1. -- 增加单条数据
  2. insert into t1 (name) values('ddd');
  3. 增加多条数据
  4. -- insert into t1 (name) values('ddd'),('eee');
  5. -- 从一个表中添加另一个内容
  6. insert into t4(name) select name from t1;
  7. +------+------+
  8. | id | name |
  9. +------+------+
  10. | NULL | aaa |
  11. | NULL | aaa |
  12. | NULL | ccc |
  13. | NULL | ddd |
  14. | NULL | eee |
  15. +------+------+
  16. 这里出现null的原因是在创建表的时候没有添加自增和主键

在调试中发现char后面不加长度,默认的长度是1,所以要添加一个长度。这个是根据需求


  1. delete from tb12;
  2. delete from tb12 where id !=2
  3. delete from tb12 where id =2
  4. delete from tb12 where id > 2
  5. delete from tb12 where id >=2
  6. delete from tb12 where id >=2 or name='a'
  1. update tb12 set name='a' where id>12 and name='xx'
  2. update tb12 set name='a',age=19 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 id,name as cname from tb12 where id > 10 or name ='xxx';

select name,age,11 from tb12;

select * from tb12 where id != 1

select * from tb12 where id in (1,5,12);

select * from tb12 where id not in (1,5,12);

select * from tb12 where id in (select id from tb11)

select * from tb12 where id between 5 and 12;

  • 通配符

    通配符的意识替换的意思

    %能够替换多个字符

    _只能替换一个字符
  1. select * from tb12 where name like "a%"
  2. select * from tb12 where name like "aa_"
  • 分页
  1. select * from tb12 limit 10;
  2. select * from tb12 limit 0,10;
  3. select * from tb12 limit 10,10;
  4. select * from tb12 limit 20,10;

后期的Python应用

  1. # page = input('请输入要查看的页码')
  2. # page = int(page)
  3. # (page-1) * 10
  4. # select * from tb12 limit 0,10; 第一页1
  5. # select * from tb12 limit 10,10;第二页2
  • 排序
  1. select * from tb12 order by id desc; 大到小
  2. select * from tb12 order by id asc; 小到大
  3. select * from tb12 order by age desc,id desc; # 这是优先级 先按照age倒序,后按照id排序(ID中有相同的)
  4. 取后10条数据:先倒序后去取
  5. select * from tb12 order by id desc limit 10;
  1. mysql> select * from t5 order by name desc,id desc;
  2. +----+------+
  3. | id | name |
  4. +----+------+
  5. | 5 | eee |
  6. | 4 | ddd |
  7. | 3 | ccc |
  8. | 2 | aaa |
  9. | 1 | aaa |
  10. +----+------+
  11. 5 rows in set (0.00 sec)
  12. mysql> select * from t5 order by name desc,id asc;
  13. +----+------+
  14. | id | name |
  15. +----+------+
  16. | 5 | eee |
  17. | 4 | ddd |
  18. | 3 | ccc |
  19. | 1 | aaa |
  20. | 2 | aaa |
  21. +----+------+
  • 分组

select count(id),max(id),part_id from userinfo5 group by part_id;

  1. - count
  2. - max
  3. - min
  4. - sum
  5. - avg

如果对于聚合函数结果进行二次筛选时?必须使用having ,不能使用where

select count(id),part_id from userinfo5 group by part_id having count(id) > 1;

  • 连表操作

连表操作主要是把两张表显示在一张表上,主要用过join

  1. select * from userinfo5,department5 -- 这种是笛卡尔积的形式 即所有的乘积
  2. select * from userinfo5,department5 where userinfo5.part_id = department5.id;
  3. 左边全部显示
  4. select * from userinfo5 left join department5 on userinfo5.part_id = department5.id
  5. 右边全部显示
  6. select * from userinfo5 right join department5 on userinfo5.part_id = department5.id
  7. select * from department5 left join userinfo5 on userinfo5.part_id = department5.id;这种就是变相的right

如果一张表显示全部,但是另一张表还有多的内容的时候,就会出现空null

inner join 将出现null时一行隐藏

  1. select * from userinfo5 innder join department5 on userinfo5.part_id = department5.id
  1. mysql> select * from t1 left join t5 on t1.id=t5.id;
  2. +----+-------+------+------+
  3. | id | name | id | name |
  4. +----+-------+------+------+
  5. | 1 | aaa | 1 | aaa |
  6. | 2 | aaa | 2 | aaa |
  7. | 3 | ccc | 3 | ccc |
  8. | 4 | ddd | 4 | ddd |
  9. | 5 | eee | 5 | eee |
  10. | 6 | hahah | NULL | NULL |
  11. +----+-------+------+------+

隐藏空行

  1. mysql> select * from t1 inner join t5 on t1.id=t5.id;
  2. +----+------+----+------+
  3. | id | name | id | name |
  4. +----+------+----+------+
  5. | 1 | aaa | 1 | aaa |
  6. | 2 | aaa | 2 | aaa |
  7. | 3 | ccc | 3 | ccc |
  8. | 4 | ddd | 4 | ddd |
  9. | 5 | eee | 5 | eee |
  10. +----+------+----+------+
  11. 5 rows in set (0.00 sec)

数据库的备份

数据库导出

  • mysqldump -u用户名 -p密码 数据库名称 >导出文件路径 # 结构+数据(导入的时候会自动穿件表并把表的内容插入)

  • mysqldump -u用户名 -p密码 -d 数据库名称 >导出文件路径 # 仅仅结构

    导入现有数据库数据:

  • mysql -uroot -p密码 数据库名称 < 文件路径

注意的是导入的时候不能用dump

MySQL 外键 表的查询的更多相关文章

  1. mysql 外键和子查询,视图

    1.mysql 外键约束 建表时生成外键   foreing key ('sid') references' student'('id'); 建表后添加外键  alter table' course ...

  2. day03 mysql外键 表的三种关系 单表查询 navicat

    day03 mysql navicat   一.完整性约束之     外键 foreign key     一个表(关联表: 是从表)设置了外键字段的值, 对应的是另一个表的一条记录(被关联表: 是主 ...

  3. MySQL外键和高级查询(连接查询、联合查询、子查询、去重查询)

    MySQL的外键 什么是外键,很简单保持数据一致性的一个约束键.如果你有两张表,第一张是学生表,第二张表是一个成绩表,我们来看看保持数据一致性,其实在Django等框架的模型中中也能做关联获取对象. ...

  4. MYSQL - 外键、约束、多表查询、子查询、视图、事务

    MYSQL - 外键.约束.多表查询.子查询.视图.事务 关系 创建成绩表scores,结构如下 id 学生 科目 成绩 思考:学生列应该存什么信息呢? 答:学生列的数据不是在这里新建的,而应该从学生 ...

  5. mysql外键是多个id组成的字符串,查询方法

    借鉴:mysql使用instr达到in(字符串)的效果 结论:select * from 表名where INSTR(CONCAT(字符串),CONCAT(表id)) 问题来源:一表中的某字段是另一表 ...

  6. Django ORM - 001 - 外键表查询主表信息

    开始用Django做web开发,我想大家都会遇到同样的问题,那就是如何高效快速的查询需要的数据,MVC都很简单,但是ORM折腾起来就有些费时间,我准备好好研究下Django ORM,所以会有一个系列的 ...

  7. 数据库内连接GROUP BY查询外键表数据行的总数

    最近看了看SQL,刚好遇到这个问题. INNER JOIN [外键表] ON [主键表] 内链接,用 GROUP BY 分组外键数据,COUNT(*)计算该外键数据总行数,最后用 ORDER BY 排 ...

  8. mysql 外键(FOREIGN KEY)

    最近有开始做一个实验室管理系统,因为分了几个表进行存储·所以要维护表间的关联··研究了一下MySQL的外键. (1)只有InnoDB类型的表才可以使用外键,mysql默认是MyISAM,这种类型不支持 ...

  9. MySQL外键约束On Delete、On Update各取值的含义

    主键.外键和索引的区别?   主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 主索引(由关键字PRIMARY定义的索引) ...

随机推荐

  1. tf.pad()

      说一下我理解的tf.pad(),先来看一下定义: def pad(tensor, paddings, mode="CONSTANT", name=None, constant_ ...

  2. Codeforces Round #360 (Div. 1)A (二分图&dfs染色)

    题目链接:http://codeforces.com/problemset/problem/687/A 题意:给出一个n个点m条边的图,分别将每条边连接的两个点放到两个集合中,输出两个集合中的点,若不 ...

  3. 洛谷P3200 [HNOI2009]有趣的数列(Catalan数)

    P3200 [HNOI2009]有趣的数列 题目描述 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足 ...

  4. java CDI

    Scope声明周期 http://www.cnblogs.com/yjmyzz/p/javaee-cdi-bean-scope.html

  5. Jar命令用法

    JAR文件 JAR文件 全称:Java Archive File , 意思是Java档案文件.通常JAR文件是一种压缩文件,与常见的ZIP压缩文件兼容,通常被称为JAR包. JAR文件和ZIP文件的区 ...

  6. shell学习(10)- if的使用

    在写Linux脚本的时候,经常会用到判断,这篇主要讲if的具体使用. if用法: if [ ] ;then command elif [ ] ;then command else command fi ...

  7. mysql5.7安装部署后初始密码查看以及修改

    一.查看初始密码以下两种方法: 1.找到自己的error.log日志文件,执行自己的命令,红色标记的部分为初始化密码. grep 'temporary password' /data/mysql/er ...

  8. 通过sqlserver sa密码修改windows操作系统密码

    如果你不记得windows管理员的密码了,但知道sqlserver sa用户的密码,可以通过以下方式修改: 进入SQL之后执行以下语句: -- 允许配置高级选项  EXEC sp_configure ...

  9. [HNOI 2012]三角形覆盖问题

    Description 二维平面中,给定   N个等腰直角三角形(每个三角形的两条直角边分别     平行于坐标轴,斜边从左上到右下).我们用三个非负整数( x, y, d)来描   述这样一个三角形 ...

  10. WebStorm技巧-常用快捷键

      Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/*-*/ ) Shift+F6 重构-重命名 Ctrl+X 删除行 Ctrl+D 复制行 Ctrl+G 查找行 Ctrl+Shift+ ...