为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
与MySQL的零距离接触_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

与MySQL的零距离接触

平然 学生
难度入门
时长 8小时29分
  • DEFAULT 的用法

    查看全部
  • 唯一约束 {

      保证该条记录的唯一性

    }

    查看全部
  • 如果数据表中文字符很多,而且数据很多时那么查询运行的时间将会很多,所以有时必要将一些文字编程数字,方便查询。那么就需要建立外键,将文字转化成数字(如类型转化成品类1,2,3、、、)

    一、因此先创建一个数据表: GREAT TABLE good_cates FROM tdb_goods IF NOT EXISTS good_cate;

    二、然后查看总表里要更改的品类有多少个类型:SELECT good_cate FROM tdb_good GROUP BY good_cate;

    三、然后将查询到的品类写入到新建表中(查看表结构DESC tdb_goods_cates;):

    INSERT tdb_goods_cates(cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;

    四、最后根据分类表更新总表(多表更新)

    UPDATE table references SET col_namel={expr1|DEFAULT) [,col_name2={expr2 | DEFAULT])]...[WHERE where_condition]

    两张表的链接可以赋予别名也可以不赋予别名,即使用表的名称进行连接。或者还可以使用表的类型进行连接。

    如:UPDATE tdb_goods INNER JOIN(常用) tdb_goods_cateS ON(条件) goods_cate=cate_name SET(更新的值) goods_cate=cate.id.

    表的更新步骤为:

    一、创建表

    二、INSERT  SELECT 将记录写入数据表

    三、多表的更新

    多表更新:

    (1) UPDATE table_references SET col_name1={expr1| DEFAULT}[ ,  col_name2={expr2 | DEFAULT] ... [WHERE where_condition]

    (2) CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition,...] select_statement

    方法(2)要优于方法(1),方法(2)相当于将查询和插入结合在一起

    由于

    如:语句一:SELECT  brand_name FROM tdb_goods group by brand_name;

    语句二:

    CREAT TABLE tdb_goods_brands

    —>(

    —>brand_id SMALLINT UNSIGEDV PREMAY KEY AUTO_INCREMENT,

    —>brand_name VARCHAR(40) NOT NULL

    —>)

    —>SELECT brand_name FROM tdb_goods GROUP BY brand_name;

    用表的别名进行表的更新更方便

    如:UPDATE tdb_goods AS g INNERJOIN tdb_goods_brands AS b ON g.brand_name=b.brand_name 

    —>SET g.brand_name=b.brand_id;


    五、在更新表之后,由于表的结构可能还是字符型,因此先查看一下表的结构

    SHOW COLUMNS FROM tdb_goods;(或者DESC tdb_goods)

    六、然后更改结构,即将字符改成数字

    ALTER TABLEtdb_goods

    —>CHANGE goods_cate cate_id SMALLINT UNSIGNED NOT NULL,

    —>CAHNGE brand_name brand_id SMALLINT UNSIGNED NOT NULL;

    此时才是真正的对数据表减肥

    查看全部
  • 查看全部
    0 采集 收起 来源:多表更新

    2018-11-13

  • INSERT VALUE 和 INSERT SET 区别在于后者有子查询,而前者没有。

    INSERT [INTO] tbL_name [(col_name,...) SELECT...

    如:INSERT tdb_name(cate_name) SELECT goods_cates FROM tdb_goods GROUP BY goods_cate(分类);



    查看全部
  • prompthttps://img1.sycdn.imooc.com//5be53d16000136b604920309.jpg

    查看全部
  • set names gbk;使乱码文字正常显示
    查看全部
  • 2)另外还有子查询为:operand comparison_operator [NOT] IN (subquery)

    =ANY运算符与IN等效。

    !=ALL 或 <>ALL运符与NOT IN等效。

    如:SELECT good_id,goods_name,goods_price FROM tb1_goods WHERE goods_price>ANY(SELECT goods_price FROM tb1_name WHERE goods_cate = '超极本');  ——取到的是子查询里面的最小值

    SELECT good_id,goods_name,goods_price FROM tb1_goods WHERE goods_price=ANY(SELECT goods_price FROM tb1_name WHERE goods_cate = '超极本');  ——结果返回一定是错误的,与上节笔记所说一样

    SELECT good_id,goods_name,goods_price FROM tb1_goods WHERE goods_price != ANY(SELECT goods_price FROM tb1_name WHERE goods_cate = '超极本');  ——结果为除了子查询结果的其他所有结果

    3)如果子查询返回任何行, EXISTS将返回TRUE ;否则为FALSE(很少用到的)

    查看全部
  • 使用比较运算符的子查询=、>、<、>=、<=、<>、!=、<=>

    语法结构 operand comparison_operator subquery

    如:SELECT AVG(goods_price) FROM tb1_goods;  ——查找到的是平均价格。

    SELECT ROUND(AVG(goos_price),2) FROM tb1_goods;  ——这个是对查找到的平均数保留两位小数。

    假如平均值为:5636.36 , 那么接下来查找大于平均值的列:

    SELECT goods_id,goods_name,goods_price FROM tb1_goods WHERE goods_price>=5636.36;

    因为5636.36是说那个一条的结果,那么将两个语句合并后为:(子查询)

    SELECT goods_id,goods_name,goods_price FROM tb1_goods WHERE goods_price>=(SELECT ROUND(AVG(goods_price),2) FROM tb1_goods);

    如果要查找其他结果,如:SELECT goods_price FROM tb1_goods WHERE goods_cate='超级本'; ——查找超级本的价格

    SELECT * FROM tb1_goods WHERE goods_cate='超级本'; —— 查找超极本的所有列

    SELECT good_id,goods_name,goods_price FROM tb1_goods WHERE goods_price>(SELECT goods_price FROM tb1_name WHERE goods_cate = '超极本'); ——返回值为错误,原因是>后面的查找结果不是唯一的,而且并没有指定>的是具体那个数或者范围,那么:

    此时就需要用到:operand comparison_operator ANY (subquery)
    operand comparison_operator SOME (subquery) 
    operand comparison_operator ALL (subquery)

    其中,ANY, SOME, ALL的使用原则就是:

                       ANY      SOME      ALL

    > 和 >=       min        min       max

    < 和 <=       max       max       min

         =           任意值     任意值

    <> 和 !=                                 任意值

    查看全部
  • 子查询(Subquery)是指出现在其他SQL语句内的SELECT子句。

    例如:

    SELECT * FROM t1 WHERE col1= (SELECT col2 FROM t2);

    其中SELECT * FROM t1,称为Outer Query/Outer Statement 

    SELECT col2 FROM t2,称为SubQuery

    subquery:指的是我们所有知道SQL命令的统称

    (1)子查询指嵌套在查询内部,且必须始终出现在圆括号内。

    (2)子查询可以包含多个关键字或条件,如DISTINCT, GROUP BY, ORDER BY,LIMIT,函数等。

    (3)子查询的外层查询可以是:SELECT,INSERT,UPDATE,SET或DO

    (4)子查询可以返回标量、一行、一列或子查询。

    查看全部
  • SHOW COLUMNS FROM tb1_name;

    如果呈现出结果为乱码,则说明数据例如有问题,我们采用:

    SET NAMES gbk; ( 这样呈现的数据就是正常的,而且不影响客户端的数据,只是在MySQL中的呈现中不是乱码的文字。)



    查看全部
    1 采集 收起 来源:数据准备

    2018-11-08

  • float

    查看全部
  • char  varchar 

    查看全部
  • 数据的记录操作:

    增:INSERT

    更:UPDATE

    删:DELETE

    查:SELECT

    1.插入记录:

    INSERT [INTO] tb1_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFUALT},...),(...),...

    注意:如果col_name被省略,意味着所有的列都要依次被赋值,不可以省略;

    对于默认编号(AUTO_INCREMENT)的字段,使用NULL/DEFUALT进行插入;

    而且插入的记录是识别算术,函数和字符表达式的

    (2)INSERT [INTO]  tb1_name SET col1_name={expr | DEFAULT}, ...

    如:INSERT users2 SET username='***',password='****';

    说明与第一种不同之处在于:此方法可以使用子查询(SubQuery)

    (3)INSERT [INTO] tb1_name [(col_name, ...)] SELECT ...

    此方法可以讲查询结果插入到指定数据表中


    2.单表更新(当插入时,记录有错误或更改字段值):

    UPDATE [LOW_PRIORITY] [IGNORE] table-reference SET col_name={expr1| DEFUALT}, [col_name2={expr | DEFUALT}]...[WHERE where
    _condition]

    如果省略where条件的话就是所有条件都将更新:如UPDATE users SET age=age+id,sex=0; 然后select * FROM users查看结果。

    或者:UPDATE users SET age=age+10,WHERE id % 2 = 0;

    可看见:1.更新多条记录; 2. 也可用来修改命令。


    3.删除记录:

    单表删除:

    DELETE FROM tb1_name [WHERE where_condition]

    如:删除第六条记录:DELETE FROM users WHERE id = 6; 而后再添加记录:INSERT users VALUE(NULL,'111','222',33,NULL); 那么该条记录不会填充到第六条,而是以顺序填到最后一个

    条件表达式
    对记录进行过滤,如果没有指定WHERE子句,则显示所有记录。
    在WHERE表达式中,可以使用MySQL支持的函数或运算符。


    4.查找记录
    SELECT select expr [ select_expr ...]
    [
      FROM table references
      [WHERE where_condition]
      [GROUP BY {col_name | position} [ASC | DESC], ...] 
      [HAVING where condition]
      [ORDER BY {col_name | expr | position} [ASC | DESC],...]
      [LIMIT {[offset,] row-count | row_count OFFSET offset}]

    ]

    SELECT后面可以省略:如SELECT VERSION();/SELECT NOW();/SELECT 3+5;/SELECT id,username FROM users;/SELECT username,id FROM users;

    所以查询顺序影响结果的输出顺序!!!

    *表示所有的列

    可以在查询的列前面加上表名+.  如:SELECT users.id,user2.password FROM users;

    当列名称复杂时可以用别名:如 SELECT users.id AS usersid, users.username AS uname FROM users;(注意一下AS)

    所以查询的别名也影响输出结果的列名!!!

    查询结果分组:[GROUP BY {col_name | position} [ASC | DESC], ... ]

    ASC  升序;DESC  降序;

    如:SELECT sex FROM users GROUP BY sex/"位置"; 查看性别的分组结果。(一般指定名称就行)


    在GROUP BY 进行分组的时候,还可以进行设置分组条件:[HAVING where_condition]

    如:SELECT sex FROM users GROUP BY 1 HAVING age > 35; 这个语句错误,原因是sex里面没有age,所以更正为:SELECT sex,age FROM users GROUP BY 1 HAVING age > 35;或者采用聚合函数(max,min,sum等)  如 SELECT sex FROM users GROUP BY 1 HAVING count(id)>=2;


    还可以对查询分组的结果进行排序:

    [ORDER BY {col_name | expr | position} [ASC | DESC], ...]

    如:SELECT * FROM users ORDER BY id  age DESC; 默认是升序。

    除了返回记录的排序还可以对记录进行限制查询结果的数量:

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

    如:SELECT * FROM users LIMIT 2; 返回两条记录;

    SELECT * FROM users LIMIT 2,2;返回的是偏移值(索引号)为2的记录开始的两条记录(不管升序还是降序,第一条记录的索引号都是0);

    插入记录:
    INSERT [INTO] tbl_name SET col_name={expr | DEFAULT),...
    说明:与第一种方式的区别在于,此方法可以使用子查询(SubQuery)(他可以将查找的数据插入到指定数据表)

    如:INSERT test(username) SELECT username FROM users WHERE age >= 30; 查找username表里的age>=30的username,插入到test表中的username列————综合一点的


    查看全部
    1 采集 收起 来源:小结

    2018-12-25

  • int值范围

    查看全部

举报

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

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