精华内容
下载资源
问答
  • mysql 设置外码约束

    千次阅读 2019-10-07 10:57:50
    mysql 设置外码约束 foreign key(字段名1) references 表名(字段名2));

    mysql 设置外码约束

     foreign key(字段名1) references 表名(字段名2));

     

    展开全文
  • 我们在使用 MySQL 数据库时,添加数据如果设计不合理很容易出现外码约束的情况,为什么会产生这样的问题?那我们该如何处理这一问题呢?依据又是什么?本篇文章带你进一步来深度剖析,并带着你的思路来设计解决方案...


    前言

    我们在使用 MySQL 数据库时,添加数据如果设计不合理很容易出现外码约束的情况,为什么会产生这样的问题?那我们该如何处理这一问题呢?依据又是什么?本篇文章带你进一步来深度剖析,并带着你的思路来设计解决方案。

    在这里插入图片描述


    本次案例的案例情景是传统的数据库表:学生-课程数据库。

    一、插入新数据时报错外键约束?

    我们在 Course 表中插入课程号为 1 的数据时提示违反了外键约束。插入语句如下:

    insert into course(cno,cname,cpno,ccredit) values('1','数据库','5',4);
    

    二、对于出错 SQL 语句的分析

    我们先根据 Course 表的定义,看哪一个是外键。查看 Course 表定义的 SQL 语句如下:

    create table course (
    cno char(4) primary key,
    cname char(40),
    cpno char(4),
    ccredit smallint,
    foreign key cpno references course(cno));
    

    从上面的 SQL 语句可以看出,cpno 是外键,而且引用的是本表的主键 cno。

    三、对于外码约束的分析

    我们根据数据库定义的参照完整性规则得知:外键 cpno 的取值不为空的情况下(如上 cpno=‘5’),与其对应的主键 cno 在参照表中必须存在。

    但是我们反观上面操作,第一个插入的就是 cno=‘1’ 的数据,cno=‘5’ 的还没有插入,很显然不满足参照完整性规则。

    四、如何处理外键约束?

    解决方法:

    1. 插入数据的时候,所有的 cpno 字段暂时都置为 null,所有数据插入以后,再依次更新这些数据的 cpno 的值。该方法的优点是复杂性低,容易实现。
    2. 插入数据的时候,不是按表中 cno 的顺序插入,而是根据数据依赖的关系插入数据。比如,根据表里的数据,分析得出可以按 cno=2、6、4、7、5、1、3 的顺序插入数据。

    总结

    本文我们掌握了 MySQL 数据库如何在设计不合理时遇到的外码约束的问题,并通过经典案例为大家分析了为何会出现这样的问题,同时顺着思路来设计业务的解决方案。本文提到的数据库参照完整性规则是数据库设计的基础知识,大家切记要重视基础,活学活用,方能在开发中百战不殆!

    在这里插入图片描述


    感谢大家的支持,我是白鹿,一个不懈奋斗的程序猿。希望本贴能帮助到大家,欢迎大家的一键三连!如果还有什么问题、建议或者补充可以留言在帖子下方,给予更多人帮助!
    更多资讯微信搜索公众号【WDeerCode代码圈

    展开全文
  • mysql如何处理外码约束

    千次阅读 2019-01-11 00:18:35
    MySQL 外键约束 -- 创建测试主表. ID 是主键.CREATE TABLE test_main ( id INT, value VARCHAR(10), PRIMARY KEY(id));-- 创建测试子表.CREATE TABLE ...

    http://hi.baidu.com/wangzhiqing999/item/e74b2be28be445a3c00d7528

    MySQL 外键约束

    -- 创建测试主表. ID 是主键.
    CREATE TABLE test_main (
      id      INT,
      value   VARCHAR(10),
      PRIMARY KEY(id)
    );


    -- 创建测试子表.
    CREATE TABLE test_sub (
      id      INT,
      main_id INT,
      value   VARCHAR(10),
      PRIMARY KEY(id)
    );


    -- 插入测试主表数据.
    INSERT INTO test_main(id, value) VALUES (1, 'ONE');
    INSERT INTO test_main(id, value) VALUES (2, 'TWO');

    -- 插入测试子表数据.
    INSERT INTO test_sub(id, main_id, value) VALUES (1, 1, 'ONEONE');
    INSERT INTO test_sub(id, main_id, value) VALUES (2, 2, 'TWOTWO');



    默认外键约束方式
    mysql> ALTER TABLE test_sub
        ->   ADD CONSTRAINT main_id_cons
        ->   FOREIGN KEY (main_id)
        ->   REFERENCES  test_main(id);
        -> //
    Query OK, 2 rows affected (0.17 sec)
    Records: 2  Duplicates: 0  Warnings: 0

    mysql> DELETE FROM
        ->   test_main
        -> WHERE
        ->   id = 1;
        -> //
    ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constrai
    nt fails (`test`.`test_sub`, CONSTRAINT `main_id_cons` FOREIGN KEY (`main_id`) R
    EFERENCES `test_main` (`id`))


    MySQL使用下面这个语句删除外键约束
    ALTER TABLE test_sub DROP FOREIGN KEY  main_id_cons;



    DELETE CASCADE 方式
    mysql> ALTER TABLE test_sub
        ->   ADD CONSTRAINT main_id_cons
        ->   FOREIGN KEY (main_id)
        ->   REFERENCES  test_main(id)
        ->   ON DELETE CASCADE//
    Query OK, 2 rows affected (0.16 sec)
    Records: 2  Duplicates: 0  Warnings: 0

    mysql> DELETE FROM
        ->   test_main
        -> WHERE
        ->   id = 1;
        -> //
    Query OK, 1 row affected (0.02 sec)

    mysql> SELECT
        ->   *
        -> FROM
        ->   test_sub;
        -> //
    +----+---------+--------+
    | id | main_id | value  |
    +----+---------+--------+
    |  2 |       2 | TWOTWO |
    +----+---------+--------+
    1 row in set (0.00 sec)


    MySQL使用下面这个语句删除外键约束
    ALTER TABLE test_sub DROP FOREIGN KEY  main_id_cons;




    UPDATE CASCADE方式
    mysql> ALTER TABLE test_sub
        ->   ADD CONSTRAINT main_id_cons
        ->   FOREIGN KEY (main_id)
        ->   REFERENCES  test_main(id)
        ->   ON UPDATE CASCADE;
        -> //
    Query OK, 1 row affected (0.14 sec)
    Records: 1  Duplicates: 0  Warnings: 0

    mysql> UPDATE test_main SET id = 5 where id = 2
        -> //
    Query OK, 1 row affected (0.01 sec)
    Rows matched: 1  Changed: 1  Warnings: 0

    mysql> select * from test_sub//
    +----+---------+--------+
    | id | main_id | value  |
    +----+---------+--------+
    |  2 |       5 | TWOTWO |
    +----+---------+--------+
    1 row in set (0.00 sec)


    MySQL使用下面这个语句删除外键约束
    ALTER TABLE test_sub DROP FOREIGN KEY  main_id_cons;


    SET NULL方式
    mysql> ALTER TABLE test_sub
        ->   ADD CONSTRAINT main_id_cons
        ->   FOREIGN KEY (main_id)
        ->   REFERENCES  test_main(id)
        ->   ON DELETE SET NULL;
        -> //
    Query OK, 1 row affected (0.13 sec)
    Records: 1  Duplicates: 0  Warnings: 0

    mysql> DELETE FROM
        ->   test_main
        -> WHERE
        ->   id = 5;
        -> //
    Query OK, 1 row affected (0.05 sec)

    mysql>
    mysql> SELECT
        ->   *
        -> FROM
        ->   test_sub;
        -> //
    +----+---------+--------+
    | id | main_id | value  |
    +----+---------+--------+
    |  2 |    NULL | TWOTWO |
    +----+---------+--------+
    1 row in set (0.00 sec)

    展开全文
  • lnmp mysql 忘记密码,配置网访问

    千次阅读 2018-10-06 14:46:27
    一、忘记密码 1、先确认lnmp的工作状态: # lnmp msyql status ,如果lnmp正在running,则先将其关闭 # lnmp msyql stop 2、进入mysql配置文件: # ...

    一、忘记密码

    1、先确认lnmp的工作状态,如果lnmp正在running,则先将其关闭                   

    lnmp msyql status
    lnmp msyql stop

    2、进入mysql配置文件:                    

    vim /etc/my.cnf

    在[mysqld]的段中加上一句:            

    skip-grant-tables

    3、启动lnmp:                                   
    # lnmp msyql start

    4、登录并修改MySQL的root密码:           
    # /usr/bin/mysql
                                                         
    mysql> use mysql ;                                                      
    mysql> update mysql.user set authentication_string=password('123456') where user='root';                                                      
    mysql>exit;

    5、将MySQL的登录设置修改回来:             
    # vim /etc/my.cnf
      
    将先前在[mysqld]的段中加上的那句删除:
    skip-grant-tables

    6、重启mysql:                                     
    # lnmp msyql restart

    二、配置外网访问

    查询host
    mysql> select user,host from user;
    创建host
    如果没有"%"这个host值,就执行下面这两句:
    mysql> update user set host='%' where user='root';
    mysql> flush privileges;

    mysql>exit;

    # lnmp msyql restart

    三、contos添加mysql3306端口

    firewalld添加3306端口
    基本使用
    启动: systemctl start firewalld
    查看状态: systemctl status firewalld 
    停止: systemctl disable firewalld
    禁用: systemctl stop firewalld

    查看版本: firewall-cmd --version
    查看帮助: firewall-cmd --help
    显示状态: firewall-cmd --state
    查看防火墙,添加的端口也可以看到:firewall-cmd --list-all
    查看所有打开的端口: firewall-cmd --zone=public --list-ports
    添加端口:firewall-cmd --zone=public  --add-port=<portid>[-<portid>]/<protocol>  --permanent(--permanent永久生效,没有此参数重启后失效)
    更新防火墙规则: firewall-cmd --reload
    查看区域信息:  firewall-cmd --get-active-zones
    查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
    拒绝所有包:firewall-cmd --panic-on
    取消拒绝状态: firewall-cmd --panic-off
    查看是否拒绝: firewall-cmd --query-panic
     
    添加示例  查看,添加,重载,删除

    firewall-cmd --zone=public --list-ports
    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    firewall-cmd --zone=public --add-port=80/tcp --add-port=443/tcp --permanent

     

    firewall-cmd --reload
    firewall-cmd --permanent --remove-port=3306/tcp

    ok✌️

     
    展开全文
  • Linux下修改Mysql密码的多种方式

    万次阅读 2017-05-17 15:43:51
    有时我们会忘记Mysql的密码,或者想改一个密码,以下将对这两种情况...在mysql系统,使用mysqladminmysqladmin -u root -p password "test123" Enter password: 【输入原来的密码】方法二: 通过登录mysql系统,mysq
  • centos6.5下Mysql更改密码

    千次阅读 2016-03-13 17:51:38
    mysql系统,使用mysqladmin # mysqladmin -u root -p password "test123" Enter password: 【输入原来的密码】 方法二: 通过登录mysql系统, # mysql -uroot -p Enter passwo
  • mysql5.7密码策略及修改技巧

    万次阅读 2018-07-07 20:39:19
    mysql升级5.7版本以后,安全性大幅度上升。MySQL5.7为root用户随机生成了一个密码,打印在error_log中,关于error_log的位置,如果安装的是RPM包,则默认是 /var/log/mysqld.log 。于是我们可以在mysqld.log中找到...
  • MySQL安装及MySQL8.0新密码认证方式

    万次阅读 热门讨论 2018-06-24 21:11:26
      安装MySQL总是看到除了数据库服务,还安装了一大堆基本没不会用到的服务,所以这里把MySQL的安装过程过一遍。体验安装MySQL8.0的时候,发现我的navicat连不上MySQL8.0了,经查找原来MySQL8.0提供了两种密码...
  • phpstudy mysql密码,phpstudy伪静态
  • mysql 修改数据库密码

    千次阅读 2019-01-09 09:35:30
    今天闲来想把mysql整到网玩玩,不小心把mysql整的密码错误,然后一连串的百度,最后成功了,给大家分享一下mysql是如何修改密码的 方法1: 用SET PASSWORD命令  首先登录MySQL。  格式:mysql&gt; set ...
  • 忘记mysql密码怎么办

    千次阅读 2019-06-12 09:53:42
    1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL...的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全 状态。最安全的状态是到服务器的Console上面操作,并且拔掉网线...
  • 本文所有操作都是基于mysql8.0执行的,针对mysql数据库创建表之后的约束语句的添加、...创建表时定义外码 创建表后定义外码 定义参照完整性的违约处理 用户自定义完整性 NOT NULL/NULL DEFAULT UNIQUE CHECK ...
  • 在使用mysql数据库的外键的建立的过程中遇到了几个名词,下面是他的作用      . cascade方式 在父表上update/delete记录时,同步update/delete掉子表的匹配记录        . set null方式 在父...
  • linux中忘记连接MySQL的密码怎么办?

    千次阅读 2018-08-11 10:59:49
    1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。...的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全 状态。最安全的状态是到服务器的Console上面操作,并且...
  • mysql忘记root密码解决方案

    千次阅读 2017-04-17 21:21:01
    1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。...的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全 状态。最安全的状态是到服务器的Console上面操作,并且拔
  • Window环境,忘记Mysql的root密码重置密码。
  • Wampserver默认mysql密码,Wampserver教程,Wampserver安装教程
  • mysql 找回root密码

    千次阅读 2018-10-24 09:48:25
    找到下列文件 Windows 是my.ini文件, Linux是...2、Linux下MySQL的配置文件是my.cnf,一般会放在/etc/my.cnf,/etc/mysql/my.cnf。如果找不到,可以用find命令查找。 3、Linux用rpm包安装的MySQL是不会安装/etc/m...
  • MySQL数据库面试题(2020最新版)

    万次阅读 多人点赞 2020-03-10 17:20:40
    什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?...
  • linux下mysql的root密码忘记解决方法

    万次阅读 2013-11-14 18:05:04
    1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。...的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全 状态。最安全的状态是到服务器的Console上面操作,并且
  • centos mysql 修改root密码

    千次阅读 2018-11-14 12:01:36
      1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。  因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的  ...的端口封闭,并且停止Ap...
  • 重置mysql root 密码(转载)

    千次阅读 2011-09-29 22:21:51
    一. MySQL密码的恢复方法之一 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。...的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全  状态。最安全的状
  • 阿里云服务器Mysql修改密码

    千次阅读 2017-09-11 15:04:58
    Tomcat 8.5.8JDK 8u111MySQL5.7.16 详细信息,请在服务器执行 more readme.txt 查看 修改mysql密码方法(为保证数据安全,新密码 设置 9位及以上 数字+字母+大小写+特殊字符) :  mysqladmin -u root ...
  • Mysql中新建用户,设置密码

    万次阅读 2018-06-21 18:43:49
    Mysql中新建用户,设置密码
  • MySQL忘记root密码解决方法

    千次阅读 2019-05-13 00:38:18
    CentOS下MySQL忘记root密码解决方法 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL...的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全 状态。最安全的状态是到...
  • mysql 密码修改和找回

    千次阅读 2008-12-01 14:58:00
    方法二: 可以进行如下的步骤重新设置MySQL的root密码: 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL...可以采用将MySQL的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器
  • 新安装的mysql没有密码登陆

    千次阅读 2019-03-31 00:39:37
    新装的mysql,想登陆时却无法登陆... [root@localhost ~]# mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) [root@localhost ~]# my...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,976
精华内容 39,990
关键字:

mysql外码是什么

mysql 订阅