mysql 定义外键并增删改查_MYSQL增删改查添加外键
给商品表(从表)添加一个外键
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增删改查添加外键相关推荐
- MySQL数据表--创建多表、以及多表关系(添加外键)
创建需求: 如何让分类表category和商品表product之间产生关系? 如果有关系,在数据库中如何表示这种关系? 我们首先建立数据表.插入数据: create table category( ...
- 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 ...
- mysql分析表增删改统计_MySQL增删改查|附思维导图
对于数据库的学习,增删改查一直是我们老师啰嗦的重点,他说(原话):对于常用sql语法我们一定要牢记于心,尤其是各种查询的用法,在面试的时候,一个小小的知识点,面试官都可以推断出求职者的基础是否扎实. ...
- mysql表明明没有外键却删不掉_mysql为什么不让删外键?
有时候我们无法删除mysql外键,该怎么办呢?下面就给大家介绍mysql为什么不让删外键以及解决办法,希望对需要的朋友有所帮助! 1.MYSQL在建外键后,会自动建一个同名的索引 2.而删除外键的时候 ...
- mysql唯一索引和联合索引的区别_mysql中,索引,主键,唯一索引,联合索引的区别...
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针. 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度. ...
- 在mysql中如何添加外键约束_如何在MySQL中设置外键约束
(1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库 ...
- mysql无法添加或更新子行_MySQL错误1452-无法添加或更新子行:外键约束失败?
每当我们在表之间添加外键约束并将记录插入子表中时,都会发生此错误.让我们来看一个例子. 创建子表.mysql> create table ChildDemo -> ( -> id i ...
- mysql-电商库演练2-拆表-修改字段-添加外键
当前数据表 根据表的设计理念 应该要把它进行分表比较合适 商品分类单独建表 >创建数据表 >商品的分类是我们需要存入商品分类表中的数据,看一看商品的分类 >查看一下商品分类表的表结构 ...
- oracle 主键能加索引吗,Oracle 添加主键和索引
数据的主键和索引一般情况下都是必须的,特别是表有大量数据的时候,索引和主键更是必不可少,这样可以提供数据的查询效率: 一.创建表的同时创建主键约束 (1)无命名 create table studen ...
- 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. ...
最新文章
- Git Bash命令行基础
- 为什么C4C UI上看不到新建按钮
- JAVA能做flash游戏吗_FLASH+JAVA开发实时网络游戏 (转:闪客帝国)
- Linux查找文件内容的常用命令方法
- java重载和重写的区别_Java重载和重写的区别
- 51单片机洞洞板用的visio图_怎样用洞洞板焊接一个向STC80c51或者AT89C51单片机里面烧录程序的电路板?...
- 2022蓝桥杯java
- ajax 传数据视频,Django知识整理四(choices参数,MTV与MVC模型,ajax介绍,ajax传json文件,ajax传文件,contentType前后端传输数据编码格式)...
- Proguard混淆与Maven集成
- 树莓派SPI连接TFT屏幕
- android 屏幕统计,OffScreen - 屏幕时间统计
- 一个班37人考进清华北大,老师发来一则短信,家长都沉默了!
- 视频教程-新版华为HCIA数通(路由与交换)课程-华为认证
- Android OpenGLES滤镜开发之仿抖音灵魂出窍
- oracle进程一直正在启动不了,如果 SELinux 正在运行,则 fmd 守护进程可能不启动...
- 冯·诺依曼体系和哈佛体系结构比较
- Android使用SwipeRefreshLayout实现下拉刷新
- IPRAN学习---Qos
- 六层电梯西门子S7-200PLC梯形图程序
- 2017-2018-2 20155314《网络对抗技术》Exp5 MSF基础应用