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

与MySQL的零距离接触

平然 学生
难度入门
时长 8小时29分
学习人数
综合评分9.67
950人评价 查看评价
9.9 内容实用
9.6 简洁易懂
9.5 逻辑清晰
  • 回顾
    查看全部
    0 采集 收起 来源:内容回顾

    2019-07-29

  • 修改数据库
    查看全部
    0 采集 收起 来源:操作数据库

    2019-07-29

  • SHOW WARNINGS 查看警告信息
    查看全部
    0 采集 收起 来源:操作数据库

    2019-07-29

  • 删除主键约束:DROP TABLE tbname DROP PRIMARY KEY

    删除唯一约束:DROP TABLE tbname DROP {INDEX|KEY} index_name

    删除外键约束:ALTER TABLE tbname DORP FEIEIGN KEY fk_symbol


    查看全部
  • 添加主键约束:ALTER TABLE tb_name ADD [CONSTRANINT [约束名]] PRIMARY KEY [index_type] (index_col_name,...)

    添加唯一约束:ALTER TABLE tb_name ADD [CONSTRANINT [约束名]] UNIQUE [INDEX|KEY] [index_name]  [index_type] (index_col_name,...)

    添加外键约束:ALTER TABLE tb_name ADD [CONSTRANINT [约束名]] FOREIGN KEY  [index_name]  (index_col_name,...) references_definition

    添加/删除默认约束: ALTER TBALE tb_name ALTER [COLUMN] col_name {SET DEFAULT 默认值 | DROP DEFAULT}


    查看全部
  • 添加单列 ALTER TABLE table_name ADD [COLUMN]  col_name column_definition[FIRST | AFTER col_name];

    添加多列: ALTER TABLE table_name ADD [COLUMN] (col_name,column_definitions ,...)

    删除单列 : ALTER TBALE table_name DROP [COLUMN] col_name;

    删除多列:ALTER TBALE table_name DROP [COLUMN] col_name,DROP column...;

    查看全部
  • default、not null只能是列级约束

    但是primary key、foreign key、unique可以都是

    查看全部
  • 实际开发中不怎么使用物理约束,因为只有innodb引擎支持,通常使用逻辑约束

    查看全部
  • 创建外键约束的要求

    查看全部
  • 约束分类:

    查看全部
  • 显示当前打开的数据库

    select database();


    浮点型数据类型

    FLOAT(8,2)表示数字长度为8,小数点后数字为2,小数点前为6位


    约束值类型

    create table tb_name(

    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

    gender ENUM('男','女’,'未知') DEFAULT '未知'

    );

    ENUM()为约束值,插入数据时,只允许括号里的值插入

    默认约束DEFAULT '值'

    创建默认约束后,当插入值时没有为对应字段赋值,就使用默认值填充


    建表后添加默认约束

    ALTER TABLE tb_name ALTER age SET DEFAULT 15;

    删除 ALTER TABLE tb_name ALTER 列名 DROP DEFAULT;


    建表

    create table table_name(

    id INT UNSIGNED NOT NULL,

    age TINYINT UNSIGNED,

    column_name data_type

    )

    NOT NULL非空约束

    最后一个字段不需要逗号 

    UNSIGNED表示值不允许出现负数


    在某一库下查询所有表

    select tables from mysql;


    向表中插入数据

    insert into tb_name (字段1,字段2) value(值1,值2)

    当有n个字段时,插入的值也是n个,可以不要(字段1,字段2)

    有非空约束的字段插入时必须有值


    自定增长类型

    AUTO_INCREMENT

    自动编号,必须和主键组合使用,起始值为1,增量为1

    插入数据时,可以不赋值,注意,给自动增长的列赋值后,再次增长

    就从赋值后的int值开始加1


    主键约束PRIMARY KEY

    主键保证了数据的唯一性,主键自带非空约束

    create table tb_name(

    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

    username VARCHAR(20) NOT NULL

    );

    PRIMARY KEY是主键的关键字

    当添加自动增长后,那么对应字段就不需要再赋值


    建表时没有创建主键,可以创完再加

    ALTER TABLE tb_name ADD CONSTRAINT pk_name PRIMARY KEY (列);

    删除:ALTER TABLE tb_name DROP PRIMARY KEY;


    唯一约束UNIQUE KEY

    唯一约束可以为空,且可以有多个

    注意的是,如果字段中有一个空字段,那么再此插入时,对应字段就

    不可以再为空

    建表后再添加唯一约束

    ALTER TABLE tb_name ADD UNIQUE (username);

    删除唯一约束

    删除前需要查看索引的名称show index from tb_name\G;

    删除约束ALTER TABLE tb_name DROP INDEX 列名


    外键约束

    子表必须和父表的使用相同的引擎(InnoDB)

    子表的参照列必须和父表数据类型、是否有符号相同

    外键列和参照列必须要有索引

    例如:主表建表时id字段为   id INT UNSIGNED,

    子标建立外键

    create table tb_name (

    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

    name VARCHAR(20) NOT NULL,

    zid INT UNSIGNED,

    FOREIGN KEY (zid)REFERENCES 父表(id) ON DELETE CASCADE

    );

    参照父表创建的子表参照列会自动添加索引

    ON DELETE 值       表示子表参照的操作的类型,值可以是CASCADE,

    表示父表删除或更新记录时,子表自动执行相应操作,RESTRICT表示拒绝对

    父表的删除或者更新,SET NULL表示父表记录删除后,子表的外键列为空,其

    他值不删除


    建表后添加外键约束

    ALTER TABLE tb_name ADD FOREIGN KEY (子表列) REFERENCES (参照列)

    删除ALTER TABLE tb_name DROP FOREIGN KEY 外键名;


    为外键表插入数据

    在子标插入记录前,需要先在父表插入记录,子标的外键列可以不插入记录(前

    提是建表时没有非空约束),想要插入记录,子表的外键列元素必须在父表中

    有对应的值,否则不允许插入


    查看索引

    show indexes from tb_name\G;

    Column_name 表示索引创建的位置


    查看建表时的信息

    show create table tb_name;


    向表插入列

    alter table tb_name add 列名 数据类型 符号信息 是否为空 AFTER 添

    加在哪列之后

    如果没有AFTER和列值,就直接添加到最后一列

    alter table tb_name add 列名 数据类型 符号信息 是否为空 FIRST

    表示添加的列在所有列的前端


    删除列

    alter table tb_name drop 列名


    修改数据表列的位置

    ALTER TABLE tb_name MODIFY 列名 列的定义 FIRST;


    修改列数据类型CHANGE

    ALTER TABLE tb_name CHANGE 列名 数据类型

    及修改数据类型又修改字段名

    ALTER TABLE tb_name CHANGE 旧列名 新列名 数据类型


    修改表的名字

    ALTER TABLE tb_name RENAME new_tbname;


    update语句

    省略条件将修改所有记录

    update tb_name set age=age+5;更新所有的列,给年龄加5

    带条件的更新语句

    update tb_name set age=age-id where id%2=0;

    将id为偶数的记录年龄修改为 年龄减去id


    delete语句

    delete from tb_name where 条件


    分组 group by

    select 列名 from tb_name group by 列名;

    带有条件的分组

    select 列名 from tb_name group by having 条件;


    为记录排序

    select * from tb_name order by 列名

    默认为升序

    倒序select * from tb_name order by 列名 desc;


    限制查询条数的语句

    select * from tb_name limit 数量;

    当需要查询中间的语句时,第一条索引是从0开始的

    select * from tb_name limit 2,2;

    假设id从1开始,此句返回id为3和4的记录


    查询平均值

    select AVG(列名) from tb_name;


    做四舍五入查询

    select round(带有小数的数,需要保留的位数) from ta_name;


    子查询

    select * from tb_name where money>= (select avg(money) from tb_name);

    含义是查询价格列大于等于平均价格的列


    当子查询返回多个结果集时,作比较运算系统不知道该和哪个比较

    any、some表示符合任意一个就行,all表示要符合所有结果

    select * from tb_name where 列名1 > any (select 列名1 from tb_name where="超级本");

    子查询返回的列一定要和比较的列相同


    insert select语句

    insert 子表名(列名) select goods_cate from tb_goods group by goods_cate;


    多表连接

    update 需要更改的表 inner join 参照表 on 需要更新的列=参照表的列

     set 需要更新的列=参照表的对应值;

    例update tb_goods inner join tb_goods_cates on goods_cate=cate_name

    set goods_cate=cate_id;


    在建表时就插入数据

    create table tb_goods_brands(

    brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

    brand_name VARCHAR(40) NOT NULL)

    select brand_name from tb_goods group by brand_name;


    当连接其他表后,商品表原先的varchar数据类型需要改成int类型

    alter table tb_name 

    change 旧列名 新列名 新列名的数据类型


    内连接(仅显示符合条件的连接记录)可以使用JOIN\INNER JOIN

    select 需要显示的字段名 from 表名 inner join 参照表名 on 显示列=参照列

    select goods_id,goods_name,cate_name from tb_goods inner join 

    tb_goods_cates on tb_goods.cate_id = tb_goods_cates.cate_id;

    内连接显示的是两张表中都符合条件的记录


    左外连接显示左边表中所有记录和右边表中符合条件的记录

    select 需要显示的字段名 from 表名 left join 参照表名 on 显示列=参照列

    左外连接和右外连接中没有的字段就显示NULL


    右外连接显示左边表符合条件的记录和右边表的所有记录

    select 需要显示的字段名 from 表名 right join 参照表名 on 显示列=参照列


    一张表做外连接,需要给一张表起两哥个别名

    select a.type_id,a.type_name,b.type_name from tb_name as a left join

    tb_name as b on a.parent_id = b.type_id;


    删除表中重复的记录

    1先查询出表中哪些记录是重复的

    select goods_id,goods_name from tb_goods group by goods_name having

     count(goods_name)>1;

    2删除表中重复的记录,保留id最小的

    delete t1 from tb_goods as t1 left join (select goods_id,goods_name

     from tb_goods group by goods_name having count(goods_name)>1) as

     t2 on t1.goods_name = t2.goods_name where t1.goods_id>t2.goods_id;


    字符函数

    1、CONCAT() 字符连接

    假设姓氏列和名字列封开,想要显示姓名

    SELECT CONCAT(姓列,名列) as name from tb_name;

    2、CONCAT_WS() 使用指定符号分割字符

    最少要有三个参数,第一个指定风格符

    SELECT CONCAT_WS('-','a','b');

    假设有省-市-区散列需要按格式分

    SELECT CONCAT_WS('-',省,市,区)

    3、数字格式化

    SELECT FORMAT(123456.789,2);

    结果:123,456,79

    4、将字符转换为大小写

    SELECT LOWER('MySQL');

    结果:mysql

    select upper('abCde');

    结果:ABCDE

    5、从左右截取字符串

    select left('mysql',2);

    结果:my

    select right('mysql',2);

    结果:ql

    7、获取字符串长度

    select length('MySQL');

    结果:5

    8、删除前边空格,后边空格和所有空格

    前select ltrim('  abc'); 结果:abc

    后select rtrim('abc  '); 结果:abc__

    所有select trim(' abc '); 结果:abc

    除了删除空格,还可以删除指定字符

    前 select trim(leading '?' from '???mysql???');

    结果:mysql???

    后 select trim(trailing '?' from '???mysql???');

    结果:???mysql

    所有 select trim(both '?' from '???mysql???');

    结果:mysql

    9、替换字符串中的字符

    select replace('??my??sql??','?','');

    结果:mysql

    10、截取字符串

    select substring('mysql',2,2) 结果:ys

    mysql字符串的下标从1开始,如果是('mysql',-2,2),表示倒着截取


    通配符和模式匹配的用法

    select * from tb_name where 列名 (not)like '%a';

    select * from tb_name where 列名 (not)like '_a';

    当要查询的列中带有%时:like '%1%%' escape '1';

    escape表示'1'后面不是通配符


    数值运算符和函数

    1、CEIL()

    select CEIL(1.01); 结果:2

    2、FLOOR()

    select FLOOR(1.99); 结果:1

    3、POWER 幂运算

    select POWER (3,2); 结果:9

    4、ROUND() 四舍五入

    select ROUND(3.1415,2); 结果:3.14

    5、TRUNCATE() 数字截取

    select TRUNCATE()


    比较运算符

    select 35 between 10 and 40; 返回值:1

    意为35在10和40之间么

    select ‘A’ in(‘A’,‘B’,‘C’,‘D’); 返回值:1

    意为A是不是四选项中的一个

    select ‘a’ in ‘a’ 返回值:1

    意为a是不是a


    日期时间函数

    select now(); 返回值:yyyy-MM-dd HH:mm:ss

    日期函数

    select curdate();

    时间函数

    select curtime();

    时间差函数

    select datediff('2013-3-12','2024-3-12');


    求和 sum()

    求最大值 max()

    求最小值 min()

    求总数 count()

    求平均值 avg()


    修改mysql密码

    set password = password();




















    查看全部
    0 采集 收起 来源:回顾和概述

    2019-07-29

  • GROUP BY的规定:

    1、GROUP BY 后面可以包含多个列,这就是嵌套。

    2、如果GROUP BY进行了嵌套,数据将在最后一个分组上进行汇总。

    3、GROUP BY子句中列出来的每个列必须是检索列或有效的表达式(但不能是聚集函数),如果在SELECT中使用了表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。

    4、除了聚集语句外,SELECT语句中的每一个列都必须在GROUP BY子句中给出。

    5、如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多个NULL,它们将作为一个分组返回。

    6、GROUP BY子句必须在WHERE 子句之后,ORDER BY 子句之前。


    查看全部
    0 采集 收起 来源:多表删除

    2019-07-28

举报

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

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

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