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

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

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

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. "Unable to locate package lrzsz"的解决办法

    某天安装一些常用软件,比如lrzsz的时候出错了 $ sudo apt-get install lrzsz Reading package lists... Done Building depende ...

  2. JVM内存组成

    JVM的内存区域模型 1.方法区 也称永久代.非堆. 用于存储虚拟机加载的类信息.常量.静态变量,是各个线程共享的内存区域. 默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize和 ...

  3. elasticsearch failed to load elasticsearch nodes

    转载:https://blog.csdn.net/weixin_44714808/article/details/90049315 elasticsearch 安装在linux时使用springboo ...

  4. NOSQL导图

  5. MySQL查询执行路径

    1.客户端发送一条查询给服务器2.服务器先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果.3.服务器端进行SQL解析.预处理,再由优化器生成对应的执行计划.4.MySQL根据优化器生成的执行 ...

  6. STM32 通用定时器好文章收藏

    https://blog.csdn.net/fengshuiyue/article/details/79150724 单片机入门学习十三 STM32单片机学习十 通用定时器 里面写的挺不错,图文并茂, ...

  7. Sublime Text 注册及使用相关

    sublime text3 注册码 2019-07-01 注册码可以直接用 地址: 2019-07-01 亲测可用 2019-07-18 亲测可用 -– BEGIN LICENSE -– Die So ...

  8. boost tuple

    boost::tuple is a generalized version of std::pair. While std::pair can only store exactly two value ...

  9. 【LeetCode 42】接雨水

    题目链接 [题解] 考虑每个位置它最后能接多少单位的水. 显然就是这个min(位置左边最高的位置,位置右边最高的位置)-当前这个位置的高度. 这就是这个位置最后水上涨的高度. 两个边界注意是不会储水的 ...

  10. 【Flutter学习】之button按钮

    一,概述 由于Flutter是跨平台的,所以有适用于Android和iOS的两种风格的组件.一套是Google极力推崇的Material,一套是iOS的Cupertino风格的组件.无论哪种风格,都是 ...