Datawhale-MySQL-任务三

1.MySQL表数据类型:

  • MySQL中定义数据字段的类型对你数据库的优化是非常重要的。
  • MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
  • 具体类型介绍见菜鸟教程 | MySQL数据类型

2.用SQL语句创建表

创建方式:

一般有两种创建表的方法:
 多数 DBMS都具有交互式创建和管理数据库表的工具;
 表也可以直接用 SQL语句操纵。
需要注意的是,使用交互式工具时实际上就是使用 SQL语句。这些语句不是用户编写的,界面工具会自动生成并执行相应的 SQL语句(更改已有的表时也是这样)。

设定列类型,大小,约束

利用CREATE TABLE创建表,必须给出下列信息:

  • 新表的名字,在关键字CREATE TABLE之后给出;
  • 表列的名字和定义,用逗号分隔;
  • 有的 DBMS还要求指定表的位置。
设定主键

一张表只能有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据,不能重复。主键本身一定不为空,且不允许重复
设定主键的三种方式:
① 创建表的时候在字段后面使用 primary key关键字;

create table my_default(
id int PRIMARY KEY,--使用关键字
name VARCHAR(20) not null unique key ,
gender varchar(4) DEFAULT '男'
)charset utf8;

② 在创建表的时候,在所有的字段之后使用 primary key(主键的字段 列表)来创建主键(如果有多个字段作为主键,称之为复合主键);

create table my_pri(
number char(10),
course char(10),
score TINYINT,
PRIMARY KEY(number,course)--复合主键
)charset utf8;

③ 创建表之后,为表追加主键。有两种方式,第一为修改表字段属性;第二直接追加。
方式一:

alter TABLE my_pri MODIFY number char(11) PRIMARY KEY;

方式二:

alter table table_name add primary key(column) ;

alter TABLE my_pri add PRIMARY KEY(number,course);--增加复合主键

alter table my_pri add CONSTRAINT pk_score PRIMARY KEY(score)--使用关键字CONSTRAINT 且指定主键名字pk_score 

alter table my_pri add CONSTRAINT  PRIMARY KEY(score)--使用关键字CONSTRAINT 且使用默认名字 

删除主键:

alter table my_default drop PRIMARY KEY; -- 删除主键使不需要根据主键名字删除,因为只有一个主键

3.用SQL语句向表中添加数据

语句解释

MySQL 表中使用 INSERT INTO SQL语句来插入数据。

多种添加方式(指定列名;不指定列名)

插入数据有三种方式:

  • 插入完整的行;
  • 插入行的一部分(指定列名);
  • 插入某些查询的结果(INSERT SELECT)。
    注:不指定列名插入高度依赖于表中列的定义次序,还依赖于其容易获得的次序信息。即使可以得到这种次序信息,也不能保证各列在下一次表结构变动后保持完全相同的次序。因此,编写依赖于特定列次序的 SQL语句是很不安全的,这样做迟早会出问题。因此指定列名插入,VALUES必须以其指定的次序匹配指定的列名,不一定按各列出现在表中的实际次序。其优点是,即使表的结构改变,这条INSERT语句仍然能正确工作。

4.用SQL语句删除表

DELETE

DELETE FROM table_name [WHERE Clause]

  • 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
  • 你可以在 WHERE 子句中指定任何条件
  • 你可以在单个表中一次性删除记录。
DROP

DROP TABLE table_name

TRUNCATE

TRUNCATE table_name

不同方式的区别

1.drop和delete只是删除表的数据(定义),drop语句将删除表的结构、被依赖的约束(constrain)、触发器 (trigger)、索引(index);依赖于该表的存储过程/函数将保留,但是变为invalid状态。

2.delete语句是DML语言,这个操作会放在rollback segement中,事物提交后才生效;如果有相应的触发器(trigger),执行的时候将被触发。truncate、drop是DDL语言,操作后即 生效,原数据不会放到rollback中,不能回滚,操作不会触发trigger。

3.delete语句不影响表所占用的extent、高水线(high watermark)保持原位置不动。drop语句将表所占用的空间全部释放。truncate语句缺省情况下将空间释放到minextents的 extent,除非使用reuse storage。truncate会将高水线复位(回到最初)。

4.效率方面:drop > truncate > delete。

5.安全性:小心使用drop与truncate,尤其是在 没有备份的时候,想删除部分数据可使用delete需要带上where子句,回滚段要足够大,想删除表可以用drop,想保留表只是想删除表的所有数据、 如果跟事物无关可以使用truncate,如果和事物有关、又或者想触发 trigger,还是用delete,如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入、插入数据。

6.delete是DML语句,不会自动提交。drop/truncate都是DDL语句,执行后会自动提交。

7、drop一般用于删除整体性数据 如表,模式,索引,视图,完整性限制等;delete用于删除局部性数据 如表中的某一元组。

8、DROP把表结构都删了;DELETE只是把数据清掉

9.当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录时(always with a WHERE clause), 用 delete.

5.用SQL语句修改表

修改列名

ALTER TABLE 表名 CHANGE 列名 新列名 列类型。

修改表中数据
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
删除行

从一个表中删除(去掉)数据,使用DELETE语句。有两种使用DELETE的方式:

  • 从表中删除特定的行;
  • 从表中删除所有行。
    注:不要省略 WHERE 子句:在使用 DELETE时一定要细心。因为稍不注意,就会错误地删除表中所有行。如果想从表中删除所有行,不要使用DELETE。可使用TRUNCATE TABLE语句,它完成相同的工作,而速度更快(因为不记录数据的变动)。
新建列

alter table 表名 add column 列名 列类型;

新建行

参考第三部分添加数据

6.作业

项目三

超过5名学生的课(难度:简单)
创建如下所示的courses 表 ,有: student (学生) 和 class (课程)。
例如,表:

studentclass
AMath
BEnglish
CMath
DBiology
EMath
FComputer
GMath
HMath
IMath
AMath

编写一个 SQL 查询,列出所有超过或等于5名学生的课。
应该输出:

class
Math

Note:
学生在每个课中不应被重复计算。


作业代码:
在这里插入图片描述

项目四

交换工资(难度:简单)
创建一个 salary表,如下所示,有m=男性 和 f=女性的值 。
例如:

idnamesexsalary
1Am2500
2Bf1500
3Cm5500
4Df500

交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。要求使用一个更新查询,并且没有中间临时表。
运行你所编写的查询语句之后,将会得到以下表:

idnamesexsalary
1Af2500
2Bm1500
3Cf5500
4Dm500

作业代码:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验目的 熟悉MySQL环境的使用,掌握在MySQL中创建数据库和表的方法,理解MySQL支持的数据类型、数据完整性在MySQL下的表现形式,练习MySQL数据库服务器的使用,练习CREATE TABLE,SHOW TABLES,DESCRIBE TABLE,ALTER TABLE,DROP TABLE语句的操作方法。 实验内容: 【实验1-1】MySQL的安装与配置。 参见4.1节内容,完成MySQL数据库的安装与配置。 【实验1-2】创建“汽车用品网上商城系统”数据库。 用CREATE DATABASE语句创建Shopping数据库,或者通过MySQL Workbench图形化工具创建Shopping数据库。 【实验1-3】在Shopping数据库下,参见3.5节,创建表3-4~表3-11的八个表。 可以使用CREATE TABLE语句,也可以用MySQL Workbench创建表。 【实验1-4】使用SHOW、DESCRIBE语句查看表。 【实验1-5】使用ALTER TABLE、RENAME TABLE语句管理表。 【实验1-6】使用DROP TABLE语句删除表,也可以使用MySQL Workbench删除表。 (注意:删除前最好对已经创建的表进行复制。) 【实验1-7】连接、断开MySQL服务器,启动、停止MySQL服务器。 【实验1-8】使用SHOW DATABASE、USE DATABASE、DROP DATABASE语句管理“网上商城系统” Shopping数据库。 实验训练2:数据查询操作 请到电脑端查看 实验目的: 基于实验1创建的汽车用品网上商城数据库Shopping,理解MySQL运算符、函数、谓词,练习Select语句的操作方法。 实验内容: 1.单表查询 【实验2.1】字段查询 (1)查询商品名称为“挡风玻璃”的商品信息。 分析:商品信息存在于商品表,而且商品表中包含商品名称此被查询信息,因此这是只需要涉及一个表就可以完成简单单表查询。 (2)查询ID为1的订单。 分析:所有的订单信息存在于订单表中,而且订单用户ID也存在于此表中,因此这是只需要查询订单表就可以完成的查询。 【实验2.2】多条件查询 查询所有促销的价格小于1000的商品信息。 分析:此查询过程包含两个条件,第一个是是否促销,第二个是价格,在商品表中均有此信息,因此这是一个多重条件的查询。 【实验2.3】DISTINCT (1)查询所有对商品ID为1的商品发表过评论的用户ID。 分析:条件和查询对象存在于评论表中,对此商品发表过评论的用户不止一个,而且一个用户可以对此商品发表多个评论,因此,结果需要进行去重,这里使用DISTINCT实现。 (2)查询此汽车用品网上商城会员的创建时间段,1年为一段。 分析:通过用户表可以完成查询,每年可能包含多个会员,如果把此表中的创建年份都列出来会有重复,因此使用DISTINCT去重。 【实验2.4】ORDER BY (1)查询类别ID为1的所有商品,结果按照商品ID降序排列。 分析:从商品表中可以查询出所有类别ID为1的商品信息,结果按照商品ID的降序排列,因此使用ORDER BY语句,降序使用DESC关键字。 (2)查询今年新增的所有会员,结果按照用户名字排序。 分析:在用户表中可以完成查询,创建日期条件设置为今年,此处使用语句ORDER BY。 【实验2.5】GROUP BY (1)查询每个用户的消费总金额(所有订单)。 分析:订单表中包含每个订单的订单总价和用户ID。现在需要将每个用户的所有订单提取出来分为一类,通过SUM()函数取得总金额。此处使用GROUP BY语句和SUM()函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值