mysql基本操作一览

前言

因为有些不常用的操作总是用完就忘,每次在使用时又要上网查,查到的还很难第一条就是适用的,所以自己总汇下mysql的一些基础操作,方便查阅也加深记忆。
这里介绍所有基础的表操作,包括,修改表结构,增删改查,表联结,分组等等。注意,大部分情况下只介绍写法,而不介绍功能。
关于存储过程、索引等会在以后介绍

创建表

CREATE TABLE [IF NOT EXISTS] customers
(
  cust_id      int       NOT NULL AUTO_INCREMENT,
  cust_name    char(50)  NOT NULL ,
  cust_address char(50)  NULL [DEFAULT 'SHANGHAI'],
  cust_city    char(50)  NULL ,
  cust_state   char(5)   NULL ,
  cust_zip     char(10)  NULL ,
  cust_country char(50)  NULL ,
  cust_contact char(50)  NULL ,
  cust_email   char(255) NULL ,
  PRIMARY KEY (cust_id)
) ENGINE=InnoDB;
  • PRIMARY KEY定义主键
    主键值必须唯一且非空,如果使用多个列,那么这些列的组合值必须唯一,创建多个列组成的主键,使用逗号进行分隔:
    PRIMARY KEY(order_num, order_item)
  • AUTO_INCREMENT
    每个表只允许一个AUTO_INCREMENT列,而且它必须被索引(主键自动建立索引)。你也可以自己手动插入一个值代替AUTO_INCREMENT给出的值,不过这样做会产生一些变化:Auto_Incerment的值将基于当前表最大的值开始计数加1.
    使用SELECT last_insert_id()可获得最后一个AUTO_INCREMENT的值。
  • 创建新表时,指定的表名必须不存在
  • NULL值就是没有值或者缺值,NULL代表允许有空值,NOT NULL代表不允许。
    注*:空字符串‘’不是NULL。可以作为有效的值插入。
  • 默认值DEFAULT
    使用默认值定义在NULL/NOT NULL的定义之后.
  • ENGINE(引擎)
    最后ENGINE指定的是mysql的引擎,如果不显示指定,mysql使用默认引擎,你可以更改mysql的配置修改默认引擎。以下是3个比较常见的引擎:
    1、InnoDB:可开的事务处理引擎,但不支持全文本搜索
    2、MyISAM:支持全文本搜索,但不支持事务管理。
    3、MEMORY:功能等同与MyISAM,但由于数据存储在内存中,速度很快(适合临时表)
    注*:使用一种引擎的表不能引用使用另一种引擎的表的外键。

修改表结构

为更新表定义,使用“ALTER TABLE 表名 ”语句

添加列

ALTER TABLE usertable
ADD user_age INT;

删除列

ALTER TABLE usertable
DROP COLUMN user_age;

定义外键

ALTER TABLE usertable 
ADD CONSTRAINT user_id FOREIGN KEY (order_id)#有错误,暂跳过

删除表

DROP TABLE usertable;

删除表没有确认,也不能撤销和恢复。

重命名表

RENAME TABLE usertable to usertable1;

使用逗号分隔可重命名多个表。

修改列类型及名称

#修改列类型,不更改名称
alter table usertable modify address char(40);
#或者这样,可以更改名称
alter table usertable change address myaddress char(40);

SELECT语句

子句顺序:

[SELECT] [FROM] [WHERE] [GROUP BY] [HAVING] [ORDER BY] [LIMIT];

where

#基本用法
select * from user where user_id=1;
#使用BETWEEN
select * from user where user_id [NOT] BETWEEN 1 AND 5;
#检查空值
select * from user where username IS NULL;
#组合判断条件,使用AND、OR,注意在组合时,AND的优先级是高于OR的
select * from user where username='jack' AND user_id=1;
#in操作符的使用
select * from user where user_id [NOT] IN (1,2);

order by

#可以指定显示排序,desc表示按username降序排序
select * from user order by username desc
#也可以指定两个参数,优先按第一个参数排序,当按第一个参数无法辨别顺序前
#后是(值相同),按第二个参数排序
select * from user order by username DESC,user_id ASC; 

limit

select * from user limit 0,5;

limit第一个参数是开始检索的行号,第二个是检索的行数。第一行是0。也可以只带一个参数指定要检索的行数

GROUP BY

分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算

SELECT user_id,count(*) as num from user group by user_id;

注*:

  • GROUP BY子句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供更细致的控制
  • 如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算。
  • GROUP BY子句中列出的每个列都必须是检索列或有效的表达式
  • 除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出<————注意这条
  • 如果分组列中具有NULL值,则NULL将作为一个分组返回。
  • GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前

过滤分组

select user_id,count(*) as num from usertable group by user_id HAVING count(*) >= 2;

WHERE在数组分组钱进行过滤,HAVING在数据分组后进行过滤(过滤分组)。WHERE排除的数据不会出现在分组中。

INSERT插入

#安全的插入方法:指定列名
INSERT INTO customers
(cust_id, cust_name, cust_address)
VALUES
(10001, 'Coyote Inc.', '200 Maple Lane');
#插入多行数据可以使用逗号分隔,例如:VALUES(...),(...);

还可以利用子查询来插入检索的数据

INSERT INTO customers
(cust_id, cust_name, cust_address)
SELECT
cust_id, cust_name, cust_address
FROM custnew;

这样会把所有从custnew检索到的行插入customers,Mysql不关心select返回的列名,只根据列出顺序匹配列。

UPDATE更新

UPDATE customers
SET cust_email = 'xie@qq.com',
    cust_name = 'xie'
WHERE cust_id = 1;

DELETE删除

DELETE FROM customers WHERE cust_id = 1006;

如果想删除表的所有行,不要使用DELETE(逐行删除)而是使用TRUNCATE TABLE(删除原来的表并重新创建一个表)

表联结

内联结

INNER JOIN

SELECT customers.cust_id, order.order_num FROM customers INNER JOIN orders ON customers.cust_id =orders.cust_id;

内联结选择表的笛卡尔积中符合ON后条件的行,如果联结了多个表,则从左至右依次联结。

左联结、右联结

LEFT OUTER JOIN、RIGHT OUTER JOIN

SELECT customers.cust_id, order.order_num FROM customers INNER JOIN orders ON customers.cust_id =orders.cust_id;

左联结额外选择左边表没有被选中的行。
右联结额外选择右边表没有被选中的行。

组合查询

UNION

SELECT vend_id,prod_id 
FROM products
WHERE prod_price <= 5
UNION
SELECT vend_id,prod_id 
FROM products
WHERE vend_id IN (1001,1002);

显示所有结果,但不包括重复的行

UNION ALL

包括重复的行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值