精华内容
下载资源
问答
  • MySQL定义外键的方法

    2021-01-19 00:18:13
    MySQL定义外键的方法是每个学习MySQL的人都需要掌握的知识,下文就对MySQL定义外键的语句写法进行了详细的阐述,供您参考。外键MySQL带来了诸多的好处,下面就为您介绍MySQL定义外键的语句写法,以及MySQL定义外键...

    MySQL定义外键的方法是每个学习MySQL的人都需要掌握的知识,下文就对MySQL定义外键的语句写法进行了详细的阐述,供您参考。

    外键为MySQL带来了诸多的好处,下面就为您介绍MySQL定义外键的语句写法,以及MySQL定义外键过程中出现错误的处理方法,供您参考学习。

    mysql> CREATE TABLE categories (

    -> category_id tinyint(3) unsigned NOT NULL AUTO_INCREMENT,

    -> name varchar(30) NOT NULL,

    -> PRIMARY KEY(category_id)

    -> ) ENGINE=INNODB;

    Query OK, 0 rows affected (0.36 sec)

    mysql> INSERT INTO categories VALUES (1, ‘SQL Server’), (2, ‘Oracle’), (3, ‘PostgreSQL’), (4, ‘MySQL’), (5, ‘SQLite’);

    Query OK, 5 rows affected (0.48 sec)

    Records: 5 Duplicates: 0 Warnings: 0

    mysql> CREATE TABLE members (

    -> member_id INT(11) UNSIGNED NOT NULL,

    -> name VARCHAR(20) NOT NULL,

    -> PRIMARY KEY(member_id)

    -> ) ENGINE=INNODB;

    Query OK, 0 rows affected (0.55 sec)

    mysql> INSERT INTO members VALUES (1, ‘test’), (2, ‘admin’);

    Query OK, 2 rows affected (0.44 sec)

    Records: 2 Duplicates: 0 Warnings: 0

    mysql> CREATE TABLE articles (

    -> article_id INT(11) unsigned NOT NULL AUTO_INCREMENT,

    -> title varchar(255) NOT NULL,

    -> category_id tinyint(3) unsigned NOT NULL,

    -> member_id int(11) unsigned NOT NULL,

    -> INDEX (category_id),

    -> FOREIGN KEY (category_id) REFERENCES categories (category_id),

    -> CONSTRAINT fk_member FOREIGN KEY (member_id) REFERENCES members (member_id),

    -> PRIMARY KEY(article_id)

    -> ) ENGINE=INNODB;

    Query OK, 0 rows affected (0.63 sec)

    注意:对于非InnoDB表,FOREIGN KEY子句会被忽略掉。

    展开全文
  • MYSQL添加外键

    2021-01-25 11:32:28
    给商品表(从表)添加一个外键ALTER TABLE product ADD CONSTRAINT FK_cno FOREIGN KEY(cno) REFERENCES category(cid 从表);sql语句的执行顺序是:from-->WHERE-->GROUP BY -->HAVING --- >ORDER BY --&...

    给商品表(从表)添加一个外键

    ALTER TABLE product ADD CONSTRAINT FK_cno FOREIGN KEY(cno) REFERENCES category(cid  从表);

    sql语句的执行顺序是:from-->WHERE-->GROUP BY -->HAVING --- >ORDER BY --> SELECT;

    sql语句的编写顺序是:select  ->  FROM  -> WHERE  -> GROUP BY ->  HAVING  -> ORDER BY;

    转换代码:convert(字段名 using gbk)

    命令启动:services.msc   找到MySQL启动

    dos窗口启动cmd  MySQL -u root{默认账户} -p   显示输入密码没有密码直接回车

    创建数据库:create database 名字;

    查看数据库:show databases;

    创建表:CREATE TABLE s(id INT(50),NAME VARCHAR(50),sex CHAR(2),birthday DATETIME);

    date(精确到年月日)datetime(精确到年月日时分秒)

    删除表:drop table customer;

    ALTER TABLE kehu RENAME customer; -- 修改表名

    ALTER TABLE customer ADD age INT(20); -- 增加表字段

    ALTER TABLE customer DROP sex; -- 删除表字段

    ALTER TABLE customer CHANGE 字段名 xinming VARCHAR(50); -- 修改表字段

    插入数据(录入数据):

    INSERT INTO customer(id,NAME,sex,birthday)VALUE(888,‘李四‘,‘男‘,‘1997-12-9‘);

    数据类型varchar(字符串) int(整数) char(字符) date datetime  就只有这几种

    补充 tinyint -(整数,但是只有255位 -127 to 128(有符号)0 to 255(无符号) )一般用于年龄

    表约束:

    主键(primary key):物理上存储的顺序

    非空(not null):此字段不允许填写空值

    惟一(unique):此字段的值不允许重复

    默认值(default):当不填写此值时会使用默认值,如果填写时以填写为准

    外键(foreign key):维护两个表之间的关联关系

    UNSIGNED

    无符号的

    声明该数据列不允许负数

    ZEROFILL

    0填充的

    不足位数的用0来填充,如 int(3),5则为 005

    AUTO_INCREMENT

    自动增长的,每添加一条数据,自动在上一个记录数上加1

    通常用于设置主键,且为整数类型

    可定义起始值和步长

    -- 查询表数据

    ·  SELECT sid,sname FROM student;

    单字段查询(执行效率高)

    SELECT * FROM student;

    全表查询

    用*是全表查询(执行效率低),

    条件查询:

    -- 需求一:查询学号为111的学 生信息

    SELECT * FROM student WHERE sid = 111

    ;

    -- 需求二:查询一个叫老王的同学

    SELECT * FROM student WHERE sname = ‘老王‘;

    -- 需求三:查询出姓王的同学(模糊查询)

    SELECT * FROM student WHERE sname LIKE ‘王%‘;

    distinct  (在select后面的*前面加,表示去重复)

    --删除表数据

    -- 删除表数据

    DELETE FROM s WHERE sid = 222;

    -- 修改表数据

    UPDATE  s SET sname = ‘七七‘ WHERE sid = 777;

    --别名

    别名可以运用到列上,也可以运用在表上

    也可以用在函数上

    SELECT sid AS ‘学号‘,sname AS ‘姓名‘,sbirthday AS ‘出生日期‘ FROM 表名;

    改别名数据库:student AS s;

    --条件查询:

    比较运算符:

    等于: =

    大于: >

    大于等于: >=

    小于: <

    小于等于: <=

    不等于: != 或 <>

    --逻辑运算符:

    and --和

    (要符合所有条件才会筛选出来)

    or  --或者(符合其中任意一项就可以出来)

    not --非(no)

    --模糊查询:

    like

    %表示任意多个任意字符

    _表示一个任意字符

    --范围查询:

    in

    表示在一个非连续的范围内

    between ... and ...表示在一个连续的范围内

    --空判断:

    注意:null与‘‘是不同的

    判空is null

    判非空is not null

    (筛选出有空出或者没空出的格子)

    -- order by表示排序,默认是正序排,列名的后面加上desc之后是倒叙排列

    SELECT * FROM student ORDER BY sscore;

    -- 需求将学生表里面的学生成绩倒序排列

    SELECT * FROM student ORDER BY sscore DESC;

    -- 聚合函数

    1,统计--count

    2,平均--avg

    3,最大值--max

    4,最小值--mIN

    5,求和--sum

    --精确小数的函数    round(小数点后几位)

    --double(20,2)表示小数类型,20表示20位数字长度,2表示精确到小数点后两位

    --分页查询(limit)

    假设每页m条数据,现在要看n页那么

    select * from 表名 limit (n-1)×m,m;

    --分组(group by)

    统计出男生女生多少人----------select xingbie count(sid) from 表名 group by xingbie

    -- 主外键的作用:

    不是为了进行多表查询,没有主外键照样可以连接起来多表查询

    那么主外键的作用是:主键为了保证数据的唯一性

    ,外键为了保证数据的完整性(主表的数据被从表引用,那么主表里面相关联的数据不能随意更改或删除)

    --

    连接查询:

    1,等值查询

    SELECT * FROM A,B WHERE A.CID = B.CID;

    2,内连接查询

    SELECT * FROM A INNER JOIN B ON a.cid = B.cid

    外连接查询:左外连接和右外连接

    3,左外链接

    SELECT * FROM A LEFT JOIN B ON a.cid = B.cid

    内连接查询和左外连接查询的区别:

    -- 内连接查询出分类名称里面的商品

    -- 内连接:没有关联的数据不显示

    SELECT * FROM category c INNER JOIN product p ON c.cid = p.cno

    -- 左外连接查询出分类名称里面的商品

    --左外连接:没有关联的数据也会显示,右表没有值的数据用null表示.

    SELECT * FROM category c LEFT JOIN product p ON c.cid = p.cno

    事务的定义:(begin)-起始  (commit)-结束,提交  (rollback)- 回滚(撤销)

    把一连串的操作放在一起,要么全部成功,要么全部失败。

    事务的四个特性:原子性、一致性、隔离性、持久性

    事务的作用:保证数据的一致性!

    为什么要这样做:银行转账,有一方转出,另一方由于机械故障未收到钱,那么转出方肯定不干。

    存储过程:

    就是为了可重复的执行操作数据库的 sql 语句的集合.

    存储过程是一次编译,就会被缓存起来,下次使用就直接命中缓存中已经编译好的

    sql,

    存储过程作用:

    1,不需要重复编译

    2,减少网络交互

    3,减少网络访问流量

    自关联       意思就是说同一个表分成几个别,这些表都取别名,然后自己向关联,关联相同点。

    - 要查询出广东省里面的市和区(使用左外连接)

    SELECT * FROM areas a LEFT JOIN areas b ON a.aid = b.pid LEFT JOIN areas c  ON c.`pid` = b.`aid`

    WHERE a.aname = ‘广东省‘

    展开全文
  • 确实是建立外键的时候出的错,看 on delete set null 那段,意思是说在删除分类表中的id的时候,news表中的对应的c_id变为null了 问题就是出在这里,因为c_id是not null,所以出错, 所以想建立news 表有两种办法 1....

    先来看两个建表语句:

    CREATE TABLE `categories` (

    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '分类id',

    `cname` VARCHAR(32) NOT NULL COMMENT '分类名称',

    PRIMARY KEY (`id`)

    ) ENGINE=INNODB DEFAULT CHARSET=utf8

    CREATE TABLE `news` (

    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

    `c_id` int unsigned  NOT NULL  COMMENT '分类id',

    `imgsrc` varchar(255) NOT NULL,

    `href` varchar(255) NOT NULL,

    `date` date NOT NULL,

    `title` varchar(255) NOT NULL,

    `detail` text NOT NULL,

    `create_at` datetime DEFAULT CURRENT_TIMESTAMP,

    `update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY (`id`),

    foreign key (c_id) references categories(id) on update cascade on delete set null

    ) ENGINE=innodb auto_increment=1 DEFAULT CHARSET=utf8

    在建立news表的时候一直报错:(errno: 150 "Foreign key constraint is incorrectly formed")

    很多网上说是 必须再建立news表的时候需要为c_id添加上索引(index c_id(`c_id`)),我试了不行

    然后网上还说两个表必须都是innodb的引擎,我这个也没有问题

    看报错说是字段类型不一致,我看了一下,都是int 类型,都是not  null,那为什么始终说类型不一致呢

    看了半天才知道,确实是建立外键的时候出的错,看 on delete set null 那段,意思是说在删除分类表中的id的时候,news表中的对应的c_id变为null了

    问题就是出在这里,因为c_id是not null,所以出错,

    所以想建立news 表有两种办法

    1.将c_id 的not null去掉

    2.将on delete set null 改为 on delete restrict 或者 on delete cascade 或者 on delete no  action

    展开全文
  • 2012-08-31 回答mysql外键设置详解(1) 外键的使用:外键的作用,主要有两个:一个是让数据库自己通过外键来保证数据的完整性和一致性一个就是能够增加er图的可读性有些人认为外键的建立会给开发时操作数据库带来很大的...

    2012-08-31 回答

    mysql外键设置详解

    (1) 外键的使用:

    外键的作用,主要有两个:

    一个是让数据库自己通过外键来保证数据的完整性和一致性

    一个就是能够增加er图的可读性

    有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库有时候会由于没有通过外键的检测而使得开发人员删除,插入操作失败.他们觉得这样很麻烦

    其实这正式外键在强制你保证数据的完整性和一致性.这是好事儿.

    例如:

    有一个基础数据表,用来记录商品的所有信息。其他表都保存商品id。查询时需要连表来查询商品的名称。单据1的商品表中有商品id字段,单据2的商品表中也有商品id字段。如果不使用外键的话,当单据1,2都使用了商品id=3的商品时,如果删除商品表中id=3的对应记录后,再查看单据1,2的时候就会查不到商品的名称。

    当表很少的时候,有人认为可以在程序实现的时候来通过写脚本来保证数据的完整性和一致性。也就是在删除商品的操作的时候去检测单据1,2中是否已经使用了商品id为3的商品。但是当你写完脚本之后系统有增加了一个单据3 ,他也保存商品id找个字段。如果不用外键,你还是会出现查不到商品名称的情况。你总不能每增加一个使用商品id的字段的单据时就回去修改你检测商品是否被使用的脚本吧,同时,引入外键会使速度和性能下降。

    (2) 添加外键的格式:

    alter table yourtablename

    add [constraint 外键名] foreign key [id] (index_col_name, ...)

    references tbl_name (index_col_name, ...)

    [on delete {cascade | set null | no action | restrict}]

    [on update {cascade | set null | no action | restrict}]

    说明:

    on delete/on update,用于定义delete,update操作.以下是update,delete操作的各种约束类型:

    cascade:

    外键表中外键字段值会被更新,或所在的列会被删除.

    restrict:

    restrict也相当于no action,即不进行任何操作.即,拒绝父表update外键关联列,delete记录.

    set null:

    被父面的外键关联字段被update ,delete时,子表的外键列被设置为null.

    而对于insert,子表的外键列输入的值,只能是父表外键关联列已有的值.否则出错.

    外键定义服从下列情况:(前提条件)

    1)

    所有tables必须是innodb型,它们不能是临时表.因为在mysql中只有innodb类型的表才支持外键.

    2)

    所有要建立外键的字段必须建立索引.

    3)

    对于非innodb表,foreign key子句会被忽略掉。

    注意:

    创建外键时,定义外键名时,不能加引号.

    如: constraint 'fk_1' 或 constraint "fk_1"是错误的

    (3) 查看外键:

    show create table ***;可以查看到新建的表的代码以及其存储引擎.也就可以看到外键的设置.

    删除外键:

    alter table drop foreign key '外键名'.

    注意:

    只有在定义外键时,用constraint 外键名 foreign key .... 方便进行外键的删除.

    若不定义,则可以:

    先输入:alter table drop foreign key -->会提示出错.此时出错信息中,会显示foreign key的系统默认外键名.--->

    用它去删除外键.

    展开全文
  • MySQL增加外键的两种方式

    万次阅读 多人点赞 2018-10-04 12:17:34
    MYSQL增加外键的两种方式 *根据需求建一下表 i: emp表 ii:dept表 代码实现
  • 第一招、mysql服务的启动和停止net stop mysqlnet start mysql第二招、登陆mysql语法如下: mysql -u用户名 -p用户密码键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,然后回车即可进入到mysql中了,...
  • 像这种不能创建一个.frm 文件的报错好像暗示着操作系统的文件的权限错误或者其它原因,但实际上,这些都不是的,事实上,这个mysql报错已经被报告是一个mysql本身的bug并出现在mysql 开发者列表当中很多年了,然而这...
  • mysql主键外键

    2021-01-28 07:56:02
    MySql外键设置详解(1) 外键的使用:外键的作用,主要有两个:一个是让数据库自己通过外键来保证数据的完整性和一致性一个就是能够增加ER图的可读性有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库...
  • mysql 外键约束

    2021-01-28 00:28:57
    (1) 外键的使用:外键的作用,主要有两个:一个是让数据库自己通过外键来保证数据的完整性和一致性一个就是能够增加ER图的可读性有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库有时候会由于没有...
  • (1) 外键的使用:外键的作用,主要有两个:一个是让数据库自己通过外键来保证数据的完整性和一致性一个就是能够增加ER图的可读性有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库有时候会由于没有...
  • 首先,目前在产品环境可用的MySQL版本(指4.0.x和4.1.x)中,只有InnoDB引擎才允许使用外键,所以,我们的数据表必须使用InnoDB引擎。下面,我们先创建以下测试用数据库表:CODE:[Copy to clipboard]CREATE TABLE `...
  • 例如,如果一个是int(10),那么外键也必须设置成int(10),而不是int(11),也不能是tinyint。另外,你还必须确定两个字段是否一个为 signed,而另一个又是unsigned(即:无符号),这两字段必须严格地一致匹配,更多...
  • (根据约束所针对的字段的数目的多少来决定)列级约束:对一个数据列建立的约束表级约束:对多个数据列建立的约束列级约束即可以在列定义时声明,也可以在列定义后声明,表级约束只能在列定义后声明,表级约束很少用到...
  • MySql外键设置详解

    千次阅读 2021-01-18 19:18:05
    外键的作用,主要有两个:一个是让数据库自己通过外键来保证数据的完整性和一致性一个就是能够增加ER图的可读性有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库有时候会由于没有通过外键的检测而...
  • 原因分析:1、 两个字段的类型或者大小不严格匹配例如,如果一个是INT(10), 那么外键也必须设置成INT(10), 而不是 INT(11) 也不能是 TINYINT. 你得使用 SHOW 命令来查看字段的大小,因为一些查询浏览器有时候把 int...
  • IOS开发-UI学习-sqlite数据库的操作 IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这 ......
  • MySql 外键为空(null)

    千次阅读 2019-05-09 11:34:28
    本文通过实例,验证了MySql 外键可以为空(null)。 1.建表 商品表 create table goods( id int primary key )ENGINE = INNODB; 订单表 create table orders( id int, goodid int , foreign key(goodid) ...
  • MySQL – 条件外键约束

    2021-01-27 09:29:45
    您不能根据注释表的另一列中的值声明引用不同表的外键。这将违反关系数据库设计的几个规则。一个更好的解决方案是创建一种由注释引用的“supertable”。CREATE TABLE Commentable (id SERIAL PRIMARY KEY);CREATE ...
  • 带有外键的相关行可能会被删除(如果您使用级联外键),否则可能会阻止REPLACE。 触发的触发器DELETE不需要执行。 副作用也传播到副本。 修正:既REPLACE和INSERT...ON DUPLICATE KEY UPDATE是非标准的,私有的发明...
  • mysql外键使用和级联

    2021-01-21 05:27:30
    因为在MySQL中只有InnoDB类型的表才支持外键. MyIsam不支持。 首先要看看默认的引擎是什么? 2) 所有要建立外键的字段必须建立索引. 3) 对于非InnoDB表,FOREIGN KEY子句会被忽略掉。 注意: 创建外键时,定义外键名时...
  • 本篇文章主要给大家介绍mysql数据库怎么创建外键。关于mysql数据库外键的基础介绍,我们在这篇文章【Mysql外键是什么?有哪些用处?】中,已经给大家介绍过了,需要的朋友可以选择参考。了解了外键的基础定义,那么...
  • 上一篇只是讲述了外键约束的要求,并没有讲述外键约束的参照操作。这一次我来看看外键约束下的更新操作。 一外键约束的参照操作 我们进行外键约束的创建以后,在更新表的时候,子表是否也进行相应的更新。这是我们...
  • MySQL中利用外键实现级联删除、更新MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。在创建索引的时候,可以指定在删除、更新父表时...
  • MySQL中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因。1. 两个字段的类型或者大小不严格匹配。例如,如果一个是int(10),那么...
  • 注意,MySQL 外键,必须指定 主表的列名称 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) ...
  • mysql数据库中为表之间建立外键时报1005 - Can't create table 'xx' (errno: 150)错误的解决方法。PS:之所以要记录下来是因为我当时被这个问题困扰了几个小时。先奉上我解决问题的时候所参考的博文链接:...
  • 关于mysql外键关联

    2021-06-14 18:34:26
    关于mysql的外键关联 ...外键也是一种数据的约束,里面的值必须是在引用表里的值,比如说,在班级表中只有100和101,那么,在声明外键后,学生表里的cno,就不能出现其他的值,只能是100或101 ...

空空如也

空空如也

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

mysql声明外键

mysql 订阅