博主最近打算搭建商城,由于之前对建表只有很浅显的理解,没有太过深入了解,建表过程中遇到一些问题,现记录如下,

如有问题请各位留言指正,感激不尽:

建表时设置如何设置联合主键?如下标红处:

CREATE TABLE `product_price` (
`product_id` int(12) NOT NULL COMMENT '商品ID',
`price_category_id` int(12) NOT NULL DEFAULT '0' COMMENT '价格类型ID',
`price_describe` varchar(15) DEFAULT NULL COMMENT '价格描述',
`price` decimal(18,3) DEFAULT NULL COMMENT '价格',
`created_by` varchar(20) DEFAULT NULL COMMENT '创建用户',
`created_time` datetime DEFAULT NULL COMMENT '创建时间',
`updated_by` varchar(20) DEFAULT NULL COMMENT '更新用户',
`updated_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`product_id`,`price_category_id`),
KEY `fk_price_category` (`price_category_id`),
CONSTRAINT `fk_price_product` FOREIGN KEY (`product_id`) REFERENCES `product` (`product_id`),
CONSTRAINT `fk_price_category` FOREIGN KEY (`price_category_id`) REFERENCES `product_price_category` (`price_category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='价格表';

  

如何设置外键?如上标绿处,含义如下:

constraint 外键(形如:FK_从表_主表) foreign key (从表外键字段) references 主表(主键字段);

注意语句中的(`)全部是Esc下面那个键而非单引号!执行语句时是单引号。

参考链接1:https://www.cnblogs.com/xlwh/p/8595141.html

参考链接2:https://blog.csdn.net/xudailong_blog/article/details/84136168

参考链接3:https://www.cnblogs.com/msi-chen/p/10189532.html

参考链接4:https://www.php.cn/mysql-tutorials-375831.html

遇到 ERROR 1005: Can't create table (errno: 150)解决办法

在mysql 中建立引用约束的时候会出现MySQL ERROR 1005: Can’t create table (errno: 150)的错误信息,结果是不能建立引用约束。
出现问题的大致情况
1、外键的引用类型不一样,如主键是int外键是char
2、找不到主表中引用的列
3、引用的字段和外键的字符编码不一致,也可能存储引擎不一样
4、引用的字段和外键的约束不同

参考链接:https://blog.csdn.net/yiluxiangqian7715/article/details/47747613

mysql建表注意事项:

1:如果某字段只有Y/N选项,创建时应用char(1),或者1/0选项用 tinyint(1)

2:尽量少使用langtext类型

3:用varchar时应该 制定具体长度,本来就20个字节,不应该用varchar(250),影响效率

参考链接:https://www.cnblogs.com/zjfjava/p/6920407.html

【记录】Mysql 建表注意事项的更多相关文章

  1. 三种常用的MySQL建表语句

    MySQL建表语句是最基础的SQL语句之一,下面就为您介绍最常用的三种MySQL建表语句,如果您对MySQL建表语句方面感兴趣的话,不妨一看. 1.最简单的: CREATE TABLE t1(    ...

  2. 基于表的数据字典构造MySQL建表语句

    表的数据字典格式如下: 如果手动写MySQL建表语句,确认麻烦,还不能保证书写一定正确. 写了个Perl脚本,可快速构造MySQL脚本语句. 脚本如下: #!/usr/bin/perl use str ...

  3. mysql建表出现Timestamp错误

    mysql建表时如果有两个或以上的字段为Timestamp,那么可能会出现如下错误: Incorrect table definition; there can be only one TIMESTA ...

  4. MySql 建表出现的问题:[ERR] 1064 - You have an error in your SQL syntax; check the manual.......

    使用 MySql 建表出现的问题 在使用 Navicat Premium 运行 sql 语句进行建表时,MySQL 报错如下: 建表语句: DROP DATABASE IF EXISTS javawe ...

  5. MySQL 建表语句 create table 中的列定义

    MySQL 建表语句 create table 中的列定义: column_definition: data_type [NOT NULL | NULL] [DEFAULT default_value ...

  6. 【转载】mysql建表date类型不能设置默认值

    如题,mysql建表date类型的不能设置一个默认值,比如我这样: CREATE TABLE `new_table` ( `biryhday` datetime NULL DEFAULT '1996- ...

  7. Mysql建表通用写法

    Mysql建表通用写法 CREATE TABLE IF NOT EXISTS stu( id ) PRIMARY KEY AUTO_INCREMENT,//主键 自增 stuname ) NOT NU ...

  8. MySQL建表DDL规范(欢迎补充)

    MySQL建表DDL规范(欢迎补充) 基本规范: 表名和字段名全大写,一般表名以T开头 脚本需支持可重复执行,带IF NOT EXISTS ,但不可带DROP语句 字符集使用utf8mb4 (CHAR ...

  9. 关于MySQL建表

    规范一些常用字段. password:varchar name:varchar 时间存储全部存储时间戳,用bigint(20),拒绝使用 MySQL数据类型  mysql数据类型 含义 date 3字 ...

随机推荐

  1. Java并发(基础知识)—— 阻塞队列和生产者消费者模式

    1.阻塞队列                                                                                        Blocki ...

  2. 转载:PhpExcel使用方法

    下面是总结的几个使用方法 include 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php'; //或者include 'PHPExcel/ ...

  3. 动态规划之数字三角形(POJ1163)

    在下面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大.路径上的每一步都只能往左下或 右下走.只需要求出这个最大和即可,不必给出具体路径. 既然求目标问题是根据查表得来的,自然 ...

  4. pylab和pyplot的区别

    Pylab combines the functionality of pyplot with the capabilities of NumPy in a single namespace, and ...

  5. Linux网络栈

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11394930.html OSI模型 OSI 模型把网络互联的框架分为应用层.表示层.会话层.传输层.网 ...

  6. php explode()函数 语法

    php explode()函数 语法 作用:把字符串打散为数组 语法:explode(separator,string,limit)大理石机械构件 参数: 参数 描述 separator 必需.规定在 ...

  7. 实验1 C语言环境使用和数据类型 运算符 表达式

    Part1 经过练习我发现自己经长会漏掉分号,有时输入法不同,打出来的括号前后不同,还有转义字符的使用,大小写转化之间的表达.还有打字速度比较慢. Part2 #include<stdio.h& ...

  8. MySqL rownum 序号 类似于 oracle的rownum

    mysql中没有 rownum 序号的功能,所以需要自己去实现序号的功能. @rownum 只是一个变量 可以换为 @i 等其他变量,但必须有@符号 SELECT @rownum:=@rownum+1 ...

  9. LOJ 3124 「CTS2019 | CTSC2019」氪金手游——概率+树形DP

    题目:https://loj.ac/problem/3124 看了题解:https://www.cnblogs.com/Itst/p/10883880.html 先考虑外向树. 考虑分母是 \( \s ...

  10. ROM、RAM、DRAM、SRAM、FLASH的区别?

    在学习单片机的时候经常会被这些东西搞晕掉,什么ROM RAM FLASH EEPROM 等等......为了不被搞晕,做个笔记,不记得的时候过来看看. 下面是我在网上找的资料: ROM和RAM指的都是 ...