精华内容
下载资源
问答
  • Mysql数据库主键外键的理解 1:什么是主键 在一张表中,用来唯一标识一条记录的字段集,叫做主关键字或者关键码,简称主键 2:什么是外键 一张表的非主属性是另一个表的主属性就是这个表的外键 一张表的...

    Mysql数据库主键外键的理解

    1:什么是主键

          在一张表中,用来唯一标识一条记录的字段集,叫做主关键字或者关键码,简称主键

    2:什么是外键

       一张表的非主属性是另一个表的主属性就是这个表的外键

      一张表的非主属性是另一个表的主属性就是这个表的外键。这里有两个分别为: 学生表(学号, 姓名, 性别,专业编号),专业信息表(专业编号,专业名称,专业备注信息)。学生表中主键是学号,专业信息表中主键是专业编号。学生表中的非主属性专业编号恰好是专业信息表中的主键。我们就称这个专业编号是学生表的外键。像这样,一个表的非主属性是另一个表的主属性,该非主属性就是外键。

    3: 什么是父表和子表

         有两张表A表和B表,表A中的一个字段id是外键,表B中的一个字段id是主键,那么称B为父表,A为子表。

         设置表的外键的作用在于建立与父表的联系

         就是说一个表中外键字段(相当于这里的A表)是另一个表中(相当于这里的B表)的主键。 还是上面的两个表来举例理解:学生表(学号, 姓名, 性别,专业编号),专业信息表(专业编号,专业名称,专业备注信息)。这里学生表是子表,专业信息表是父表。比如在专业信息表中某个专业编号的id为'1001',删除这个id后,则学生表中的专业编号id为'1001'的记录也随着删除,这样做的目的在于保证表的完整性。

     数据库的三种约束

         1.实体完整性约束指的是主键不能为空,如果主键为空了还怎么唯一标识一条记录。
         2.参照完整性约束,即外键的约束,某一外键的值必须在它引用的主键字段中存在。如,学生表中专业编号属性的值,必须都存于专业信息表中的专业编号属性中。想一想也就明白了,一个学生(大学生)怎么可能属于一个不存在的专业。
         3.用户自定义完整性约束,指的是一些用户自己设定的约束,例如字段是否可以为空,字段值的取值范围(如:人的性别只能取男、女)。

    展开全文
  • [导读 ] 使用 MySQL 开发过数据库驱动的小型 web 应用程序的人都知道对关系数据库 的表进行创建 检索更新删除等操作都是些比较简单的过程 理论上 只要掌握了最常 见的 SQL 语句的用法并熟悉您选择使用的服务器端...
  • mysql数据类型 1.1数值型:int tinyint微整型 smallint 小整型 1.2小数类型:decimal(总位数,小数位) 例:价格 decimal(5,2) 100.00-999.99 日期时间类型 datetime 年月日时分秒 字符串类型 char(字符串的长度)...

    查看数据库:show databases;
    创建数据库:create database 数据库名;
    删除数据库:drop database 数据库名;
    单行注释–注释内容
    多行注释:/内容/

    1、mysql数据类型

    1. 数值型:int tinyint微整型 smallint 小整型
      小数类型:decimal(总位数,小数位)
      例:价格 decimal(5,2) 100.00-999.99
    2. 日期和时间类型
      datetime 年月日时分秒
    3. 字符串类型
      char(字符串的长度)定长的类型
      varchar(不定长的类型)

    2、创建表:

    create table 表名(
    列名1 数据类型(长度),
    列名2 数据类型(长度),
    列名3 数据类型(长度),
    列名n 数据类型(长度);
    

    创建第一张表:student(包含学号,姓名,年龄,性别属性)

    create table student(
    	学号 varchar(7),
    	姓名 char(4),
    	年龄 int,
    	性别 char(2)
    );
    

    3、表的操作

    #删除表:
    #drop table 表名;
    #修改表:
    alter table
    #添加列:
    alter table 表名 add 列名 数据类型;
    #例:给student表添加一个系别
    alter table student add 系别 varchar(6);
    #删除列:
    alter table 表名 drop 列名;
    #修改数据类型:
    alter table 表名 modify 列名 新的数据类型;
    #修改列名:
    alter table 表名 change  旧列名 新列名 数据类型;
    

    显示表结构:desc +table_name;

    4、实体完整性与约束

    1、主键约束: primary key 唯一,不重复,不为空。
    格式一:

    create table 表名(
    列名1  数据类型  primary key,
    列名2 数据类型,
    .....
    );
    

    或者在里面加:constraint 约束名字 primary key(列名);
    针对已经存在的表增加主键约束:

    alter table 表名 add constraint 主键名 primary key (列名);
    alter table  dada add constraint pk_a primary key(names); 
    
    

    1.1删除主键约束:

    alter table 表名 drop primary key;
    

    1.2针对已经存在的表增加联合主键:

    alter table 表名 add  constraint  主键约束的名字 primary key(列名1,列名2);#未存在的表直接加在列后
    

    2、唯一约束:unique
    特征:1.唯一约束修饰的列,不允许有重复的值,但是可以有空值;2.一个表中可以有多个唯一约束;3.唯一约束默认情况下,约束名字和列名是一样的;4.具有唯一约束的列,系统会自动给它分配一个唯一索引。****
    增加唯一约束:

    alter table 表名 add unique(列名)

    2.1删除唯一约束
    格式:

    alter table 表名 drop index  唯一约束的名字;
    

    3、默认约束:default 一个表可以有多个
    格式:default ‘值’
    针对存在表,增加默认约束

    alter table 表名 modify 列名 数据类型 default '值';
    

    3、1删除默认约束

    alter table 表名 modify 列名 数据类型;
    

    4、非空约束 not null 可以有多个
    表增加

    alter table 表名 modify 列名 数据类型 not null;
    

    4、1删除非空约束

    alter table 表名 modify 列名 数据类型;
    

    5、外键约束: foreign key 可以有多个 ,从表参照主表,主表也参照从表,可以列名不一样但是数据类型和内容必须一样。
    增加外键约束

    alter table 从表 add constraint 外键名 foreign key (从表列名) references 主表(主表列名);
    

    5.1删除外键约束
    格式:

    alter table 从表表名 drop foreign key  外键约束的名字;
    

    建表注意:先主表再从表

    展开全文
  • 主键和外键都是约束。主键用于保持数据完整性,外键作用于两个表建立连接。下面分别介绍主键外键及其区别。 主键 表中经常有多个列,主键是唯一标识表中每行的列。一个表只能有一个主键主键列不能包含null值。 ...

    主键和外键都是约束。主键用于保持数据完整性,外键作用于两个表建立连接。下面分别介绍主键、外键及其区别。

    主键

    表中经常有多个列,主键是唯一标识表中每行的列。一个表只能有一个主键,主键列不能包含null值。

    例如:
    学生表(学号,姓名,性别,班级)
    其中每个学生的学号是唯一的,学号就是一个主键;

    课程表(课程编号,课程名,学分)
    其中课程编号是唯一的,课程编号就是一个主键

    联合主键

    当某一列不能唯一识别每行,使用联合主键,将两列看为一个整体。非空、唯一、不重复。

    例如:
    成绩表(学号,课程号,成绩)

    成绩表中单一一个属性无法唯一标识一条记录,学号和课程编号的组合才可以唯一标识一条记录,所以学号和课程编号的属性组是一个主键。

    外键

    外键用于与另一张表相关联。以另一个表的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。
    表的外键值必须在主表中能找到。
    当主表的记录被从表参照时,主表的记录不允许删除。

    例如:
    在这里插入图片描述

    class表与Student表通过class_id 关联,实现一对多的关系。class_id作为Student表的外键,Student表为从表,在class表中为主键,class表为主表。

    主键、外键和索引的区别:

    a.定义

    主键:唯一标识一条记录,不能有重复,不允许为空。
    外键:表的外键是另一表的主键,外键是可以有重复的,可以是空值。
    索引:该字段没有重复值,但可以有一个空值。

    b.作用

    主键:用来保证数据完整性
    外键:用来和其他表建立联系用
    索引:用来提高查询排序的速度

    c.个数

    主键:主键只能有一个。
    外键:一个表可以有多个外键。
    索引:一个表可以有多个唯一索引。

    添加主键、外键约束

    主键约束

    create table 表名(
      列名1 数据类型 primary key,
    	列名2 数据类型
    );
    --------或------------
    create table 表名(
      列名1 数据类型,
    	列名2 数据类型,
      primary key(列名1)
    );
    ------已经存在的表-----
    alter table 表名 add primary key(列名);
    

    外键约束

    ---------主表------
    create table1(
    		列名1 数据类型 primary key,
    		列名2 数据类型  
    );
    ----从表(外键约束所在的表)------
    create table2(
    	FK_列名1 数据类型,
      列名2 数据类型,
      constraint 外键约束的名字 foreign key(从表的列名1) references 主表表名(主表的列名1)
    );
    
    展开全文
  • 数据库主键和外键

    万次阅读 2018-05-17 18:19:28
    刚开始学数据库的时候,刚接触到的一个较为陌生的概念就是主键和外键。啥叫主键,从字面意思上来看感觉一脸懵。简单点说主键就类似每个人的身份证,代表一个唯一的某个人,而且主键不能为空,估计你也没见过哪个人...

                刚开始学数据库的时候,刚接触到的一个较为陌生的概念就是主键和外键。啥叫主键,从字面意思上来看感觉一脸懵。简单点说主键就类似每个人的身份证,代表一个唯一的某个人,而且主键不能为空,估计你也没见过哪个人没有身份证的。

                 那外键是啥,一个表中的某一个或多个字段是关联另一个表的主键,那我们把这一个或多个字段称为这个表的外键,外键可以是这个表的主键也可以不是。外键的作用是保证引用数据的完整性。

                来看看书上是怎么定义主键的。主键:又称主码,是表中一列或多列的组合。下面来展示如何创建主键。

     create table stu( id int PRIMARY KEY, name varchar(10), hobby varchar(20) );
    Query OK, 0 rows affected (0.03 sec)
    
    mysql> show create table stu;
    +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Table | Create Table                                                                                                                                                                     |
    +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | stu   | CREATE TABLE `stu` (
      `id` int(11) NOT NULL,
      `name` varchar(10) DEFAULT NULL,
      `hobby` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
    +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)

    主键id显示的是NOT NULL,PRIMARY KEY (`id`)表明id是主键,上面是单字段主键。

    mysql> create table stu1( id int , name varchar(10), hobby varchar(20),primary key(id,name) );
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> show create table stu1;
    +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Table | Create Table                                                                                                                                                                         |
    +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | stu1  | CREATE TABLE `stu1` (
      `id` int(11) NOT NULL,
      `name` varchar(10) NOT NULL,
      `hobby` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`id`,`name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
    +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    

    上面是多字段主键。

    mysql> create table stu2( id int primary key, stu_id int, name varchar(20),constraint fk_stu foreign key(stu_id) references stu(id) );
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> 
    mysql> 
    mysql> show create table stu2;
    +-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Table | Create Table                                                                                                                                                                                                                                                                    |
    +-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | stu2  | CREATE TABLE `stu2` (
      `id` int(11) NOT NULL,
      `stu_id` int(11) DEFAULT NULL,
      `name` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `fk_stu` (`stu_id`),
      CONSTRAINT `fk_stu` FOREIGN KEY (`stu_id`) REFERENCES `stu` (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
    +-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    

    在表stu2上添加了fk_stu的外键约束,外键名称为stu_id,其依赖于表stu的主键id。下面来看外键保证引用数据的完整性 。

    mysql> select * from stu2;
    +----+--------+------+
    | id | stu_id | name |
    +----+--------+------+
    |  1 |      1 | lisi |
    +----+--------+------+
    1 row in set (0.00 sec)
    
    mysql> select * from stu;
    +----+----------+-------+
    | id | name     | hobby |
    +----+----------+-------+
    |  1 | zhangdan | daqiu |
    +----+----------+-------+
    1 row in set (0.00 sec)

    上面是2个表中的数据。表stu2的外键stu_id和stu的主键一一对应。现在再想表stu2中插入数据。

    mysql> insert into stu2 values(1,2,"wangwu");
    ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
    mysql> 
    

    插入记录报错了,因为表stu中没有id=2的记录。

    mysql> insert into stu values(2,"wangwu","chifan");
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from stu;
    +----+----------+--------+
    | id | name     | hobby  |
    +----+----------+--------+
    |  1 | zhangdan | daqiu  |
    |  2 | wangwu   | chifan |
    +----+----------+--------+
    2 rows in set (0.00 sec)
    mysql> insert into stu2 values(2,2,"zhaoliu");
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from stu2;
    +----+--------+---------+
    | id | stu_id | name    |
    +----+--------+---------+
    |  1 |      1 | lisi    |
    |  2 |      2 | zhaoliu |
    +----+--------+---------+
    2 rows in set (0.00 sec)
    
    mysql> 
    

    我们先向表stu表插入id=2的字段,再对stu2操作就成功了。主表先动,从表才能动。从表是含有外键约束的那个表,主表就是那个含有外键约束对应主键的那个表。再想想,如果试着删除某一行会发生啥。

    mysql> delete * from stu2 where id=2;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* from stu2 where id=2' at line 1
    mysql> delete * from stu where id=2;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* from stu where id=2' at line 1
    mysql> 
    

    不管对stu还是stu2进行删除操作都会失败,因为2个表已经有了约束关系,谁也离不开谁了。

     

     

     

     

     

    展开全文
  • MySql数据库主键外键与数据库设计

    千次阅读 2019-05-20 01:38:57
    MySql数据库主键外键与数据库设计
  • MySQL数据库主键和外键详解

    千次阅读 2020-03-20 20:15:42
    MySQL数据库主键和外键详解 主键 主键的定义 主键:表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 ...
  • 关系型数据库(例如mysql)中的一条记录中有若干个属性,若其中一个属性组(注意是组)能标识唯一一条记录,该属性组就可以称为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号...
  • 数据库主键外键 我们知道,好的数据结构会影响速度,当然,好的数据库表设计会影响数据库操作效率。 特别是数据特别多的时候如果表的结构不好的话,操作将会变得特别复杂。其中,主键和外键值得我们去了解。 在...
  • MySQL数据库主键和外键的操作

    千次阅读 2018-10-29 22:43:25
    MySQL数据库中,一般会涉及到主键和外键,在上一个表中添加了主键之后,通常在下一个表中要添加外键,但是添加了外键之后,在实体类数据库中在加上上一个表的主键会比较好,这样两个表关联之后,在上一个表查询...
  • # 创建数据库studyhe create database studyhe charset=utf8; # 查看当前使用的数据库 SELECT database(); # 使用studyhe数据库 use studyhe; # 显示studyhe数据库下所有表 show tables; # 创建学生...
  • 数据库主键外键

    2018-06-28 18:00:23
    刚刚学习的时候,主键和外键弄不懂,现在终于弄懂了。一、什么是主键外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表...
  • MySQL数据库主键外键 在数据库中,数据的增删改查是数据管理的日常操作,也是数据库设计是否科学的一个检验标准。这里以MySQL数据库“学生成绩管理系统”为例来说明数据的增删改查可能出现的一些问题,进而说明...
  • MySQL数据库主键和外键详解主键主键的定义主键:表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY ...
  • SQL的主键和外键的作用:   外键取值规则:空值或参照的主键值。 (1)插入非空值时,如果主键表中没有这个值,则不能插入。 (2)更新时,不能改为主键表中没有的值。 (3)删除主键表记录时,你可以在建外键时选定外键...
  • CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主表主键列名) ); 删除外键约束 ALTER TABLE 表名 DROP FOREIGN KEY 外键名; 建表后单独添加外键约束 ALTER TABLE 表名 ADD ...
  • mysql-主键和外键

    2016-10-14 23:43:12
    主键和外键定义关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 。学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一...
  • 主键 学生表(学号,姓名,性别,班级)  其中每个学生的学号是唯一的...成绩表中的学号不是成绩表的主键,但它学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键 主键...
  • Mysql主键和外键

    2019-07-06 10:47:06
    主键和外键 ** 什么是主键和外键 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组(列)就可以成为一个主键。 譬如: 学生表(学号(为主键),姓名,性别,班级...
  • MySQL主键和外键

    千次阅读 2018-07-16 09:23:50
    从报错信息看,应当是表的主键和外键的问题,先用show create table products查看表products的创建信息: 外键关系涉及一个包含中心数据值的父表,以及一个具有相同值的子表,指向其父表。这里的子表是product,...
  • Chapter2 MySQL主键外键、自增 文章目录Chapter2 MySQL主键外键、自增一、主键二、外键三、自增 一、主键 #主键的作用是保证数据的唯一性 #一个表只能有一个主键,但主键可以由多列构成,只要多列合成表现...
  • 主要介绍了MySQL主键外键的区别联系,是MySQL入门学习中的基础知识,需要的朋友可以参考下
  • mysql主键和外键

    2019-12-29 10:29:54
    数据库主键,指的是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性。主键主要是用于其他表的外键关联,以及本记录的修改与删除。 二.外键 1>.什么是外键  如果公共关键字在...
  • MySQL数据库SQL的主键和外键的作用

    千次阅读 2018-06-18 22:52:20
    SQL的主键和外键的作用:外键取值规则:空值或参照的主键值。(1)插入非空值时,如果主键表中没有这个值,则不能插入。(2)更新时,不能改为主键表中没有的值。(3)删除主键表记录时,你可以在建外键时选定外键记录一起...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 72,619
精华内容 29,047
关键字:

mysql数据库主键和外键

mysql 订阅