课程是国外Mosh Hamedani 的付费Mysql课程。 该课程干货满满,没有废话。并且授课方式目的性强,适合各个基础的学生。 课程在B站有搬运,大家动动手就可以找到~~ 希望能帮助到各位同学
本章介绍 数据库的操作,包含
本节介绍 sql中 表示表属性的一些关键字
varchar: variable character 可变字符,根据实际字符长短调整大小,参数为最大长度。
PK:主键
NN:非空
UQ:唯一
BIN:二进制
AI:自增
insert into customers
values(default,'john','smith','1991-01-01','110','haha Road','suining','sichuan');
insert into customers( first_name,last_name,birth_date,address,city,state)
values('quantum','jar','1996-06-30','here','there','there again')
若正确插入~,mysql在控制台显示,有一行受影响。
insert into shippers(name)
values('顺丰'),('韵达'),('天天');
向products表中插入3行数据
首先我们观察表的属性
id 是自增的,不用管
unit_price 是 decimal (4,2) 意思是最大长度为4位(包含小数),小数为2位,超过精读会被截断
insert into products(name,quantity_in_stock,unit_price)
values('product1',50,99.23),//正确
values('product1',50,100.23)//报错 单价超过范围
这里用插入一个订单来解释什么是有层次关系的表,(实际上是父子关系)。
当向orders中插入一个新order时,我们知道订单的具体物品和顾客是以编号的形势分别对应在order_items和customers表中。
insert into orders(customer_id,order_date,status)
values(1,'2020-06-30',1);//这里完成订单的插入,顾客是已经有的1号,order_id为自增,所以我们调用last_insert_id 来获取该值
insert into order_items
values(last_insert_id(),1,1,2.50);
create table order_archived as
select * from orders
请注意这里实际上是把 select * from orders 返回的结果集作为参数传递给了order_archived,常规的方法是:
create table table_name (
id int 列属性1 列属性2//这里为列添加了属性
.....
)
所以复制得到的表中虽然数据一样,但是会没有主键,非空,自增等属性,需要自己手动添加!!!!
insert into order_archived
select * from orders
where order_date >= '2020-01-01';//选择2020年之后的订单
用 create table as…语法创建一个新表 paid_invoices ,表中需要有cliend的name,只包含付过款的invoice。
select * from //这里偷懒了,这里把需要的列写出来就行了。
invoices i
join clients c
on i.client_id = c.client_id
where i.payment_date is not null
update invoices
set payment_date = '2020--07-14' ,payment_total = 10
where invoice_id =1;
略
设想一个例子,我们在前端提供了一个用户名的输入框,这个框需要一个用户的名字,我们通过比对数据库来得到这个用户的id,并使用这个id来操作数据。
update invoices
set payment_total = invoice_total *0.5,
payment_date = due_date
where client_id =
(Select client_id
from clients
where name ='Myworks')//括号内就是子查询
in short: 子查询就是父查询利用子查询的返回值进一步查询。】
delete from invoices
where invoice_id = 1;
DML结束