精华内容
下载资源
问答
  • 2021-01-28 00:39:07

    设置MySQL数据表主键:

    使用“primary key”关键字创建主键数据列。被设置为主键列不允许出现重复的值,很多情况下与“auto_increment”递增数字相结合。如下SQL语句所示:

    
     

    Mysql>createtablebooks(bookidint(11)NOTNULLAUTO_INCREMENTPRIMARYKEY,booknamevarchar(50));

    Mysql>insertintobooks(bookname)values(“book1”),(“book2”),(“book3”);

    Mysql>select*frombooks;

    若要修改列主键或类型,请参考 ALTER TABLE 语句。

    设置MySQL数据表外键

    外键是设置当前表中的某一列与别一数据表中的主键列关联。主要目的是控制与外键表中的数据,保持数据一致性,完整性,也就是说:当前表中这一列的数据必须是关联外键列中的某一数据,而且相关联的两个数据列的类型必须相同;当关联外键列某一数据修改或删除时,将触当前表的某一项相应操作。可解发以下事件以及参数:

    触发事件:on delete和on update

    可设参数:cascade(跟随外键改动);

    restrict(限制外表中的外键改动);

    set Null(设空值);

    set Default(设默认值);

    no action [默认]

    设置关联的语句由[指定主键关键字:foreign key(列名)]和[引用外键关键字: references (外键列名)]组成。例如创建一个关于books的购物车数据表“gbooks”,其中“gbookid”与books表中的“bookid”创建外键关联。

    
     

    Mysql>createtablegbooks(gidint(11)notnullauto_incrementprimarykey,gbookidint(11),goodsumint(4),foreignkey(gbookid)referencesbooks(bookid)ondeletecascadeonupdatecascade);

    删除外键:

    首先,使用SHOW CREATE TABLE语句查看创建表描述。其中“CONSTRAINT”关键字后面有一个引号括起来的名称,它就是这个表外键的代表,是在创建外键时自动生成的名称,当然在创建的过程中可以直接用“CONSTRAINT”关键字自定义名称。其查看的完整语句如下:

    
     

    Mysql>showcreatetablegbooks;

    这里代表外键的名称是“gbooks_ibfk_1”,目标找到了,再使用ALTER语句进行删除。

    
     

    Mysql>ALTERTABLEgbooksDROPFOREIGNKEYgbooks_ibfk_1;

    主键和外键的设置意义:

    主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。

    必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。而主键和外键的结构是这个设计过程的症结所在。一旦将所设计的数据库用于了生产环境,就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和值得的。

    主键:

    关系数据库依赖于主键—它是数据库物理模式的基石。主键在物理层面上只有两个用途:

    1. 惟一地标识一行。

    2. 作为一个可以被外键有效引用的对象。

    基于以上这两个用途,下面给出了我在设计物理层面的主键时所遵循的一些原则:

    1. 主键应当是对用户没有意义的。如果用户看到了一个表示多对多关系的连接表中的数据,并抱怨它没有什么用处,那就证明它的主键设计地很好。

    2. 主键应该是单列的,以便提高连接和筛选操作的效率。

    3. 永远也不要更新主键。实际上,因为主键除了惟一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新。

    注:这项原则对于那些经常需要在数据转换或多数据库合并时进行数据整理的数据并不适用。

    4. 主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等。

    5. 主键应当有计算机自动生成。如果由人来对主键的创建进行干预,就会使它带有除了惟一标识一行以外的意义。一旦越过这个界限,就可能产生认为修改主键的动机,这样,这种系统用来链接记录行、管理记录行的关键手段就会落入不了解数据库设计的人的手中。

    外键是用来和其他表建立联系用的:这个表中的一列和另外一个表中的一列相同,为了让这两个表联系起来,就把其中一个表中的列设成外键,把另外一个表列设成主键,就实现了这两个表的关联。一个表可以有多个外键。但主键只能有一个。

    更多相关内容
  • 个表都应该有一个主键,并且每个表只能一个主键主键约束操作包含了添加约束和删除约束,修改约束其实是添加约束或者删除约束。添加主键约束比较 简单,但是删除一个没有约束名的主键约束则比较复杂,如果不是...
  • 外键必须是另一个表主键

    千次阅读 2019-03-01 14:48:49
    外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。当创建或修改时可通过定义 FOREIGN KEY 约束来创建外键。 外键引用中,当一个表的列被引用作为另一个表的主键值的列时,就之间创建了链接...

    不一定是主键,但必须是唯一性索引。

    主键约束和唯一性约束都是唯一性索引。

     

     

    FOREIGN KEY 约束

    SQL Server 2008

    其他版本

    外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。当创建或修改表时可通过定义 FOREIGN KEY 约束来创建外键。

    在外键引用中,当一个表的列被引用作为另一个表的主键值的列时,就在两表之间创建了链接。这个列就成为第二个表的外键。

    例如,因为销售订单和销售人员之间存在一种逻辑关系,所以 AdventureWorks 数据库中的 Sales.SalesOrderHeader 表含有一个指向Sales.SalesPerson 表的链接。SalesOrderHeader 表中的 SalesPersonID 列与 SalesPerson 表中的主键列相对应。SalesOrderHeader 表中的SalesPersonID 列是指向 SalesPerson 表的外键。

    SalesOrderHeader.SalesPersonID 为外键。

    FOREIGN KEY 约束并不仅仅可以与另一表的 PRIMARY KEY 约束相链接,它还可以定义为引用另一表的 UNIQUE 约束。FOREIGN KEY 约束可以包含空值,但是,如果任何组合 FOREIGN KEY 约束的列包含空值,则将跳过组成 FOREIGN KEY 约束的所有值的验证。若要确保验证了组合 FOREIGN KEY 约束的所有值,请将所有参与列指定为 NOT NULL。

    注意 注意

    FOREIGN KEY 约束可以引用同一数据库的表中的列或同一表中的列。这些称为“自引用”表。例如,请考虑包含三列的一个雇员表:employee_numberemployee_name 和 manager_employee_number。由于经理本身也是雇员,所以从manager_employee_number 列到 employee_number 列存在外键关系。

     

    引用完整性

    尽管 FOREIGN KEY 约束的主要目的是控制可以存储在外键表中的数据,但它还可以控制对主键表中数据的更改。例如,如果在 Sales.SalesPerson表中删除一个销售人员行,而这个销售人员的 ID 由 Sales.SalesOrderHeader 表中的销售订单使用,则这两个表之间关联的完整性将被破坏;SalesOrderHeader 表中删除的销售人员的销售订单因为与 SalesPerson 表中的数据没有链接而变得孤立了。

    FOREIGN KEY 约束防止这种情况的发生。如果主键表中数据的更改使之与外键表中数据的链接失效,则这种更改将无法实现,从而确保了引用完整性。如果试图删除主键表中的行或更改主键值,而该主键值与另一个表的 FOREIGN KEY 约束中的值相对应,则该操作将失败。若要成功更改或删除 FOREIGN KEY 约束的行,必须先在外键表中删除或更改外键数据,这将把外键链接到不同的主键数据上去。

     

    对 FOREIGN KEY 约束建立索引

    由于以下原因,对外键创建索引通常是有用的:

    • 对 PRIMARY KEY 约束的更改可由相关表中的 FOREIGN KEY 约束检查。

    • 当在查询中组合相关表中的数据时,经常在联接条件中使用外键列,方法是将一个表的 FOREIGN KEY 约束中的列与另一个表中的主键列或唯一键列匹配。索引使 数据库引擎可以在外键表中快速查找相关数据。但是,创建此索引并不是必需的。即使没有对两个相关表定义 PRIMARY KEY 或 FOREIGN KEY 约束,也可以对来自这两个表中的数据进行组合,但两个表间的外键关系说明已用其键作为条件对其进行了优化,以便组合到查询中。有关在联接中使用 FOREIGN KEY 约束的详细信息,请参阅联接基础知识查询类型和索引

     

    表中的 FOREIGN KEY 约束数

    SQL Server 对一个表可以包含的 FOREIGN KEY 约束(引用其他表)数没有预定义限制,对引用特定表的其他表所拥有的 FOREIGN KEY 约束数也没有预定义的限制。但是,实际的 FOREIGN KEY 约束数会受到硬件配置以及数据库和应用程序的设计的限制。建议表中包含的 FOREIGN KEY 约束不要超过 253 个,并且引用该表的 FOREIGN KEY 约束也不要超过 253 个。在设计数据库和应用程序时应考虑强制 FOREIGN KEY 约束的开销。

     

    请参阅

    参考

    CREATE TABLE (Transact-SQL)

    ALTER TABLE (Transact-SQL)

    DROP TABLE (Transact-SQL)

    概念

    创建和修改 FOREIGN KEY 约束

    索引

    展开全文
  • ****************创建主键(三种方法)****************创建学生:第种:create table student(sno char(5) primary key,/*学号*/ /*可以直接指定主键*/sname char(20) not null,/*姓名*/ssex char(3) not null,/*...

    ****************

    创建主键(三种方法)

    ****************

    创建学生表:

    第一种:

    create table student

    (sno char(5) primary key,/*学号*/ /*可以直接指定主键*/

    sname char(20) not null,/*姓名*/

    ssex char(3) not null,/*性别*/

    sage integer not null,/*年龄*/

    sdept char(15);/*系别*/

    第二种:

    create table student

    (sno char(5) not null,

    constraint pk_student   /*可以指定主键名称*/

    primary key (sno),

    sname char(20) not null ,/*非空,不可重复*/

    ssex char(3) not null,

    sage integer ,

    sdept char(15));

    第三种:

    创建课程表:

    create table course

    (cno char(5),/*课程号*/

    cname char(20) not null unique,/*课程名,非空,不可重复*/

    cpno char(5),/*前置课程号(学此课之前必修课)*/

    ccredit number);/*学分*/

    通过修改表,设置主键.

    alter table course

    add constraint pk_course

    primary key (cno);

    *************

    创建外键(3种方法)

    *************

    创建"学生-课程-成绩"表

    create table sc

    (sno char(5) constraint fk_student   /*第一种,写在属性定义里面的*/  /*可以指定外键名称,*/

    references student(sno),

    cno char(5),

    foreign key(cno) /*可省略外键名称*/

    references course(cno),

    grade number);

    **********

    第二种

    **********

    create table sc

    (sno char(5),

    constraint fk_student   /*第二种,写在属性定义外面的*/

    foreign key (sno)

    references student(sno),

    cno char(5),

    foreign key(cno)

    references course(cno),

    grade number);

    ***********

    第三种

    ***********

    alter table sc

    add constraint fk_student

    foreign key(sno)

    references student(sno);

    ****************************

    建好表之后,新增或修改,删除约束

    ****************************

    先用此语句查看某个表的所有约束:

    select TABLE_NAME,CONSTRAINT_NAME,SEARCH_CONDITION,STATUS from user_constraints WHERE TABLE_name=upper(‘&TABLE_Name‘);

    0.增加not null约束

    alter table student modify sname not null;

    1.修改null约束

    alter table student modify sname null;/*姓名可以为空*/

    2.增加主键约束

    alter table student

    add constraint pk_student

    primary key(id);

    3.删除主键约束

    先用此语句查看某个表的所有约束:

    select TABLE_NAME,CONSTRAINT_NAME,SEARCH_CONDITION,STATUS from user_constraints WHERE TABLE_name=upper(‘&TABLE_Name‘);

    这里要删除的是约束"fk_student"

    alter table drop constraint  fk_student;

    4.增加外键约束

    alter table sc

    add constraint fk_student

    foreign key(sno)

    references student(sno);

    5.删除外键约束

    需要知道要删除的外键名称,

    先用此语句查看某个表的所有约束:

    select TABLE_NAME,CONSTRAINT_NAME,SEARCH_CONDITION,STATUS from user_constraints WHERE TABLE_name=upper(‘&TABLE_Name‘);

    alter table drop constraint fk_student;

    6.添加unique约束

    alter table course modify cname unique;

    添加unique的同时,会自动创建一个相同名称的索引.

    7.取消unique

    alter table course

    drop constraint sys_c005472;

    8.删除索引

    查找要删除的索引名称

    运行此语句:

    select index_name,table_owner,table_name,tablespace_name,status from user_indexes order by table_name;

    然后运行

    drop index sys_coo5472;

    今天在对一个表,对其中一个属性,新建unique约束,

    但是提示:ora-02261:such unique or primary key already exists in the table

    原因是该属性已经是primary key了.

    如果该属性已经有unique约束,则不能赋予该属性primary key约束.

    1.一个表只能有一个primary key,可以有多个unique约束

    2.当创建primary key的时候,会同时建立一个索引,名字和primary key的名称相同.

    3.当某属性为primary key,会默认新增not null约束,当删除primary key后,not null属性取消.

    4.表的一个属性可以同时设定not null和primary key约束.

    这里先新建一个表,其中ID就是要设为主键的column。

    创建table的代码如下:

    CREATE TABLE test_tab

    (

    id NUMBER,

    name VARCHAR2(30)

    )

    dfe3697cd43d4c5b8fbb0c40af058ad9.png

    要设置主键的话这里需要用到alter table这个语法。

    设置主键的代码如下:

    ALTER TABLE test_tab ADD CONSTRAINT pk_test_tab PRIMARY key(id);

    c17ec2ef64e5cdb5e8bd9b6dca695071.png

    这里解释下:

    alter table table_name-----------------------意思就是要改动某个表

    add constraint constraint_name-------------意思就是给某个表加约束/限制

    primary key(column_name)------------------说明是主键的约束,而且是某个column的。

    19306a6c821538e1a3ba8da6350cade2.png

    执行之后就设置成功了,若不放心可以亲自测试下。

    执行如下代码一次:

    INSERT INTO test_tab(id,name) VALUES (1,‘test‘);

    看到已经insert成功!

    33da3b23ae595d2cf6340b60403f737b.png

    在重复的执行一次:

    INSERT INTO test_tab(id,name) VALUES (1,‘test‘);

    这个时候就有error了:

    ORA-00001: unique constraint (SCOTT.PK_TEST_TAB) violated

    1aca0471198eff1d15f6a70f23557370.png

    好了表的主键就这样设置成功了!

    展开全文
  • 本文的目标就是要确认那些使用了主键,却混淆了主键的本质而造成的一种反模式。一、确立主键规范每了解数据库设计的人都知道,主键对于一张来说是一很重要...难点是选择那一列作为主键。大多数中的每属性...

    本文的目标就是要确认那些使用了主键,却混淆了主键的本质而造成的一种反模式。

    一、确立主键规范

    每个了解数据库设计的人都知道,主键对于一张表来说是一个很重要,甚至必需的部分。这确实是事实,主键是好的数据库设计的一部分。主键是数据库确保数据行在整张表唯一性的保障。它是定位到一条记录并且确保不会重复存储的逻辑机制。主键也同时可以被外键引用来建立表与表之间的关系。

    难点是选择那一列作为主键。大多数表中的每个属性值都有可能被很多行使用。例如姓名,电子邮件地址等等都不能保证不会重复。

    在这样的表中,需要引入一个对于表的域模型无意义的新列来存储一个伪值。这一列被用作这张表的主键,从而通过它来确定表中的一条记录,即便其他的列允许出现适当的重复项。这种类型的主键列我们通常称其为伪主键或者代理键。

    大多数数据库提供一种和当前处理事务无关的底层方案,来确保每次都能生成全局唯一的一个整数作为伪主键,即使客户端此时正发起并发操作。

    主键存在的作用:

    1、确保一张表中的数据不会出现重复行。

    2、在查询中引用单独的一行记录。

    3、支持外键。

    二、反模式:以不变应万变

    很多的书、文章以及程序框架都会告诉你,每个数据库的表都需要一个主键,且具有如下三个特性:

    (1)、主键的列名都叫做Id;

    (2)、数据类型是32位或者64位的整数

    (3)、主键的值是自动生成来确保唯一的。

    在每张表中都存在一个叫做Id的列是如此地平常,甚至Id已经成为了主键的同义词。很多程序员在一开始学习SQL时就被灌输了错误的概念。认为每张表都要增加一列Id,这显然太过于随意。

    1、冗余键值

    2、允许重复项

    一个组合键包含了多个不同的列,组合键的典型场景就是想上节中乱穿马路中的Contact表。主键需要确保一个给定的Product_Id和Account_Id的组合在整张表中只能出现一次,虽然同一个值可能在很多不同的配对出现。

    然而,当你使用了Id这一列作为主键,约束就不是Account_Id和Product_Id的组合必须唯一了。当你用这张交叉表去查询Account_Id和Product_Id的关系时,重复项会意料之外的结果。要确保没有重复项,你可以在Id之外,额外声明另外两列需要一个UNIQUE约束。但是当你在Account_Id和Product_Id这两列上应用了唯一性约束,Id这一列就会变成了多余的列。它已经背离了主键的初衷了。

    0f57c2eeb9865f4ffabb969af0e44528.png

    3、关键字意义不明确

    Id这个词是如此地普通,完全无法表达更深沉的意思,特别是在你做两张表连接查询,而他们都有一个叫做Id的主键时。

    select *

    from Accout as a

    join Bug b on (b.toId = a.Id)

    这种查询必须在查询时指定列别名,否则其中的一个Id列会覆盖掉另一列的Id的值。

    同时有两张表有相同的Id列的情况下也不能够使用using关键字。

    比如:SQL支持一种简洁的表达式来表示两张表联结(using)。如果两张表有同样的列名,就可以用如下的表达式来重写上面的需求。

    select * from Account join Bug using(Bug_id);  --一个主键,一个外键。

    然而,如果所有的表都要求定义一个叫做id的伪主键,那么将不能使用这种简写方式。

    4、使用组合键

    一些开发人员觉得组合键太难使用,如果要比较两个键值,必须比较其包含的所有列的值;一个引用组合键的外键,其本身也必须是一个组合外键。此外,使用组合键需要打更多的字。其实这是不对的。组合键的适当的时候是应该被使用的。

    三、识别反模式

    1、我觉得这张表不需要主键。

    这么说的人一定是误解了“主键”和“伪主键”的含义,每张表都必须要有一个主键,这个是毫无疑问的。实际上可能这个人需要的是一个组合键,或者一个更自然的列名来做主键。

    2、我怎么能在多对多的表中存储重复的项?

    在一个对多对关系的交叉表中需要声明一个主键约束。或者至少需要有一个针对那些被引用作为外键的唯一约束。

    四、合理使用发模式

    使用伪主键,或者通过自动增长的整型的机制本身没有什么错误,但不是每张表都需要一个伪主键,更没有必要将每个伪主键都定义成Id。

    对于太长而不方便实现的自然键来说,伪主键是一个很好的代替品。比如在一个记录文件系统的所有文件属性的表中,文件路径是一个很好的自然键,但对一个字符串列做索引的开销会很大。

    五、解决方案:裁剪设计

    主键是约束而非数据类型。你可以定义任意列或任意多个的列作为主键。只要其数据类型支持索引。另外在此必须要补充的是,在SqlServer中,主键和聚集索引并没必然的关系。SqlServer只是默认将聚集索引建在主键上,实际上你完全可以将聚集索引手动定义到非主键列。

    1、为主键选择更有意义的名称

    比如为Product这张表的主键应该叫做Product_Id。

    2、外键应该尽可能地和所引用的列使用相同的名称,这通常意味着:一个主键的名称应该在整个数据库的设计中唯一;任意两张表都不应该使用相同的名称来定义主键,除非其中之一引用了另外一个作为外键。然而凡是都有例外,又是外键的名称需要和其所引用的主键区分开,从而使的它们之间的引用关系表现得更加清晰。

    比如在一张外键表中将外键声明为create_by(由谁创建)。

    规则

    自然键

    代理键

    主键必须唯一的识别每一记录

    但与输入和人为错误有关

    系统自生成的数据是唯一的

    一个记录的主键不能为空

    只有数据可知时才能输入记录

    当记录生成时才被系统建立

    当生成记录时,主键的值必须存在

    只有数据可知时才能输入记录

    当记录生成时才被系统建立当记录生成时才被系统建立

    主键必须保持稳定——你不能更改主键的域

    自然键与一些商业规则和其他外部影响有关

    代理键对程序功能和数据保持中立

    主键必须简洁,不要包含过分的属性

    一个自然键可以包含多个域

    代理键只能包含多个域

    主键的值不能改变

    自然键通常改变

    代理键通常不更改

    六、拥抱自然键和组合键

    如果你的表中包含一列能够确保唯一、非空以及能够用来定位一条记录,就别仅仅因为传统而觉得有必要再加上一个伪主键。

    实践证明,一张表中的每一列都在最初的设计之后遭遇改变是很正常的事情。数据库的设计趋向于在整个项目的声明周期中不断地调整和优化,并且决策者也可能一点也不在乎自然键的“神圣不可侵犯”。有时候一个列最开始是像是个很好的自然主键,但随后有允许合法的重复项。此时伪主键便成了唯一的选择。

    在合适的时候也可以使用联合主键,比如一条记录可以通过多个列的组合完全定位。就像上面提到的Contact表,那就通过那些列创建一个联合主键吧。

    总结:我个人的见解就是能用代理键就尽量用代理键。除非代理键真的非常多余,就好似上面的组合键代替复合键的例子一样。

    展开全文
  • 数据库主键、唯一约束和索引

    千次阅读 2021-11-23 17:31:46
    这样的一列或多列称为主键,通过它可以强制的实体完整性。。 (1)一个表可以没有主键,而且最多只能有一个主键。 (2)主键值必须唯一标识中的每一行,且不能为 NULL,即同一个表中不可能存在两行数据有...
  • SQL主键

    千次阅读 2022-03-27 20:22:18
    SQL中主键是唯一标示中每一行的列或一组列。 SQL可以使用PRIMARY KEY约束为创建主键。 如果主键只包含一列,则可以将PRIMARY KEY约束定义为列约束 。... 以下实例创建一包含主键,该主键包含一列
  • 【填空题】Access提供了两种...【单选题】Access中,一个数据最多可以建立()个主键。【单选题】The woman had persuaded him to do ( ) he was hired never to do —— reveal the combination for the lock on t...
  • 一张可以有多少个主键

    万次阅读 多人点赞 2015-10-21 10:20:28
    1、数据库的每张表只能一个主键,不可能有多个主键。 2、所谓的一张个主键,我们称之为联合主键。  注:联合主键:就是用多字段一起作为一张主键。 3、主键主键的作用是保证数据的唯一性和完整性...
  • ****************创建主键(三种方法)****************创建学生:第种:create table student(sno char(5) primary key,/*学号*/ /*可以直接指定主键*/sname char(20) not null,/*姓名*/ssex char(3) not null,/*...
  • 【简答题】1 、零件的成型原理可分为哪三类?各举几例子说明. 2 、机械加工方法有哪些?...【判断题】对从添加数据时,从的外键字段的值必须来自主中相应的字段值。【多选题】下列选项中,包含矛盾双...
  • SQL中的每一张都必须设有主键

    千次阅读 2021-01-28 06:59:10
    如果用户看到了一个表示多对多关系的连接中的数据,并抱怨它没有什么用处,那就证明它的主键设计地很好。2)永远也不要更新主键。实际,因为主键除了唯一地标识行之外,再没有其他的用途了,所以也就没有理由去...
  • mysql如何添加主键

    千次阅读 2021-01-30 07:47:54
    主键(PRIMARY KEY)”的完整称呼是“主键约束”。...主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键主键应该...
  • sqlserver设置两及两以上主键

    万次阅读 多人点赞 2018-10-14 17:34:13
    所谓主键是指能够当唯一标识出某条记录的某一列。 如果你想建立列及以上的列为主键,可能会发生错误。 首先要明确主键只有一,但是我们可以设置主键组来设置主键。这样两列就都是主键了。设置方法: 利用...
  • mysql主键还需要建立索引吗?

    千次阅读 2021-01-18 20:26:26
    mysql主键不需要建立索引,主键具备索引的功能;当创建或设置主键的时候,mysql会自动添加一个主键对应的唯一索引,不需要再做额外的添加。数据库管理系统对于主键会自动...如果你想在主键上设置索引的话,主键就...
  • mysql数据库外键、主键详解

    千次阅读 2021-01-18 18:41:25
    关系型数据库中的条记录中有若干属性,若其中某一个属性组(注意是组)能唯一标识条记录,该属性组就可以成为一个主键比如学生(学号,姓名,性别,班级)其中每学生的学号是唯一的,学号就是一个主键课程...
  • 聚簇索引:MySQLInnoDB一定会建立聚簇索引,把实际数据行和相关的键值保存在一块,这也决定了一个表只能一个聚簇索引,即MySQL不会次把数据行保存地方。1)InnoDB通常根据主键值(primarykey)进行聚簇2)如果...
  • 这是如何使用SQL server来 编写 数据库 的 操作方式 学习要点: SQL之-建库、建表、建约束、关系   —创建库 创建库之前 先进行 查看数据库中是否 已存在 次数据库 有便删除 if exists(select * from sysobjects ...
  • MySQL 中,约束是指对表中数据的种约束,能够帮助数据库管理员更好地管理数据库,并且能够确保数据库中数据的正确性和有效性。
  • 对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧...
  • 分区尽量不要建主键

    千次阅读 2017-03-31 16:27:28
     今天有项目要做升级,此项目用的是公司新产品,处于研发阶段,数据库设计文档不全,因为需要手动对比一下升级前后2版本的ddl,发现新版本的ddl中有些分区建的是主键。如:create table ALARM_RESULT (  ...
  • MySQL中的主键

    千次阅读 2021-10-16 11:42:04
    primary key用来唯一的约束字段里面的数据,不能重复,不能为空,一张中最多只能一个主键,而且主键所在的通常是整数类型。 2 主键创建的方法 2.1 直接创建主键 2.1.1 单键 创建的时候直接字段指定主键...
  • 索引使用简介、 关于索引的知识要写出运行效率高的sql,需要对索引的机制有一定了解,下面对索引的基本知识做介绍。1、 索引的优点和局限索引可以提高查询的效率,但会降低dml操作的效率。所以建立索引时需要...
  • 数据库(三) 表建立联系-外键

    千次阅读 2021-02-06 11:48:42
    1.理解之间建立关系的必要性比如我们建立了一张个人信息,把所有人的信息都存在这张表中这张表中有老师和他们所属的部门,并且不同的部门工作也是...站个人信息的角度:一个老师能否属于多部门,不能!!...
  • 之前松哥前面的文章中介绍 MySQL 的索引时,有小伙伴表示被概念搞晕了,主键索引、非主键索引、聚簇索引、非聚簇索引、二级索引、辅助索引等等,今天咱们就来捋捋这些概念。 1. 按照功能划分 按照功能来划分,...
  • 表在设计的时候加入约束的目的就是为了保证中的记录完整性和有效性,比如用户有些的值(手机号)不能为空,有些的值(身份证号)不能重复。 主键约束(primary key) PK 自增长约束(auto_increment) 非空...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 93,252
精华内容 37,300
关键字:

一个表的主键只能建立在一列上