精华内容
下载资源
问答
  • mysql 取消主键

    千次阅读 2019-11-24 14:06:46
    alter table 表名 drop primary key; 或者 alter table 表名 modify 字段 int(11),drop primary key; 补充: modify: 只能修改字段类型或者约束,不能修改字段名

    alter table 表名 drop primary key;

    或者

    alter table 表名 modify 字段 int(11),drop primary key;

    补充:
    modify: 只能修改字段类型或者约束,不能修改字段名

    展开全文
  • MySQL删除主键、添加主键约束

    万次阅读 2018-09-21 11:43:28
    将原自增长主键值整体+1000 、 起始值1000 、 最大ID5000 执行更新语句报错、主键重复 UPDATE table_name SET id= id+1000; 解决方法 设置为不自动增长:alter table table_name modify id int(11); 或者alter ...

    需求:
    将原自增长主键值整体+1000 、 起始值1000 、 最大ID5000
    执行更新语句报错、主键重复

        UPDATE table_name SET id= id+1000;
    

    解决方法
    设置为不自动增长:alter table table_name modify id int(11);
    或者alter table table_name change id id int;具有更改字段名功能
    删除主键:alter table table_name drop primary key;
    执行语句:UPDATE table_name SET id= id+1000;
    成功之后设回主键

    alter table table_name add primary key(id);	添加主键唯一性约束
    

    当然如果是执行
    UPDATE table_name SET id= id+4001;
    也是不会报错的。

    展开全文
  • 无法撤销主键约束![图片说明](https://img-ask.csdn.net/upload/201603/20/1458488752_480144.png) ![图片说明](https://img-ask.csdn.net/upload/201603/20/1458488765_5998.png)
  • 先加个主键约束 ![主键约束](https://img-ask.csdn.net/upload/201503/03/1425352248_712560.png) 然后用约束名再删除主键约束 ![删除主键](https://img-ask.csdn.net/upload/201503/03/1425352329_230160.png) ...
  • 本文主要介绍了关于MySQL主键为0与主键自排约束的关系,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 开始不设置主键表的设计如下: 如果id的位置有好几个0的话:设置主键并且自动排序时,0...
  • 约束——主键约束&外键约束&级联更新/删除此系列记录PN视频学习笔记* 本博客涉及到的数据为bjpowernode.sql,数据见文末,SQL文见MySQL入门(9)文末。* 该数据有三张表,分别是部门表dept(deptno...

    约束——主键约束&外键约束&级联更新/删除

    此系列记录PN视频学习笔记


    * 本博客涉及到的数据为bjpowernode.sql,数据见文末,SQL文见MySQL入门(9)文末。

    * 该数据有三张表,分别是部门表dept(deptno部门编号、dname部门名称、loc位置)、

                                           员工表emp(empno工号、ename员工姓名、job职位、mgr直属领导工号、

                                                                hiredate入职日期、sal月薪、comm补贴、deptno部门编号)、

                                            薪水等级表salgrade(grade等级、losal区间下限、hisal区间上限)


    6、主键约束-primary key-PK

           6.1  主键涉及到的术语:

                  -主键约束

                  -主键字段

                  -主键值

     

           6.2主键约束、主键字段、主键值的关系?

               表中的某个字段添加主键约束之后,该字段被称为主键字段,主键字段中出现的每一个数据被称为主键值。

     

           6.3主键的作用:作为某行纪录的唯一标识

               给某个字段添加主键约束(primary key)之后,该字段不能重复,且不能为空。

               效果和not null unique相同,但是本质不同。

               主键约束除了可以做到not null unique之外,主键字段还会默认添加‘索引-index’。

     

           6.4一张表应该有主键字段,若没有,表示这张表是无效的。

               主键值是当前行数据的唯一标识,是当前行数据的身份证号。

               即使表中的两行记录相关的数据是相同的,但是只要主键值不同,便认为这两行是完全不同的数据。

     

    6.5 【单一主键】:给一个字段添加主键约束。

        //单一主键

        //列级定义方式/列级约束

        drop table if exists t_user;

        create table t_user(

                    id int(10) primary key,

                    name varchar(32)

        );

     

        //单一主键

        //表级定义方式/表级约束

        drop table if exists t_user;

        create table t_user(

                    id int(10),

                    name varchar(32),

                    primary(key)

        );

     

        //单一主键

        //表级定义方式/表级约束

        //起名

        drop table if exists t_user;

        create table t_user(

                    id int(10),

                    name varchar(32),

                    constraint t_user_id_pk primary key(id)

         );

        mysql> desc t_user;

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

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

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

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

        | name  | varchar(32) |YES  |    | NULL    |       |

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

     

    6.6 【复合主键】:给多个字段联合添加一个联合主键。

        //单一主键

        //表级定义方式/表级约束

        //起名

        drop table if exists t_user;

        create table t_user(

                    id int(10),

                    name varchar(32),

                    email varchar(128),

                    constraint t_user_ib_name_pk primary key(id,name)

        );

           mysql>desc t_user;

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

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

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

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

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

            | email | varchar(128) | YES |     | NULL    |      |

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

     

            mysql> insert into t_user(id,name,email)values(1,'jack','jack@bjpowernode.com');

            Query OK, 1 row affected (0.01 sec)

            mysql> insert into t_user(id,name,email)values(1,'jack','jack@bjpowernode.com');

            ERROR 1062 (23000): Duplicate entry '1-jack' for key 'PRIMARY'

            mysql> insert into t_user(id,name,email)values(2,'jack','jack@bjpowernode.com');

            Query OK, 1 row affected (0.01 sec)

            mysql> insert into t_user(id,name,email)values(2,'abc','jack@bjpowernode.com');

            Query OK, 1 row affected (0.01 sec)

            mysql> select * from t_user;

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

            | id | name | email                |

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

            |  1 | jack |jack@bjpowernode.com |

            |  2 | abc  | jack@bjpowernode.com |

            |  2 | jack | jack@bjpowernode.com|

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

     

    6.7 无论是单一主键还是复合主键,一张表的主键约束只能有一个。

    6.8 主键根据性质分类:

               - 自然主键

                       * 主键值是一个自然数,且该自然数和当前表的业务没有任何关系

               - 业务主键

                       * 主键值和当前表中业务紧密相关,当业务数据发生改变的时候,主键值通常会受到影响,所以业务主键使用较少,

    大部分都是使用自然主键。

    6.9 主键在MYSQL数据管理系统中提供了一个自增的数字,专门用来自动生成主键值。

           主键值不需要用户维护,也不需要用户提供,自动生成,这个自增的数字默认以1递增:1,2,3,4,……

                drop table if exists t_user;

                create table t_user(

                            id int(10) primary key auto_increment,

                            name varchar(32)

                 );

               insertinto t_user(name) values('jack');

               insertinto t_user(name) values('jack');

               insertinto t_user(name) values('jack');

               insertinto t_user(name) values('jack');

               insertinto t_user(name) values('jack');

               insertinto t_user(name) values('jack');

               select* from t_user;

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

                | id | name |

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

                |  1 | jack |

                |  2 | jack |

                |  3 | jack |

                |  4 | jack |

                |  5 | jack |

                |  6 | jack |

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

                delete from t_user where id=4;

                insert into t_user(name) values('jack');

                select * from t_user;

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

                | id | name |

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

                |  1 | jack |

                |  2 | jack |

                |  3 | jack |

                |  5 | jack |

                |  6 | jack |

                |  7 | jack |

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

     

        7、外键约束-foreign key-简称FK

           7.1外键约束涉及到的术语:

                  -外键约束

                  -外键字段

                  -外键值

           7.2外键约束、外键字段、外键值之间的关系

                  某个字段添加外键约束之后,该字段为外键字段,外键字段中的每一个数据都是外键值。

           7.3外键分为:

                      -单一外键:给一个字段添加外键约束

                      -复合外键:给多个字段添加一个外键约束、

           7.4一张表中可以有多个外键字段。

          7.5 案例:请设计数据库表,引来存储学生和班级信息,给出两种解决方案:

                      学生信息和班级信息之间的关系,一个班级对应多个学生,这是典型的一对多的关系。

               第一种设计方案:将学生信息和班级信息存储到一张表中。

               学生信息表t_student

                Sno(PK)   sname      classno       cname

                --------------------------------------------------------------

                1             jack            100           北京市海淀区………高三1班

                2             lucy            100           北京市海淀区………高三1班

                3             zhangsan    100          北京市海淀区………高三1班

                4             ford            200           北京市海淀区………高三2班

                5             king            200           北京市海淀区………高三2班

                6             allen           300           北京市海淀区………高三3班

                7             lisi              300           北京市海淀区………高三3班

               以上设计的缺点:数据冗余

     

                第二种解决方案:将学生信息和班级信息两张表存储,学生表+ 班级表

                学生表t_student

                sno(PK)   sname      classno(FK)

                ----------------------------------

                1         jack                100 

                2         lucy                100 

                3         zhangsan       100 

                4         ford               200 

                5         king               200 

                6         allen              300 

                7         lisi                 300 

     

                班级表t_class

                classno(PK)     cname

                ---------------------------------------------

                100             北京市海淀区………高三1班

                200             北京市海淀区………高三2班

                300             北京市海淀区………高三3班

     

               结论: 为了保证t_student表中的classno字段中的数据必须来源于t_class表中cno字段中的数据,有必要给t_student表中的classno字段添加外键约束,classno字段被称为外键字段,该字段中100,200,300被称为外键值,且这里的classno是一个单一外键字段。

     

           注:外键值可以为NULL。

               外键字段引用其他表的某个字段时,被引用字段必须具备unique约束。

               有了外键引用之后,表分为父表和子表,以上父表是班级表,子表是学生表;

    创建表先创建父表,在创建子表;删除数据时先删除子表中的数据,再删除父表中的数据;插入数据时先插入父表中的数据,在插入子表中的数据

          

    7.6 SQL语句(SQL文)【外键约束只有表级定义方式】

               drop table if exists t_student;

               drop tableif exists t_class;

               create table t_class(

                             cno int(10) primary key,

                             cname varchar(128) not null unique

                );

                create table t_student(

                            sno int(10) primary key,

                            sname varchar(32) not null,

                            classno int(10),

                            constraint t_student_classno_fk foreign key(classno) referencest_class(cno)

                );

               insertinto t_class(cno,cname) values(100, '高三1班');

               insertinto t_class(cno,cname) values(200, '高三2班');

               insertinto t_class(cno,cname) values(300, '高三3班');

               insertinto t_student(sno,sname,classno) values(1, 'jack',100);

               insertinto t_student(sno,sname,classno) values(2, 'lucy',100);

               insertinto t_student(sno,sname,classno) values(3, 'zhangsan',100);

               insertinto t_student(sno,sname,classno) values(5, 'ford',200);

               insertinto t_student(sno,sname,classno) values(4, 'king',200);

               insertinto t_student(sno,sname,classno) values(6, 'allen',300);

               insertinto t_student(sno,sname,classno) values(7, 'lisi',300);

               select* from t_class;

               select* from t_student;

     

                mysql> insert into t_student(sno,sname,classno) values(8, 'lily',500); //失败

            ERROR 1452 (23000): Cannot add or update a child row: a foreign keyconstraint fails (`mydb`.`t_student`, CONSTRAINT `t_student_classno_fk` FOREIGNKEY (`classno`) REFERENCES `t_class` (`cno`))

                  重点:典型的一对多,在多的一方加外键

     

            案例:找出每个学生的班级名称

            select s.sname,c.cname from t_students,t_class c where s.classno = c.cno;

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

            | sname    | cname      |

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

            | jack     | 高三1班    |

            | lucy     | 高三1班    |

            | zhangsan | 高三1班    |

            | king     | 高三2班    |

            | ford     | 高三2班    |

            | allen    | 高三3班    |

            | lisi     | 高三3班    |

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

     

    8、级联更新和级联删除

        - 添加级联更新和级联删除的时候需要在外键约束后添加

        - 在删除父表中数据的时候,级联删除子表中的数据 on delect cascade

                * 删除外键约束

                    alter table t_student drop foreign keyt_student_classno_fk;

                * 添加外键约束

                    alter table t_student add

                    constraintt_student_classno_fk

                    foreignkey(classno) references t_class(cno) on delete cascade;

                    mysql> delete from t_class where cno = 100;

                    mysql> select * from t_class;

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

                    | cno | cname      |

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

                    | 200 | 高三2班    |

                    | 300 | 高三3班    |

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

                    mysql> select * from t_student;

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

                    | sno | sname | classno |

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

                    |   4 | king  |    200 |

                    |   5 | ford  |    200 |

                    |   6 | allen |     300 |

                    |   7 | lisi  |    300 |

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

           - 在更新父表中数据的时候,级联更新自表中的数据 onupdate cascade

                * 删除外键约束

                     alter table t_student drop foreign keyt_student_classno_fk;

                * 添加外键约束

                     alter table t_student add

                    constraintt_student_classno_fk

                    foreignkey(classno) references t_class(cno) on update cascade;

                    mysql> update t_class set cno = 2000 wherecno = 200;

                    mysql> select * from t_class;

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

                    | cno  |cname      |

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

                    | 2000 | 高三2班    |

                    |  300 |高三3班   |

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

                    mysql> select * from t_student;

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

                    | sno | sname | classno |

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

                    |   4 |king  |   2000 |

                    |   5 |ford  |   2000 |

                    |   6 |allen |     300 |

                    |   7 |lisi  |     300 |

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

           - 以上的级联更新和级联删除谨慎使用,因为级联操作会将数据改变或者删除【数据无价】


    DEPTNODNAMELOC
    10ACCOUNTINGNEW YORK
    20RESEARCHINGDALLAS
    30SALESCHICAGO
    40OPERATIONSBOSTON
    EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
    7369SMITHCLERK79021980/12/17800NULL20
    7499ALLENSALESMAN76981981/2/20160030030
    7521WARDSALESMAN76981981/2/22125050030
    7566JONESMANAGER78391981/4/22975NULL20
    7654MARTINSALESMAN76981981/9/281250140030
    7698BLAKEMANAGER78391981/5/12850NULL30
    7782CLARKMANAGER78391981/6/92450NULL10
    7788SCOTTANALYST75661987/4/193000NULL20
    7839KINGPERSIDENTNULL1981/11/175000NULL10
    7844TURNERSALESMAN76981981/9/81500NULL30
    7876ADAMSCLERK77881987/5/231100NULL20
    7900JAMESCLERK76981981/12/3950NULL30
    7902FORDANALYST75661981/12/33000NULL20
    7934MILLERCLERK77821982/1/231300NULL10
    GRADELOSALHISAL
    17001200
    212011400
    314012000
    420013000
    530019999


    展开全文
  • 删除主键约束 ALTER TABLE tb_name DROP PRIMARY KEY; 因为每个表的主键约束只有一个,所以并不用指定名称。而且,设了自增(AUTO_INCREMENT)的主键是删不了的,原因是因为,《MySQL学习笔记(6)——空值和非空...

    删除主键约束

    ALTER TABLE tb_name DROP PRIMARY KEY;
    因为每个表的主键约束只有一个,所以并不用指定名称。而且,设了自增(AUTO_INCREMENT)的主键是删不了的,原因是因为,《MySQL学习笔记(6)——空值和非空、主键自增 》里,我们讲过,AUTO_INCREMENT是依赖于主键的。


    删除唯一约束

    ALTER TABLE tb_name DROP {INDEX | KEY} index_name;
    因为,表的唯一约束有多个,所以要加索引
    首先,得知道索引的名字,
    SHOW INDEXES FROM user2;
    show indexes

    然后,
    ALTER TABLE user2 DROP INDEX username;


    删除外键约束

    ALTER TABLE tb_name DROP FOREIGN KEY fk_symbol;
    同样的,得知道约束的名字,
    SHOW TABLE user2;
    SHOW TABLE
    然后,
    ALTER TABLE user2 DROP FOREIGN KEY user2_ibfk_1;
    如图:
    DROP FOREIGN KEY

    展开全文
  • 3. 主键约束 自动增长 4. 外键约束 级联操作 首先我们来想象一下,前几篇文章在我们操作数据库的过程中,自由度是很高的,想给哪个赋值就给哪个赋值,但是这样子,就会造成我们所创建的数据库数据不完整,例如我创建...
  • mysql 增加字段脚本,以及删除主键约束的脚本 //增加一个库下面所有表的row_id和其他9个字段的存过 DELIMITER $$ USE `erptest`$$ DROP PROCEDURE IF EXISTS `UPTABLE`$$ CREATE ...
  • 例如给 users2 表中的 id 字段删除主键约束 ALTER TABLE users2 DROP PRIMARY KEY; // 这里删除主键不需要具体指明字段,因为一个表只有一个主键 删除唯一约束时,先要查看索引,找到要删除唯一约束的索引名字...
  • 1.主键约束 (Primary Key) mysql> select * from teacher ; 用来做演示的表格 +-----------+-------------+------------+ | teacherid | teachername | teacherage | +-----------+-------------+------------+ |...
  • SQL Server 添加与删除主键约束

    千次阅读 2020-01-07 23:27:12
    SQL Server 添加与删除主键约束
  • Mysql主键为0与主键自增

    千次阅读 2019-03-17 11:33:16
    本文主要介绍了关于MySQL主键为0与主键自排约束的关系,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 开始不设置主键表的设计如下: 如果id的位置有好几个0的话:设置主键并且自动排序时,0会...
  • 删除主键约束:2. 删除唯一约束:3. 删除外键约束: 删除约束 约束的 index_name 可通过 下面语句进行查询: SHOW INDEX FROM table_name\G; 1. 删除主键约束: ALTER TABLE table_name DROP PRIMARY KEY; 2....
  • mysql删除主键报错ERROR 1833 (HY000)

    千次阅读 2019-05-06 17:16:42
    1.输入修改取消主键自增语句:(表中数据需要删除才能进行操作) alter table sites modify id int; 因为有外键约束,所以此处会报错: ERROR 1833 (HY000): Cannot change column 'id': used in a foreign key ...
  • SQL SERVER添加与删除主键约束

    千次阅读 2017-05-24 12:27:37
    PRIMARY KEY 约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键。...添加主键约束比较 简单,但是删除一个没有约
  • mysql中的约束

    2018-12-20 11:45:00
     主键约束相当于 唯一约束 + 非空约束 的组合,主键约束列不允许重复,也不允许出现空值。  每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。  当创建主键...
  • MySQL主键(PRIMARY KEY)

    2020-04-06 18:42:04
    MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。 选取设置主键约束的字段 主键约束即在表中定义一个主键来唯一确定表中每...
  • 修改数据表之添加主键约束

    千次阅读 2020-11-09 15:21:11
    需要对这个表中的一个字段设置为主键: alter table table_name add primary key(id); alter table表名add primary key(字段名); 2.一个表创建之后, 需要对这个表中的一个字段设置为唯一约束: alter table ...
  • mysql中的一个字段(新增 / 修改 / 取消 / 重置 ) 为主键 自增类型 -- 添加字段为主键自增类型 alter table user_t add column pids int auto_increment not null ...-- 取消主键约束 alter table user_t drop prim
  • 取消外键约束的语句,其中stu_subject是数据表,stuId是该表的外键: ALTER TABLE stu_subject DROP FOREIGN KEY fk_stuId; 注意以下语句会报错: ALTER TABLE stu_subject DROP FOREIGN KEY stuId; ...
  • MySQL——约束类型

    2021-01-24 10:29:30
    MySQL约束类型 约束是一种限制,它通过对表的行或列的...主键约束相当于 唯一约束(主键约束列不允许重复)+非空约束(不允许出现空值) 的组合 每一个表中最多允许一个主键,建立主键约束可以在列级别创建,也可以在表
  • MySql——约束详解

    2020-12-04 15:43:41
    文章目录主键约束(不可以为空)选取设置主键约束的字段设置主键的作用自增约束特点:建表后增加自增如何取消自增唯一约束(可以为空)字段唯一约束的说明:添加约束条件删除唯一约束modife添加非空约束默认约束外键...
  • MySQL数据库的约束

    2015-09-06 20:02:29
    MySQL约束MySQL约束保存在information_schema数据库的table_constraints中,可以通过该表查询约束信息; 约束主要完成对数据的检验,保证数据库数据的完整性;如果有相互依赖数据,保证该数据不被删除。 常用...
  • 主键约束相当于 唯一约束 + 非空约束 的组合,主键约束列不允许重复,也不允许出现空值。 每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。 当创建主键的约束时,系统默认会在所在...
  • MySQL中删除主键

    万次阅读 2018-11-16 14:45:41
    2、删除主键约束 primary key. 例如:  1)假设我们有个表products.里面的pid为主键,并且是自增长,我们需要删除其主键以及自增长。结构如下:  2)我们删除pid的auto_increment约束。  命令为: alter ...
  • 今天,刚看了一下mysql的关于主键的操作,现在的做的这些都是比较简单的,毕竟我们只有从简单才可以做到难得么,一步一步来,不扯别的了,我们看一下今天的目录 1.union的操作 2.select into以及适用于mysql的操作...
  • MySQL中的约束

    2017-05-11 22:30:53
    MySQL 中数据类型的约束
  • MySQL中常见约束与实践

    千次阅读 2017-04-28 10:20:03
    主键约束相当于`唯一约束+非空约束`的组合,`主键约束列不允许重复,也不允许出现空值`。 每个表最多只允许一个主键,建立主键约束可以在`列级别`创建,也可以在`表级别`创建。 当创建主键的约束时,系统默认会在`...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,091
精华内容 2,836
关键字:

mysql取消主键约束

mysql 订阅