MYSQL添加外键

Posted 无泪人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL添加外键相关的知识,希望对你有一定的参考价值。

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

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

以上是关于MYSQL添加外键的主要内容,如果未能解决你的问题,请参考以下文章

mysql中添加外键问题,求高手

MySQL 无法添加外键约束

为啥 InnoDB 为外键列添加索引

Mysql添加外键的方式

不能在mysql中添加外键?

MySQL添加主键和外键