精华内容
下载资源
问答
  • 主键(PRIMARY KEY)”的完整称呼是“主键约束”。...主键约束即在中定义一个主键来唯一确定中每一行数据的标识符。主键可以是中的某一列或者多列的组合,其中由多列组合的主键称为复合主键主键应该...

    “主键(PRIMARY KEY)”的完整称呼是“主键约束”。MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。那么在MySQL中如何添加主键约束?下面本篇文章就给大家介绍一下。

    479033c43277c1e719aabfe7a595166f.png

    主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键应该遵守下面的规则:

    ● 每个表只能定义一个主键。

    ● 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是唯一性原则。

    ● 一个列名只能在复合主键列表中出现一次。

    ● 复合主键不能包含不必要的多余列。当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,那么这个复合主键是不正确的。这是最小化原则。

    1、在创建表时添加主键约束

    在 CREATE TABLE 语句中,主键是通过 PRIMARY KEY 关键字来指定的。

    在定义列的同时指定主键,语法规则如下: PRIMARY KEY [默认值]

    例:在 test_db 数据库中创建 tb_emp 1 数据表,其主键为 idmysql> CREATE TABLE tb_emp1

    -> (

    -> id INT(11) PRIMARY KEY,

    -> name VARCHAR(25),

    -> deptId INT(11),

    -> salary FLOAT

    -> );

    Query OK, 0 rows affected (0.37 sec)

    mysql> DESC tb_emp1;

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

    | Field | Type | Null | Key | Default | Extra |

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

    | id | int(11) | NO | PRI | NULL | |

    | name | varchar(25) | YES | | NULL | |

    | deptId | int(11) | YES | | NULL | |

    | salary | float | YES | | NULL | |

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

    4 rows in set (0.14 sec)

    在定义完所有列之后,指定主键的语法格式为:[CONSTRAINT ] PRIMARY KEY [字段名]

    示例:在 test_db 数据库中创建 tb_emp 2 数据表,其主键为 idmysql> CREATE TABLE tb_emp2

    -> (

    -> id INT(11),

    -> name VARCHAR(25),

    -> deptId INT(11),

    -> salary FLOAT,

    -> PRIMARY KEY(id)

    -> );

    Query OK, 0 rows affected (0.37 sec)

    mysql> DESC tb_emp2;

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

    | Field | Type | Null | Key | Default | Extra |

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

    | id | int(11) | NO | PRI | NULL | |

    | name | varchar(25) | YES | | NULL | |

    | deptId | int(11) | YES | | NULL | |

    | salary | float | YES | | NULL | |

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

    4 rows in set (0.14 sec)

    2、在创建表后添加主键约束

    创建表后,可以在修改数据表时添加主键约束,语法规则为:ALTER TABLE ADD PRIMARY KEY();

    示例:修改数据表 tb_emp3,将字段 id 设置为主键mysql> ALTER TABLE tb_emp3

    -> ADD PRIMARY KEY(id);

    Query OK, 0 rows affected (0.94 sec)

    Records: 0 Duplicates: 0 Warnings: 0

    mysql> DESC tb_emp3;

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

    | Field | Type | Null | Key | Default | Extra |

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

    | id | int(11) | NO | PRI | NULL | |

    | name | varchar(30) | YES | | NULL | |

    | deptId | int(11) | YES | | NULL | |

    | salary | float | YES | | NULL | |

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

    4 rows in set (0.12 sec)

    3、设置复合主键

    也可以在创建表时添加复合主键,此时主键由多个字段联合组成,语法规则如下:PRIMARY KEY [字段1,字段2,…,字段n]

    示例:创建数据表 tb_emp4,假设表中没有主键 id,为了唯一确定一个员工,可以把 name、deptId 联合起来作为主键mysql> CREATE TABLE tb_emp4

    -> (

    -> name VARCHAR(25),

    -> deptId INT(11),

    -> salary FLOAT,

    -> PRIMARY KEY(id,deptId)

    -> );

    Query OK, 0 rows affected (0.37 sec)

    mysql> DESC tb_emp4;

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

    | Field | Type | Null | Key | Default | Extra |

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

    | name | varchar(25) | NO | PRI | NULL | |

    | deptId | int(11) | NO | PRI | NULL | |

    | salary | float | YES | | NULL | |

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

    3 rows in set (0.14 sec)

    展开全文
  • 设置MySQL数据表主键:使用“primary key”关键字创建主键数据列。被设置主键列不允许出现重复的值,很多情况下与“auto_increment”递增数字相结合。如下SQL语句所示:Mysql>createtablebooks(bookidint(11)...

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

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

    展开全文
  •  转:... 1.建立测试数据表CREATE TABLE TEST(ID NUMBER,NAME VARCHAR2(20),PRIMARY KEY(ID));2.创建序列CREATE SEQUENCE SEQ_TEST minvalue 1 maxvalue 99999999 start ...

     转:http://blog.sina.com.cn/s/blog_6754464e0100wgvs.html

    1.建立测试数据表
    CREATE TABLE TEST
    (
    ID NUMBER,
    NAME VARCHAR2(20),
    PRIMARY KEY(ID)
    );
    2.创建序列
    CREATE SEQUENCE SEQ_TEST

    minvalue 1

    maxvalue 99999999

    start with 1

    increment by 1

    nocache order;

    3.创建触发器
    CREATE OR REPLACE TRIGGER AUTOINCREMENT
    BEFORE INSERT ON TEST
    FOR EACH ROW
    WHEN (NEW.ID IS NULL)
    BEGIN
    SELECT SEQ_TEST.NEXTVAL INTO :NEW.ID FROM DUAL;
    END;
    4.插入数据
    INSERT INTO TEST(NAME) VALUES('NAME1');
    5.查看插入结果
    SELECT * FROM TEST;

    展开全文
  • 1.创建表在操作数据表之前,应该使用"USE 数据库名"指定操作是在哪个数据库中进行主键约束(唯一标识)****非空*******唯一*******被引用****(学习外键时)约束是添加在列上的,用来约束列的!主键约束,用于唯一标识...

    1.创建表

    在操作数据表之前,应该使用"USE 数据库名"指定操作是在哪个数据库中进行

    ccf0e53cfd471caea7d477415109f6ae.png

    主键约束(唯一标识)

    ****非空***

    ****唯一***

    ****被引用****(学习外键时)

    约束是添加在列上的,用来约束列的!

    主键约束,用于唯一标识对应的记录。在MySQL中,为了快速查找表中的某条信息,可以通过设置主键来实现,就好比身份证可以用来标识人的身份一样。

    每个数据表中最多只能有一个主键约束。

    在Navicat中按键F6也可以进入命令行

    2. 主键自增长

    * 因为主键列的特性是:必须唯一、不能为空,所以我们通常会指定主键类为整型,然后设置其自动增长,这样可以保证在插入数据时主键列的唯一和非空特性。

    * 创建表时指定主键自增长

    CREATE TABLE stu(

    sid INT PRIMARY KEY AUTO_INCREMENT,

    snameVARCHAR(20),

    ageINT,

    genderVARCHAR(10)

    );

    * 修改表时设置主键自增长:ALTER TABLE stu CHANGE sid  INT AUTO_INCREMENT;

    * 修改表时删除主键自增长:ALTER TABLE stu CHANGE sid INT;

    * 测试主键自增长:

    > INSERT INTO stu VALUES(NULL, 'zhangSan',23,'male');

    > INSERT INTO stu(sname,age,gender) VALUES('zhangSan',23,'male');

    CREATE TABLE stu (

    id int primary key ,

    name varchar(20)

    );

    -- 添加自动增长

    ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

    SELECT * FROM stu;

    INSERT INTO stu VALUES(1, 'AAA');

    INSERT INTO stu VALUES(2, 'BBB');

    INSERT INTO stu VALUES(NULL, 'CCC');

    INSERT INTO stu VALUES(10, 'CCC');

    INSERT INTO stu VALUES(NULL, 'CCC');

    注意:自动增长的时候,只跟上一条记录有关系,会读取上一条记录的id,再在下一条记录加1。可以手动设置自增长的那个列的值

    6c6bf29d5773b6ae281ab818a7ef1be7.png

    删除自动增长:ALTER TABLE stu MODIFY id INT;

    3.用Navicat建表

    19493f5cc80c13abac15c49a0deb5138.png

    c26929778cfc310ad2f37d8795a795b5.png

    ca247b34ed3ba2319034a4180765a91f.png

    87ee29cf9d72ca71331baa67dff518bb.png

    11acaf7358237d770ad7d61a6e3470b2.png

    e6e9eab3f101954b3ef4c51edd6e5a64.png

    9714ad16398012d55e7ea97065b23a56.png

    48ee7f6915f7deb150145e54f2237923.png

    295ed05aff679f50df761acc7f53bbc1.png

    展开全文
  • 设置MySQL数据表主键

    2015-04-15 13:42:00
    设置MySQL数据表主键: 使用“primary key”关键字创建主键数据列。被设置主键列不允许出现重复的值,很多情况下与“auto_increment”递增数字相结合。如下SQL语句所示: Mysql>create table books(bookid int...
  • 表达了离情、思念等凄楚之情 Excel图表中的( )用来显示随时间而变化的连续数据,适用于显示在相等时间间隔下数据的趋势。 “三农问题”依然成为2016年两会聚焦的热点问题。材料一:十二届全国人大四次会议指出,2016...
  •  //设置主键  DataSet ds = new DataSet();  ds = (DataSet)Session["ds"];  UniqueConstraint uc = new UniqueConstraint("userpk", ds.Tables["user"].Columns["uid"],true);  ds.Tables["user"].Constraints...
  • 创建表设置主键为自增长,在插入数据是由于mybatis-plus会自动插入一个id到实体对象,报类型不匹配的错误,错误如下 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis....
  • SQL-已存在数据表主键设置递增

    千次阅读 2017-11-30 15:02:58
    但是MySQL和SQL server的语句有区别,所以打开时会有很多错误,这些错误只是和MySQL有关,核心的创建表之类的是没问题的,所以可以删除没用的只剩创建插入的语句,然后执行。 刚发现一个问题,M
  • mysql 中有时候会遇到多个字段来表示数据的唯一性,那么这里就会用到组合主键了。相关mysql视频教程推荐:《mysql教程》1.编写创建表sql代码;2.设置联合主键;3.执行代码,发现出现错误;4.解决方案:给id自增列加...
  • 1.创建表 在操作数据表之前,应该使用"USE 数据库名"指定操作是在哪个数据库中进行 ...在MySQL中,为了快速查找表中的某条信息,可以通过设置主键来实现,就好比身份证可以用来标识人的身份一样。 每个数据表中最...
  • 设置主键: create table xxx( uuid int(10) primary key not null, name varchar(100), addr varchar(100), type varchar(100), phone varchar(100), dateTime varchar(100) ); 另一种方式 create ...
  • ### Oracle插入数据设置主键自动增长,并且使用Mybatis获取自增的值。 所使用的表格:SCOTT用户中EMP 步骤: #### 1. 创建序列 > 序列(SEQUENCE)是序列号生成器,可以为中的行自动生成序列号,产生一组...
  • 创建主键和约束的 创建带组合主键和外键的 1. 创建主键和约束的 Student (学生) CREATE TABLE Student ( sclass varchar(10) NOT NULL, --- 限制非空 snumb varchar(10) PRIMARY KEY...
  • 思路为:创建一个自增序列,创建一个触发器根据每次插入数据,获取序列值插入主键。 1.1--创建序列 create sequence emp increment by 1 start with 1 nomaxvalue nocycle nocache 1.2 create or replace ...
  • 一般要经过一下几步: 1建立数据表 create table Test_Increase(  userid number(10) primary key, /*主键,自动增加*/  username varchar2(20)  ); 2创建自动增长序列 ...
  • 向表中插入数据的时候每次自增数据的ID...的方式使数据表的一列或多列实现自增) 1、为表创建序列: create sequence ACCOUNT_SEQUENCE minvalue 1 maxvalue 9999 --最大值 start with 1 --从1开始计数 increm...
  • 1.primary key 约束:设置主键约束 2.foreign key 约束:设置外键约束 3.unique 约束:设置唯一约束 4.default 约束:设置默认值约束 5.check 约束:通过逻辑表达式来判断数据的有效性,用来限制输入一系列或多列的值...
  • MySQL数据表主键,外键

    2012-06-23 12:48:00
    设置MySQL数据表主键: 使用“primary key”关键字创建主键数据列。被设置主键列不允许出现重复的值,很多情况下与“auto_increment”递增数字相结合。如下SQL语句所示: Mysql>create table books(bookid ...
  • 1 背景 当我使用Mybatis Plus插入数据时,发现一直报...经排查,发现是pg数据表未给主键设置自增序列. 2 步骤 创建序列:CREATE SEQUENCE xx_id_seq START 1; 给主键设置默认值:nextval(' upms_log_id_seq'); ...
  • mysql 中有时候会遇到多个字段来表示数据的唯一性,那么这里就会用到组合主键了。相关mysql视频教程推荐:《mysql教程》1.编写创建表sql代码;2.设置联合主键;3.执行代码,发现出现错误;4.解决方案:给id自增列加...
  • 设置id为varchar类型,长度可大于等于32; 插入数据时采用一下方法: INSERT INTO blog_user (`id`,`role`,`name`,user_password,head_address) VALUES (REPLACE(UUID(),"-",""),'系统管理员','zhangsan','123','...
  • 需要对这个中的一个字段设置主键: alter table table_name add primary key(id); alter table表名add primary key(字段名); 2.一个表创建之后, 需要对这个中的一个字段设置为唯一约束: alter table ...
  • 一、创建序列其他-序列填写相应的信息,特别注意:表数据为空的话,开始值从1开始。看清数据库中的数目,只填写前三个保存自动填充后面的。 二、设置触发器设计-触发器1、BEFORE2、更新的字段3、触发...
  • mySQL创建数据表

    2020-01-14 17:40:31
    目录 创建数据库 1.创建表的基本形式 2.使用主键约束 3.使用外键约束 4.使用非空约束 ...7.设置表的属性值自动增加 创建数据库 1.创建表的基本形式 create table 库名.表名( 字段名1 类型(宽...
  • 今天在测试程序的时候,在保存数据时报了一个主键不能为空错误。我用的数据库是Sql2008 1.我测试跟踪后觉得这个应该是自动增长主键呀。但数据库未进行设置。 2.那我就改吧,改完报如下错误: 3.后来得人指点...
  • 今天在写一个维护页面时,表里已设置sequence 但是保存时仍报违反主键唯一约束的错误,经过排查,原来在表创建好的时候,由数据库直接导入了部分数据,导致了sequence的开始自增序列不为当前ID最大值,故要从新...
  • MySQL记录001:在有自增长主键数据表中插入数据● 自增长主键ID● SQL语句的编写1.创建表格2. 插入数据 ● 自增长主键ID MySQL提供了主键自动增长的功能!这样用户就不用再为是否有主键是否重复而烦恼了。当主键...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,009
精华内容 403
关键字:

创建数据表设置主键