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

ALTER TABLE 表名 ADD CONSTRAINT 外键约束名 FOREIGN KEY(列名) REFERENCES 引用外键表(列名)

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

无法添加外键产生这个错误的多数原因有一下几点: 1,两张表里要设主键和外键的字段的数据类型或者数据长度不一样 (例如这个是int 另外一个是tinyint,或者都是int,但是设置的长度不同)

2,某个表里记录数据没有记录,或者数据不一致。

3、两个表的引擎不一样,查看表的引擎语句:

show table status from 数据库名 where name='表名';

4、要设置外键的字段不能为主键

5、改建所参考的字段必须为主键        (就是说第一个表关联的不能设置为主键,第2个表关联的必须为主键)

6、两个字段必须具有相同的数据类型和约束

我遇到的情况就是4、5。后面关联的表的字段必须被设置为主键,才能关联成功。

添加索jmeter是索引名称,aa是表名,id是列名称

CREATE INDEX jmeter ON aa(id);

查看索引语法,aa是表名

SHOW KEYS FROM aa;

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 aa RENAME bb; -- 修改表名,把表名aa修改成bb表

ALTER TABLE customer ADD age INT(20); -- 增加表字段,customer 为表名,age为添加的字段,int(20),整数类型20长度,

ALTER TABLE customer DROP sex; -- 删除表字段customer 为表名,sex为要删除的字段

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

ALTER TABLE bb CHANGE id xinming VARCHAR(50);

修改表字段:bb表名,id 要修改的字段名,xinming修改成的字段名,VARCHAR(50)是修改成的类型,字符串类型

插入数据(录入数据): customer表名,

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的学 生信息student 为表名,sid为字段名称

SELECT * FROM student WHERE sid = 111

;

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

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

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

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

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

--删除表数据

-- 删除表数据:s为表名,删除sid=222字段

DELETE FROM s WHERE sid = 222;

-- 修改表数据s为表名称,sname为修改

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

UPDATE  jj SET NAME="香港" WHERE id=2;     jj为表名,name为字段名修改成香港,条件id等于2的行

--别名

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

也可以用在函数上

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

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

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

-- 内连接:没有关联的数据不显示,ctegory 左表连接右表 product ,c和p为了方便起的别名,表c.id=p.cno

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 = '广东省'

mysql 定义外键并增删改查_MYSQL增删改查添加外键相关推荐

  1. MySQL数据表--创建多表、以及多表关系(添加外键)

    创建需求: 如何让分类表category和商品表product之间产生关系? 如果有关系,在数据库中如何表示这种关系? 我们首先建立数据表.插入数据: create table category(   ...

  2. mysql alter table add foreign key_mysql alter table add foreign (errno: 150)添加外键150错误

    在原有的users 表和orders表上,为orders添加外键alter table tbl_order add foreign key fk_user_id(user_id) references ...

  3. mysql分析表增删改统计_MySQL增删改查|附思维导图

    对于数据库的学习,增删改查一直是我们老师啰嗦的重点,他说(原话):对于常用sql语法我们一定要牢记于心,尤其是各种查询的用法,在面试的时候,一个小小的知识点,面试官都可以推断出求职者的基础是否扎实. ...

  4. mysql表明明没有外键却删不掉_mysql为什么不让删外键?

    有时候我们无法删除mysql外键,该怎么办呢?下面就给大家介绍mysql为什么不让删外键以及解决办法,希望对需要的朋友有所帮助! 1.MYSQL在建外键后,会自动建一个同名的索引 2.而删除外键的时候 ...

  5. mysql唯一索引和联合索引的区别_mysql中,索引,主键,唯一索引,联合索引的区别...

    索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针. 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度. ...

  6. 在mysql中如何添加外键约束_如何在MySQL中设置外键约束

    (1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库 ...

  7. mysql无法添加或更新子行_MySQL错误1452-无法添加或更新子行:外键约束失败?

    每当我们在表之间添加外键约束并将记录插入子表中时,都会发生此错误.让我们来看一个例子. 创建子表.mysql> create table ChildDemo -> ( -> id i ...

  8. mysql-电商库演练2-拆表-修改字段-添加外键

    当前数据表 根据表的设计理念 应该要把它进行分表比较合适 商品分类单独建表 >创建数据表 >商品的分类是我们需要存入商品分类表中的数据,看一看商品的分类 >查看一下商品分类表的表结构 ...

  9. oracle 主键能加索引吗,Oracle 添加主键和索引

    数据的主键和索引一般情况下都是必须的,特别是表有大量数据的时候,索引和主键更是必不可少,这样可以提供数据的查询效率: 一.创建表的同时创建主键约束 (1)无命名 create table studen ...

  10. 2019-7-26 [MySQL] 安装与介绍 语句分类/语法 数据类型 DDL数据定义:创建/查看/删除/使用 DML数据操作:增删改 主键约束 自动增长列 非空约束 默认值 Navicat

    文章目录 0.知识回顾 1.数据库介绍 1.1 数据库概述 1.1.1 什么是数据库 1.1.2 什么是数据库管理系统 1.1.3 数据库与数据库管理系统的关系 1.2 数据库表 1.3 表数据 1. ...

最新文章

  1. Git Bash命令行基础
  2. 为什么C4C UI上看不到新建按钮
  3. JAVA能做flash游戏吗_FLASH+JAVA开发实时网络游戏 (转:闪客帝国)
  4. Linux查找文件内容的常用命令方法
  5. java重载和重写的区别_Java重载和重写的区别
  6. 51单片机洞洞板用的visio图_怎样用洞洞板焊接一个向STC80c51或者AT89C51单片机里面烧录程序的电路板?...
  7. 2022蓝桥杯java
  8. ajax 传数据视频,Django知识整理四(choices参数,MTV与MVC模型,ajax介绍,ajax传json文件,ajax传文件,contentType前后端传输数据编码格式)...
  9. Proguard混淆与Maven集成
  10. 树莓派SPI连接TFT屏幕
  11. android 屏幕统计,OffScreen - 屏幕时间统计
  12. 一个班37人考进清华北大,老师发来一则短信,家长都沉默了!
  13. 视频教程-新版华为HCIA数通(路由与交换)课程-华为认证
  14. Android OpenGLES滤镜开发之仿抖音灵魂出窍
  15. oracle进程一直正在启动不了,如果 SELinux 正在运行,则 fmd 守护进程可能不启动...
  16. 冯·诺依曼体系和哈佛体系结构比较
  17. Android使用SwipeRefreshLayout实现下拉刷新
  18. IPRAN学习---Qos
  19. 六层电梯西门子S7-200PLC梯形图程序
  20. 2017-2018-2 20155314《网络对抗技术》Exp5 MSF基础应用

热门文章

  1. 国产操作系统(1)UOS安装QT
  2. Python3中的md5加密
  3. CentOS6 的yum源配置
  4. 谷歌浏览器访问接口无返回
  5. ALTOVA XMLSpy 2013中文版下载教程及简单运用
  6. 数据的正态性检验汇总
  7. meshLab裁剪网格
  8. 91卫图助手下载器永久免费啦!!
  9. 基于讯飞语音API应用开发之——离线词典构建
  10. 博科光纤交换机维护手册