为了账号安全,请及时绑定邮箱和手机立即绑定

与MySQL的零距离接触

平然 学生
难度入门
时长 8小时29分
学习人数
综合评分9.67
935人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰
  • 多表更新一步到位

    <!--此处有图片-->

    <!--此处有图片-->

    通过tdb_goods_brands数据表来更新tdb_goods数据表(注意给表起别名)

    <!--此处有图片-->

    通过ALTER TABLE语句修改数据表结构

    <!--此处有图片-->


  • 2019-06-18

    多表更新(参照另外一张表更新本表的记录)

    语法:UPDATE table_references SET col_name1={expr1 | DEFAULT}

    [,col_name2={expr2 | DEFAULT}] ... [WHERE where_condition],需要表的参照关系,这就是将要讲的连接。

    表的参照关系:一张表通过INNER JOIN或者LEFT OUTER JOIN去连接另外的一张表并通过ON指定连接条件,在写表的参照时,也可以给表起别名。

    连接表的语法:table_reference {[INNER | CROSS] JOIN | {LEFT | RIGHT} [OUTER] JOIN} table_reference ON conditional_expr。

    连接表除了使用表的名称以外,还需要使用连接类型。

    连接类型一共分为3中:在MySQL中,JOIN,CROSS JOIN和INNER JOIN是等价的。

    【1】INNER JOIN:内连接.

    【2】LEFT [OUTER] JOIN:左外连接。

    【3】RIGHT [OUTER] JOIN:右外连接。


    案例:使用INNER JOIN连接两张表,并作为表的参照关系进行多表更新,更新商品表id=22的商品分类属性,修改为6,因为商品分类的名称在商品分类表中对应的id为6


    结果:数据信息被更新了

    多表更新

    UPDATE table_references

    SET col_name1 = {expr1|DEFAULT}

    [, col_name2 ={expr2|DEFAULT}]...

    [WHERE where_condition]

    语法结构

    {[INNER|CROSS] JOIN | {LEFT|RIGHT} [OUTER]JOIN}

    table_reference

    ON conditional_expr


    UPDATE tdb_goods INNER JOIN tdb_goods_cates ON goods_cate = cate_name;

    SET goods_cate = cate_id;

    SELECT * FROM tdb_goods\G;


  • 限制查询结果返回的数量

    [ LIMIT { [ offset, ] row_count OFFSET offset } ]

    SELECT * FROM users LIMIT 2;返回前两条数据

    SELECT * FROM users LIMIT 2,2;是指从下标2(下标从0开始算)(即是第三条记录开始)开始,返回两条记录

    insert [into] 表名 set 字段={...},...

    INSERT test (username) SELECT username FROM users WHERE age>=30;

    将users表中年龄大于等于30的结果插入test表中

    insert 目的表(字段名) select 字段名 from 原表名 where 另一字段 >=30;   把select后查出表中满足条件的字段数据插入到目的表中

    limit 0,2     ---0代表第一行,2代表显示几行


  • 关于本小节中,count(id) >= 2;的测试!!!

    以下面的数据表为例:

    <!--此处有图片-->

    注意表中sex列, 其中值为NULL的有2个,值为0的有3个,值为2的有1个,值为3的有1个。

    上面这步很重要!!接着我们来测试一下:

    当 count(id) >= 1 时:

    <!--此处有图片-->

    当 count(id) >= 2 时:

    <!--此处有图片-->

    当 count(id) >= 3 时:

    <!--此处有图片-->

    当 count(id) >= 4 时:

    <!--此处有图片-->

    由此可见, count(id) >= 2 输出的结果跟id毫无关系! 它只跟set列中具有相同值的个数有关,

    值为NULL的有2个,值为0的有3个,值为2的有1个,值为3的有1个

    当 count(id) >= 1 时, 输出的是NULL,0,2,3。因为他们的数目都满足>=1

    当 count(id) >= 2 时, 输出的是NULL,0。因为他们对应的数目分别为2和3,都满足>=2

    当 count(id) >= 3 时, 输出的是0,  因为值为0的个数为3,满足>=3

    当 count(id) >= 4 时, 没有输出。因为没有满足条件的元素。


    这问题让我纠结的半个小时,看了一些慕友的问答后,更是把我搞糊涂了,说什么输出的是非NULL值,还有说什么跟id有什么什么关系。经过测试,输出的结果只跟set列具有相同的值的个数有关系,跟是不是NULL没关系,跟id也没关系。

     你可以把count(id) >= 2 改成count(username) >= 2或者改成count(age) >= 2或者改成count(password) >= 2,输出的结果都是一样的,老师的一个无意之举,本没有什么特别的含义,结果却引得众慕友们胡乱猜测。为了让还没有搞明白的慕友们,在这个问题上少绕些弯子,就写了这么一些东西,如果有什么不对的地方,欢迎各慕友指点。。


  • 约束:

        NOT NULL(非空约束)

        PRIMARY KEY (主键约束)

        UNIQUE KEY(唯一约束)

        DEFAULT(默认约束)

        FOREIGN KEY(外键约束)


  • MySQL修改数据表——修改列定义和更名数据表

    一、修改列定义(针对数据类型和位置)

    ALTER TABLE 表名 MODIFY [COLUMN] 列名 column_definition [FIRST | AFTER 列名]

    注意:由大类型——>小类型可能会造成数据的丢失(比如:SMALLINT(无符号为0-65535)——>TINYINT(0-255))。

    二、修改列名称(既可以修改列定义,又可以修改列名称)

    ALTER TABLE 表名 CHANGE [COLUMN] 老名称 新名称 列定义 [FIRST | AFTER 表名]

    三、数据表更名

    方法1:

    ALTER TABLE 旧表名 RENAME [TO | AS] 新表名

    方法2:

    RENAME TABLE 旧表名 TO 新表名 [,旧表名 TO 新表名]...

    (方法2可以为多张数据表进行更名,尽量少使用数据列的更名以及数据表的更名,原因当我们原来创建过索引,或者使用过视图,或存储过程的话,表名或者列名曾经被引用情况下,如果修改了,可能会导致某个视图或者某个存储过程无法正常进行工作)


  • 删除主键约束:ALTER TABLE 列名 DROP PRIMARY KEY(不需要加主键名,因为主键是唯一的)

    SHOW INDEXES FROM 列名;KEY .... 指的是索引

    删除唯一约束:ALTER TABLE 表名 DROP 约束名;

    删除索引;ALTER TABLE 表名 DROP 索引;

    删除外键约束ALTER TABLE 表名 DROP FOREIGN KEY 外键名


  • 删除主键约束:ALTER TABLE 列名 DROP PRIMARY KEY(不需要加主键名,因为主键是唯一的)

    SHOW INDEXES FROM 列名;KEY .... 指的是索引

    删除唯一约束:ALTER TABLE 表名 DROP 约束名;

    删除索引;ALTER TABLE 表名 DROP 索引;

    删除外键约束ALTER TABLE 表名 DROP FOREIGN KEY 外键名


  • MySQL修改数据表(添加和删除列)

    添加单列:ALTER TABLE 表名 ADD [COLUMN] 列名 列定义 [FIRST(添加这一列放在指定列前方)|AFTER 列名(添加这一列放在指定列的后面)]。(如果省略FIRST或者AFTER则插入表最后面)

    添加多列:ALTER TABLE 表名 ADD [COLUMN] (列名,列定义,...)

    1、添加的列需要放置在();


  • 1、对一个数据列建立的约束,称为列级约束;

    2、对多个数据列建立的约束,称为表级约束;

    3、列级约束既可以在列定义时声明,也可以在列定义后声明;

    4、表级约束只能在列定义后声明

    5、并不是所有约束都存在表级约束。如NOT NULL 和DEFAULT约束是不存在表级约束的。


  • 参照操作的含义是;在创建了外键约束后,继续添加的一些操作。

    创建了外键约束后,必须先在主表中插入记录

    若有一条记录没有写入成功,若存在自动编号的话,编号会往后调跳移位eg。1,3,4

    删除命令DELETE FROM 表名 WHERE 序号名 =几;

    在实际开发中很少使用物理的外键约束(只有innDB引擎支持),一般使用逻辑的外键约束(MyISAM)


  • AUTO_INCREMENT 自动编号 自动编号,必须与主键组合使用 默认情况下,起始值为1,每次增量为1

  • MySQL数据类型之日期时间型

    DATE:支持1000年1月1号——9999年12月31号。

    DATETIME:支持1000年1月1号0点——9999年12月31号23点59分59秒。

    TIMESTAMP:1970年1月1号0点——2037年。



  • MySQL默认端口号是多少        3306

    MySQL中的超级用户叫            root

    创建数据库       CREATE DATABASE

    修改数据库        ALTER  DATABASE

    删除数据库        DROP   DATABASE


  • 修改MySQL提示符(默认提示符MySQL>)

    方式一:登录客户端时通过参数指定。

    mysql  -uroot  -p123456  --prompt  提示符

    方式二:登录客户端后,通过prompt命令修改。

    mysql>prompt  提示符


举报

0/150
提交
取消
课程须知
要想学习本课程,你只需要知道数据库是个什么东东就足够了,是不是很easy?!
老师告诉你能学到什么?
1、MySQL安装与配置 2、数据类型 3、流程控制与运算符 4、DDL、DCL、DQL、DML 5、常用函数 6、表类型(存储引擎) 7、图形化工具
意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!