Mysql学习和使用的一些心得体会

一些简单的概念:
1.DBMS表示数据库管理系统,与数据库是两个概念,类似于管理UI和服务器。数据库是由数据库管理系统创建而来。
2.数据库内容主要包括:databse,table,Colum,row,Primary Key等。
3.列:每一列要求有数据类型
4.行:每一行代表一个record,不允许有重复的record
5.主键:主键必须唯一,不可重复使用(已使用过后删除也不能再用),不许为空,不允许修改或更新。

Mysql workbench安装指导:
https://blog.csdn.net/weixin_34369789/article/details/113127138?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161907199616780274165645%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161907199616780274165645&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-113127138.first_rank_v2_pc_rank_v29&utm_term=mysql+workbench%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B

最简单的命令
查询最起码需要2个条件,从哪里查,查什么。
1.SELECT * FROM table
选择某一列或多列。
2.SELECT DISTINCT XX FROM table
去重复选择某一列,具有唯一性。DISTINCT必须位于列的前面。不能部分使用DISTINCT,如果DISTINCT后面接了多个列的话,所有行都会被检索出来。
3. SELECT * FROM table LIMIT 3
只检索前3行,不同的数据库拥有不同的语法,大概包括TOP,FETCH FIRST 5 ROWS ONLY,ROWNUM<=5等
4. SELECT * FROM table LIMIT 3 OFFSET 4
从第4行起(从0行开始)返回3行数据,简化版为SELECT * FROM table LIMIT 4,3 注意数字顺序
5.SELECT语句的顺序(语句中关键字的前后顺序,否则会报错):
1.SELECT
2.FROM
3.WHERE
4.GROUP BY
5.HAVEING
6.ORDER BY

排序
1.排序使用order by子句,order by必须位于命令的最后,后面接上列,可以是SELECT的列,也可以不是SELECT的列
SELECT * FROM table ORDER BY Colum
2.可以按多个列排序,先按照第一个列,再按照第二个列(姓氏一样时按照名字排序)。
3.可以按照列的位置排序,ORDER BY 2,3 意思时先按照第二列排,再按照第三列排
4.降序排序使用DESC关键字,此关键字只作用于直接位于其前面的列名,如果多列需要降序,则每一列都需要加关键字

过滤条件
1.过滤条件用WHERE字段
SELECT * FROM table WHERE xx=xx
2.WHERE操作符:
=,<>,!=,<=,!<,BETWEEN AND,IS NULL等
3.AND在语句中的优先级比OR更高
4.IN和OR可以实现相同过滤,但IN更有优势
5.尽量使用IN,NOT,可以优化语句

通配符
1.通配符只能搜索字符串
2. select * from products where prod_name like ‘fish%’
3.通配符%不能匹配NULL
4._只匹配一个字符,%匹配多个字符
5.不要过度使用通配符,会降低检索速度

对表中数据进行处理

  1. select prod_id,quantity,item_price,quantityitem_price as expanded_pric from orderitems where order_num=20008
    这句话的意思是列出order_num为20008中的prod_id,quantity,item_price,并计算quantity
    item_price赋值给expanded_pric,然后列出来
    2.拼接字符串直接使用+,去掉空格使用TRIM函数,RTRIM去掉右空格,LTRIM去掉左空格。

函数
1.字符串大写用UPPER()
select vend_name,upper(vend_name) as vend_name_upcase
from vendors order by vend_name
2.文本处理函数:
LEFT(),LENGTH(),LOWER(),LTRIM(),RIGHT(),RTRIM(),SOUNDEX(),UPPER()等;
3.日期处理函数:
DATE(),DATEPART(),YEAR()等
select order_num from orders where month(order_date)=5
4.数值处理函数
ABS() 返回绝对值
COS()
EXP()
PI()
SIN()
SQRT()
TAN()

聚集函数
1.AVG() 返回列平均值
COUNT() 返回列行数
MAX() 返回列最大值
MIN() 返回列最小值
SUM() 返回列的和

select avg(prod_price) as prod_price_avg from products where vend_id = ‘DLL01’

select count() as prod_num from products
count()函数会忽略列中值为空的行,但是如果括号中为
则不忽略

select max(prod_price) as prod_max from products
max()函数处理数据时会返回最大的一行,但处理文本时会返回最后一行
min()函数则相反

select sum(quantity*item_price) as total_price from orderitems where order_num = 20005
返回订单的总价

数据分组

  1. select vend_id,count(*) as vend_count from products group by vend_id
    Group by中,select中的每一列必须在group by中也要给出。Group by必须在where之后,order by之前

Having和where的作用很像,只是where用户过滤行,having用于过滤分组。Where用在分组之前,having用在分组之后。

2.筛选数量大于等于3的order_num编号
select order_num,count(*) as items from orderitems group by order_num having items>=3

子查询
1.子查询适用于查询多个表里的不同信息,使用WHERE XXX IN(子查询语句)来完成
select cust_name,cust_contact from customers where cust_id in (
select cust_id from orders where order_num in (
SELECT order_num from orderitems where prod_id=‘RGAN01’))

不要嵌套太多子查询以免影响性能

联结查询
和子查询有相同的效果,主要用到表名.列名的方式
select cust_name,cust_contact
from customers,orders,orderitems
where orderitems.order_num=orders.order_num and prod_id=‘RGAN01’ and orders.cust_id=customers.cust_id

组合查询
组合查询使用UNION操作符,把两个SELECT句子中间使用UNION连起来就行;
UNION操作符操作的两个表必须

插入数据
插入使用INSERT操作符,保证每行都有数据,没有数据的记得插入NULL
insert into customers values (‘1000000006’,‘Toy Land’,‘123 Any Street’,‘New York’,‘NY’,‘11111’,‘USA’,NULL,NULL)

更安全的做法是
Insert into xx()values(),在前面的括号里标注列名,后面的括号里标注值,对于列名可以为空的或者有默认值的列,可以不在前面括号里面标注,后面也可以不用给值。

插入检索出的值,可以插入多行,取决于select中取出了多少行
Insert into xxx() select xxx from xxx

复制表:
Create table xxx as select * from xxxx

更新删除数据
更新数据使用UPDATE操作符,使用UPDATE语句一定要注意WHERE语句的使用,否则就会更新掉所有行。DELETE语句是删除行,所以不需要匹配列名。在使用删除或更新语句前,最好先使用select语句确保操作的数据是准确的。
更新一列:
update customers set cust_email = ‘297169807@qq.com’ where cust_id = ‘1000000005’
更新多列:
update customers set cust_email = ‘297169807@qq.com’,cust_contact=’Sam Roberts’ where cust_id = ‘1000000006’
删除行:
DELETE FROM customers where cust_id = ‘1000000006’

创建和更新删除表
创建表使用
create table XXX(
列名 数据类型 是否为空
XXX CHAR(10) NOT NULL,
XXX CHAR(50) NOT NULL DEFAULT 1
)
更新表,不建议使用更新表,最好创建表时考虑到需求
ALTER TABLE XXX ADD 列名 数据类型
ALTER TABLE XXX DELETE COLNUM 列名
删除表:
DROP TABLE XXX

创建视图
视图可以理解为一个虚拟的表,不是实际存在数据库中的,当从不同的表中取不同的列使用时,可以先创建视图,然后再使用视图,可以简化语句并且复用。使用create view xxx as+select语句就行。以后使用视图的时候直接select * from xxx即可。
Create view venderlocation as select RTRIM(vend_name)+’(’+RTRIM(vend_country)+’)’ as vend_title from venders

事务处理
事务处理的语句必须全部执行或全部不执行
start transaction;
delete from orderitems where order_num =20005;
delete from orders where order_num=20005;
commit;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值