小白快速学MySQL

使用MySQL

/*返回可用数据库的列表*/
SHOW DATABASES;
/*使用sell这个数据库*/
USE sell;
/*返回当前数据库中可用的列表*/
SHOW TABLES;
/*返回order_detail表中字段的信息*/
SHOW COLUMNS FROM order_detail;
/*作用同上*/
DESC order_detail;
/*返回order_detail这个表创建的sql语句*/
SHOW CREATE TABLE order_detail;

创建和操纵表

/*AUTO_INCREMENT关键字表示自增,每个表只允许有一个字段被该关键词修饰,且必须被索引.SELECT last_insert_id()该语句返回最后一个AUTO_INCREMENT值.
DEFAULT关键字给字段赋默认值
PRIMARY KEY()主键可以采用单个字段,也可以采用多个字段组合,但是必须保证唯一
ENGINE引擎类型(根据需求选用):
InnoDB(可靠的事务处理,但是不支持全文搜索)
MyISAM(支持全文搜索,但是不支持事务处理)
MEMORY(功能等同于MyISAM,但是数据存储在内存中,速度很快,适用于临时表)
*/
CREATE TABLE product_category (
  category_id INT NOT NULL AUTO_INCREMENT,
  category_name VARCHAR(128) NOT NULL,
  category_type INT NOT NULL,
  create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY(category_id)
)ENGINE=InnoDB;
/*更新表,增加一列*/
ALTER TABLE product_category ADD COLUMN category_icon VARCHAR(248) NOT NULL;
/*修改字段信息*/
ALTER TABLE product_category CHANGE COLUMN category_icon category_stock VARCHAR(255);
/*删除一列*/
ALTER TABLE product_category DROP COLUMN category_icon;
/*设置索引*/
ALTER TABLE product_category ADD INDEX (category_icon);
/*删除索引*/
ALTER TABLE product_category DROP INDEX category_icon;
/*设置unique值*/
ALTER TABLE product_category ADD UNIQUE(category_icon);
/*删除整个表格*/
DROP TABLE product_category;
/*重命名表格*/
RENAME TABLE product_category TO category;

检索数据

/*从order_detail表中检索出detail_id字段的所有值*/
/*注意:(1)SQL语句不区分大小写;(2)在处理SQL语句时,空格会被忽略*/
SELECT detail_id FROM order_detail;
/*检索多个字段*/
SELECT detail_id,product_id,product_name FROM order_detail;
/*检索所有列,但是最好只检索自己需要的列,使用*检索出不必要的列会降低检索和应用程序的性能*/
SELECT * FROM order_detail;
/*只返回字段中不同的值,DISTINCT关键字必须放在字段前面,且应用于所有列,不能部分应用*/
SELECT DISTINCT product_price FROM order_detail;
/*限制检索出来的结果最多只显示5行,[0,5)*/
SELECT detail_id FROM order_detail LIMIT 5;
/*只显示[5,10),第一个数是开始位置,第二个是检索行数*/
SELECT detail_id FROM order_detail LIMIT 5,5;
/*从行3开始取4行*/
SELECT detail_id FROM order_detail LIMIT 4 OFFSET 3;

排序检索数据

/*根据product_price进行排序*/
SELECT product_price FROM order_detail ORDER BY product_price;
/*按照多个列排序,先对product_price排序,只有product_price相同时才比较product_name;*/
SELECT product_id,product_price,product_name FROM order_detail ORDER BY product_price,product_name;
/*降序排列*/
SELECT product_price FROM order_detail ORDER BY product_price DESC;
/*DESC只能作用到直接位于其前面的字段, 要在多个字段上进行降序排列,必须对每个字段后面都指定DESC关键字*/
SELECT product_price,product_name FROM order_detail ORDER BY product_price DESC,product_name;
/*注意:ORDER BY子句应保证在FROM子句和WHERE子句后面,LIMIT子句前面*/
SELECT product_price FROM order_detail ORDER BY product_price DESC LIMIT 1;

过滤数据

SELECT product_price FROM order_detail WHERE product_price=5.5;
/*
WHERE子句操作符号

操作符号(说明)
=(等于)
<>(不等于)
!=(不等于)
<(小于)
<=(小于等于)
>(大于)
>=(大于等于)
BETWEEN...AND...(在指定的两个值之间,包括边界值)
eg:BETWEEN 4 AND 10;[4,10]
IS NULL(检查是否为空)
 */
SELECT product_price FROM order_detail WHERE product_price BETWEEN 4 AND 10;
SELECT product_price FROM order_detail WHERE product_price IS NULL;

更强的数据过滤

/*AND连结两个筛选条件,必须同时满足*/
SELECT product_id,product_name,product_price FROM order_detail WHERE product_price<10 AND product_quantity>10;
/*OR关键字表示只需满足条件之一*/
SELECT product_id,product_name,product_price FROM order_detail WHERE product_price=10 OR product_price=20;
/*注意:AND和OR操作符可以组合使用,AND优先级更高,为了明确过滤原则,最好使用()明确计算顺序*/
/*IN匹配在()中的所有值,功能与OR相当*/
SELECT product_price FROM order_detail WHERE product_id IN (3,4,10) ORDER BY product_price;
/*NOT否定跟在它之后的条件,MySQL支持使用NOT对IN,BETWEEN和EXISTS子句取反*/
SELECT product_price FROM order_detail WHERE product_id NOT IN (3,4,10) ORDER BY product_price;

使用通配符进行过滤

/*通配符%,表示任意字符出现任意次数,可以匹配空格,但是不能匹配NULL*/
SELECT product_id,product_name FROM order_detail WHERE product_name LIKE 'fru%';
SELECT product_id,product_name FROM order_detail WHERE product_name LIKE '%ate%';
/*通配符_,表示匹配单个字符,不能多也不能少*/
SELECT product_id,product_name FROM order_detail WHERE product_name LIKE 'frui_';
/*使用通配符的技巧
(1)不要过度使用
(2)不要把通配符放在搜索模式的最前面,这样是最慢的
(3)仔细注意通配符的位置
 */

使用正则表达式进行过滤

SELECT product_id,product_name FROM order_detail WHERE product_name REGEXP '.ruit';
/*
.   匹配任意一个字符
|   搜索两个串之一,或操作
[123] 匹配1,2,3中任意一个字符
[0-9] 匹配0-9中任意一个字符
[^0-9] 匹配除了0-9外任意一个字符
\\ 匹配特殊字符都必须用\\为前导,如要匹配.  则表示为\\.
*   0或多个匹配,如正则表达式为'abc*','ab','abc','abcccc'都可以匹配
+   1或多个匹配,如正则表达式为'abc+','ab'不可以匹配,'abc'和'abccccc'可以匹配
?   0或1个匹配,如正则表达式为'abc?','ab','abc'可以匹配,'abccccc'不可以匹配
{n}   指定数目的匹配
{n,}    不少于指定数目的匹配
{n,m}   一定数目范围内的匹配


定位元字符^----文本的开始(^在[]中的作用则为否定该集合)
定位元字符$----文本的结束
*/

创建计算字段

/*CONCAT()拼接串,TRIM()去除串左右的空格,另外还有LTRIM()和RTRIM(),AS关键字赋予别名; */
SELECT CONCAT(product_id,'(',TRIM(product_name),')') AS product_message FROM order_detail ORDER BY product_id;
SELECT product_id,product_price*2 AS double_price FROM order_detail ORDER BY double_price;

/*使用汇聚函数(需要注意的是函数的可移植性不强,最好在用函数的时候加上注释*/
SELECT COUNT(*) AS num_items,MIN(product_price) AS price_min,MAX(product_price) AS price_max,SUM(product_price) AS price_sum,AVG(product_price) AS product_avg FROM order_detail;

使用分组数据

SELECT category_type,COUNT(*) AS nums_categorytype FROM product_info GROUP BY category_type HAVING nums_categorytype <2;
/*GROUP BY子句应该在WHERE后,ORDER BY前,使用了GROUP BY,WHERE就无法对分组进行数据过滤了,这个时候应该使用HAVING对分组进行过滤
 也就是WHERE是针对分组前的数据进行过滤,而HAVING是针对分组后的数据进行过滤.
 */
SELECT MAX(product_price),category_type FROM product_info GROUP BY category_type;

子查询

/*子查询,从内向外执行查询语句,一般与IN操作符结合使用,嵌套层数没限制,但是最好不要太多*/
SELECT product_name FROM product_info WHERE category_type IN (
SELECT category_type FROM product_category WHERE category_id IN (1,2));
/*子查询,计算字段,该子查询对外部的每条记录都执行一遍.*/
SELECT category_name,category_type,(SELECT COUNT(*) FROM product_info WHERE product_info.category_type=product_category.category_type) AS nums_each FROM product_category;

联接表

/*外键:外键为某一个表中的一个字段,它同时也是另外一个表的主键,定义了两个表之间的关联,
在联接两个表的时候,实际上是将第一个表的每一行与第二个表中的每一行配对,要保证所有联结都有WHERE子句或者是ON子句*/
SELECT product_name,product_price,category_name FROM product_info,product_category WHERE product_info.category_type=product_category.category_type;
/*尽量使用INNER JOIN...ON...进行联结(推荐使用),而不是WHERE*/
SELECT product_name,product_price,category_name FROM product_info INNER JOIN product_category ON product_info.category_type=product_category.category_type;
/*OUTER JOIN外联结,LEFT OUTER JOIN左外联结,包括了所有左边表的行,RIGHT OUTER JOIN 右外联结,包括了所有右边表的行*/
SELECT product_name,product_price,category_name FROM product_info LEFT OUTER JOIN product_category ON product_info.category_type=product_category.category_type;
SELECT product_name,product_price,category_name FROM product_info RIGHT OUTER JOIN product_category ON product_info.category_type=product_category.category_type;

组合查询

/*使用UNION操作符将多条SELECT子句组合成一个结果集合,UNION从查询结果集中自动去除了重复的行,如果需要查询出全部,可以使用UNION ALL替代.*/
SELECT product_name,product_price FROM product_info WHERE product_price<5 UNION SELECT product_name,product_price FROM product_info WHERE category_type=3;

插入数据

/*插入检索出来的数据*/
/*INSERT INTO 要插入的表(字段名,字段名,...) SELECT 字段名,字段名,... FROM 另外一个表名*/
INSERT INTO product_category(category_id,category_name,category_type) VALUES(80,"日用品",5);

更新和删除

/*更新或者删除一定要注意加上WHERE子句,否则就变成了更新或者清空整个表,若想从整个表中删除所有行,可使用TRUNCATE TABLE语句*/
UPDATE product_category SET category_name='香烟',category_type=5 WHERE category_id=80;
DELETE FROM product_category WHERE category_id=5;

数据库管理高级篇

使用视图(简化数据,格式化基础数据)

/*创建视图,之后视图就可以跟正常表格一样使用了,但是视图并不是实际存在的表,只是从
基本表中检索出来的数据而已,而且还有一些操作的限制,应该将视图用于检索而不是更新
*/
CREATE VIEW category_product AS
SELECT product_name,product_price,category_name
  FROM product_info AS p INNER JOIN product_category AS c
  ON p.category_type=c.category_type;

/*视图的使用*/
SELECT product_name,product_price,category_name FROM category_product;
/*视图的删除*/
DROP VIEW category_product;
/*显示创建视图的CREATE语句*/
SHOW CREATE VIEW category_product;

存储过程(与编程语言的方法功能相似)

/*创建存储过程*/
/*IN,OUT,INOUT分别为输入,输出,输入并输出,INTO是赋值操作符号*/
CREATE PROCEDURE proceduring(
  OUT p1 DECIMAL(6,2),
  OUT p2 DECIMAL(6,2),
  OUT p3 DECIMAL(6,2),
  IN p4 INT
)
BEGIN
  SELECT MIN(product_price) INTO p1
    FROM product_info;
  SELECT AVG(product_price) INTO p2
    FROM product_info;
  SELECT SUM(product_price)+p4 INTO p3
    FROM product_info;
END;
/*使用存储过程,必须注意要加上@*/
CALL proceduring(@p1,@p2,@p3,20);
/*查询结果,也必须注意要加上@*/
SELECT @p3;
/*删除存储过程*/
DROP PROCEDURE proceduring;
/*显示用来创建一个存储过程的CREATE语句*/
SHOW CREATE PROCEDURE proceduring;

管理事务处理


/*使用事务*/
START TRANSACTION;
DELETE FROM product_info WHERE product_id=1;
COMMIT;
START TRANSACTION;
DELETE FROM product_info WHERE product_id=2;
SAVEPOINT commitpoint;
DELETE FROM product_info;
SELECT * FROM product_info;
ROLLBACK TO commitpoint;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值