美文网首页
sql笔记-2

sql笔记-2

作者: PASSssss | 来源:发表于2017-02-02 15:26 被阅读8次

四.约束

1.创建表时指定约束:

create table tb(

id int primary key auto_increment,

name varchar(20) unique not null,

ref_id int,

foreign key(ref_id) references tb2(id)

);

create table tb2(

id int primary key auto_increment

);

2.外键约束:

(1)增加外键:

可以明确指定外键的名称,如果不指定外键的名称,mysql会自动为你创建一个外键名称。

RESTRICT : 只要本表格里面有指向主表的数据, 在主表里面就无法删除相关记录。

CASCADE : 如果在foreign key 所指向的那个表里面删除一条记录,那么在此表里面的跟那个key一样的所有记录都会一同删掉。

alter table book add [constraint FK_BOOK] foreign key(pubid) references pub_com(id) [on delete restrict] [on update restrict];

(2)删除外键

alter table 表名 drop foreign key 外键(区分大小写,外键名可以desc 表名查看);

3.主键约束:

(1)增加主键(自动增长,只有主键可以自动增长)

Alter table tb add primary key(id) [auto_increment];

(2)删除主键

alter table 表名 drop primary key

(3)增加自动增长

Alter table employee modify id int auto_increment;

(4)删除自动增长

Alter table tb modify id int;

五.多表设计

一对一(311教室和20130405班级,两方都是一):在任意一方保存另一方的主键

一对多、多对一(班级和学生,其中班级为1,学生为多):在多的一方保存一的一方的主键

多对多(教师和学生,两方都是多):使用中间表,保存对应关系

六.多表查询

create table tb (id int primary key,name varchar(20) );

create table ta (

id int primary key,

name varchar(20),

tb_id int

);

insert into tb values(1,'财务部');

insert into tb values(2,'人事部');

insert into tb values(3,'科技部');

insert into ta values (1,'刘备',1);

insert into ta values (2,'关羽',2);

insert into ta values (3,'张飞',3);

mysql> select * from ta;

+----+------+-------+

| id | name | tb_id |

+----+------+-------+

|  1 | aaa  |    1 |

|  2 | bbb  |    2 |

|  3 | bbb  |    4 |

+----+------+-------+

mysql> select * from tb;

+----+------+

| id | name |

+----+------+

|  1 | xxx  |

|  2 | yyy  |

|  3 | yyy  |

+----+------+

1.笛卡尔积查询:

两张表中一条一条对应的记录,m条记录和n条记录查询,最后得到m*n条记录,其中很多错误数据

select * from ta ,tb;

mysql> select * from ta ,tb;

+----+------+-------+----+------+

| id | name | tb_id | id | name |

+----+------+-------+----+------+

|  1 | aaa  |    1 |  1 | xxx  |

|  2 | bbb  |    2 |  1 | xxx  |

|  3 | bbb  |    4 |  1 | xxx  |

|  1 | aaa  |    1 |  2 | yyy  |

|  2 | bbb  |    2 |  2 | yyy  |

|  3 | bbb  |    4 |  2 | yyy  |

|  1 | aaa  |    1 |  3 | yyy  |

|  2 | bbb  |    2 |  3 | yyy  |

|  3 | bbb  |    4 |  3 | yyy  |

+----+------+-------+----+------+

2.内连接:

查询两张表中都有的关联数据,相当于利用条件从笛卡尔积结果中筛选出了正确的结果。

select * from ta ,tb where ta.tb_id = tb.id;

select * from ta inner join tb on ta.tb_id = tb.id;

mysql> select * from ta inner join tb on ta.tb_id = tb.id;

+----+------+-------+----+------+

| id | name | tb_id | id | name |

+----+------+-------+----+------+

|  1 | aaa  |    1 |  1 | xxx  |

|  2 | bbb  |    2 |  2 | yyy  |

+----+------+-------+----+------+

3.外连接

(1)左外连接:在内连接的基础上增加左边有右边没有的结果

select * from ta left join tb on ta.tb_id = tb.id;

mysql> select * from ta left join tb on ta.tb_id = tb.id;

+----+------+-------+------+------+

| id | name | tb_id | id  | name |

+----+------+-------+------+------+

|  1 | aaa  |    1 |    1 | xxx  |

|  2 | bbb  |    2 |    2 | yyy  |

|  3 | bbb  |    4 | NULL | NULL |

+----+------+-------+------+------+

(2)右外连接:在内连接的基础上增加右边有左边没有的结果

select * from ta right join tb on ta.tb_id = tb.id;

mysql> select * from ta right join tb on ta.tb_id = tb.id;

+------+------+-------+----+------+

| id  | name | tb_id | id | name |

+------+------+-------+----+------+

|    1 | aaa  |    1 |  1 | xxx  |

|    2 | bbb  |    2 |  2 | yyy  |

| NULL | NULL |  NULL |  3 | yyy  |

+------+------+-------+----+------+

(3)全外连接:在内连接的基础上增加左边有右边没有的和右边有左边没有的结果

select * from ta full join tb on ta.tb_id = tb.id; --mysql不支持全外连接

select * from ta left join tb on ta.tb_id = tb.id

union

select * from ta right join tb on ta.tb_id = tb.id;

mysql> select * from ta left join tb on ta.tb_id = tb.id

-> union

-> select * from ta right join tb on ta.tb_id = tb.id; --mysql可以使用此种方式间接实现全外连接

+------+------+-------+------+------+

| id  | name | tb_id | id  | name |

+------+------+-------+------+------+

|    1 | aaa  |    1 |    1 | xxx  |

|    2 | bbb  |    2 |    2 | yyy  |

|    3 | bbb  |    4 | NULL | NULL |

| NULL | NULL |  NULL |    3 | yyy  |

+------+------+-------+------+------+

相关文章

  • 2018-07-17

    sql笔记1 sql笔记2 case when then 比较字符串 left join 最近使用left joi...

  • Learn SQL| Codecademy第二节学习笔记

    1、Learn SQL| Codecademy第一节学习笔记 2、学习记录☞Learn SQL| Codecade...

  • Hello SQL

    Hello SQL 目录 一,Mac下安装MySql 二,学习笔记 2-1:学习笔记 2-1:技术图谱: 三,...

  • sql笔记-2

    四.约束 1.创建表时指定约束: create table tb( id int primary key auto...

  • SQL 笔记

    SQL 笔记 SQL 简介 SQL = Structured Query Language 总的来说,SQL语言定...

  • sql map 总结

    参考文章: 1. Sqlmap使用教程【个人笔记精华整理】 2. SQL注入之SQLmap入门 3. 细说sql注...

  • sql预习笔记2

  • 01.MySQL架构与SQL执行流程

    MySql笔记,笔记分为四个部分:1.MySQL架构与SQL执行流程2.MySQL索引原理与使用原则[https:...

  • mysql 操作的常用命令

    sql:SHOWVARIABLESLIKE'character%' mysql学习笔记-常用命令常用sql:SHO...

  • WebGoat 靶场笔记

    sql注入笔记1.String SQL injection SELECT * FROM user_data WHE...

网友评论

      本文标题:sql笔记-2

      本文链接:https://www.haomeiwen.com/subject/hykrittx.html