一、MySQL的基本操作:
1.在命令行中启动:
net start mysql80
2.登录:
mysql -u用户名 -p密码
3.退出:q
uit/exit
4.修改密码:
mysqladmin -u用户名 -p原密码 password
(输入新密码)
5.显示当前连接的信息:
select database(); 数据库
Select version(); 版本
Select now(); 当前时间
Select user(); 当前用户
二、数据库的基本操作
1.创建数据库:
Create database 数据库名;
Create database if not exist 数据库名;
2.删除数据库:
Drop database [if exist] 数据库名;
3.数据库存储引擎:
查看系统支持的引擎:show engines;
查看默认的存储引擎:show variables like ‘%storage_engine%’;
4.显示所有数据库
Show databases;
5.使用数据库(在创建表前必须先使用数据库)
use 数据库名;
三、数据表的基本操作
1.创建数据表:(在创建数据表之前,要先引用指定的数据库)
Create table 数据表名(
字段1 数据类型 [约束条件],
字段2 数据类型 [约束条件],
……
[约束条件]
);
其中约束条件有以下几种情况:
(1)使用主键约束:
单子段主键:在定义列的同时定义主键或定义完所有列后再定义主键
Id INT(11) PRIMARY KEY 或:CONSTRAINT 约束名 PRIMARY KEY(字段名)
多字段主键:PRIMARY KEY(字段1,字段2 ,……)
(2)使用外键约束:
CONSTRAINT 外键名 FOREIG KEY(字段名) REFERENCES 主表名(主键名)
(3)使用唯一性约束:字段末尾UNIQUE 或 CONSTRAINT 约束名 UNIQUE(字段名)
(4)使用默认值:字段名 数据类型 DEFAULT 默认值
(5)属性值自动增加:AUTO_INCREMENT
2.查看表的数据结构:
DESCRIBE 表名
DESC 表名
SHOW CREATE TABLE 表名
SHOW CREATE TABLE 表名\G (更简洁)
3.修改数据表:
修改表名: ALTER TABLE 旧表名 RENAME TO 新表名
修改字段的数据类型:ALTER TABLE 表名 MODIFY 字段名 数据类型
修改字段名: ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型
添加字段: ALTER TABLE 表名 ADD 字段名 数据类型 [FIRST/AFTER 字段名]
删除字段: ALTER TABLE 表名 DROP 字段名
修改字段的排列位置:ALTER TABLE 表名 MODIFY 字段1 数据类型 FIRST|AFTER 字段2
修改表的引擎: ALTER TABLE 表名 ENGINE=新引擎
删除表的外键: ALTER TABLE 表名 DROP FOREIGN KEY 外键名
4.删除数据表:
DROP TABLE [IF EXIST] 表1,表2,……
删除被其他表关联的主表:先删除外键,再删除表
四、查询语句
1、基本查询语句
Select *|字段名
From表1,表2,……
[Where表达式
Group by……
Having 表达式
Order by……
Limit ……];
Select 字段1,字段2,……
From 表
WHERE 查询条件;
2、单表查询
1.查询所有字段
select * from 表名;
select 全部字段 from 表名;
2.查询指定字段
select 字段名1,字段2,……,字段n from 表名;
3.查询指定记录
select 字段1,字段2,……
from 表名
where 查询条件;
4.带IN的查询
select s_id, f_name
from fruits
where s_id IN (101,102);
5.带BETWEEN AND的范围查询
select f_name, f_price from fruits where f_price BETWEEN 2.00 AND 10.20;
6.带LIKE的字符匹配查询
(1)%匹配任意长度的字符
(2)下划线'_'只能匹配任意一个字符
7.带AND的多条件查询
select f_id, f_price from fruits where s_id='101' AND f_price>=5;
8.带OR的多条件查询
select s_id, f_name, f_price from fruits where s_id=101 OR s_id=102;
9.查询结果不重复
select distinct 字段名 from 表名;
10.对查询结果排序 ORDER BY
select f_name from fruits ORDER BY f_name;
select f_name, f_price from fruits ORDER BY f_name, f_price;
select f_name, f_price from fruits ORDER BY f_price DESC; 降序
11.分组查询(分组查询一般与集合函数一起使用,如MAX(), MIN(), COUNT()等)
分组:GROUP BY 字段1,字段2,……
过滤分组:HAVING 条件
select s_id ,COUNT(*) AS total from fruits GROUP BY s_id HAVING COUNT(f_name)>1;
在GROUP BY 字句中使用WITH ROLLUP,可在所查询出的分组记录之后增加一条记录,记录所有查询记录之和
select s_id ,COUNT(*) AS total
from fruits
GROUP BY s_id WITH ROLLUP;
12.使用LIMIT 限制查询结果
select * from fruits LIMIT 4; 查询结果的前4行
select * from fruits LIMIT 4,3; 从第五个记录开始,行数为3
3.使用聚合函数查询
AVG() 平均值
COUNT() 返回某列的行数
MAX()
MIN()
SUM()
4.连接查询
(1)内连接查询:FROM表 1 INNER JOIN 表2 ON 表达式
SELECT s_id,s_name,f_name
FROM fruit,suppliers
WHERE fruit.s_id=suppliers.s_id;
等价于:
SELECT suppliers.s_id, s_name, f_name, f_price
FROM fruit INNER JOIN suppliers
ON fruit.s_id=suppliers.s_id;
自连接查询:(同一个表)
SELECT f1.s_id, f1.f_name
FROM fruits AS f1, fruits AS f2
WHERE f1.s_id=f2.s_id AND f2.f_id='a1';
(2)外连接查询
左连接:LEFT OUTER JOIN
左连接的结果包括指定的左表所有的行,而不仅仅是连接列所匹配的行,如果左表的某行在右表中没有匹配行,则在相关联的结果行中,右表的所有选择列表列均为空值。
SELECT customers.c_id, o_num
FROM customers LEFT OUTER JOIN orders
ON customers.c_id=orders.c_id;
右连接:RIGHT JOIN
与左连接相反
SELECT customers.c_id, o_num
FROM customers RIGHT OUTER JOIN orders
ON customers.c_id=orders.c_id;
5.子查询:带ANY/SOME,ALL,EXISTS,NOT EXISTS,IN, 比较运算符
(1)SELECT num1 FROM tbl1 WHERE num1>ANY(SELECT num2 FROM tbl2);
(2)SELECT num1 FROM tbl1 WHERE num1>ALL(SELECT num2 FROM tbl2);
(3)SELECT * FROM fruits
WHERE EXISTS
(SELECT s_name FROM suppliers WHERE s_id=107);
EXISTS 后面的子查询如果有返回行说明True,此时外层查询语句进行;如果没有返回行,则为FALSE,此时外层查询语句不进行
(4)SELECT c_id FROM orders WHERE o_num IN
(SELECT o_num FROM orderitems WHERE f_id='c0');
(5)SELECT s_id, f_name FROM fruits
WHERE s_id=
(SELECT s1.s_id FROM suppliers AS s1 WHERE s1.s_city='Tianjin');
6.合并查询结果
UNION 将多条SELECT查询结果合成单个结果表,删除重复行
UNION ALL 合并时不删除重复行业不对结果进行自动排序
SELECT s_id, f_name, f_price
FROM fruits
WHERE f_price<9.0
UNION ALL
SELECT s_id, f_name, f_price
FROM fruits
WHERE s_id IN (101,103);
7.使用正则表达式查询(REGEXP)
^ | 匹配文本的开始字符 |
$ | 文本结束字符 |
. | 匹配任何单个字符 |
* | 匹配0个或多个在他前面的字符 |
+ | 匹配前面的字符一次或多次 |
‘字符串’ | 匹配包含指定的字符串的文本 |
[ ] | 匹配字符集合中的任何一个字符 |
[^ ] | 匹配不包括在括号中的任何字符 |
{n, } | 匹配前面的字符串至少n次 |
{n,m} | 匹配前面的字符串至少n次,至多m次 |
SELECT * FROM fruits WHERE f_name REREXP ‘^be’;
SELECT * FROM fruits WHERE f_name REGEXP ‘y$’;
SELECT * FROM fruits WHERE f_name REGEXP ‘a.g’;
SELECT * FROM fruits WHERE f_name REGEXP ‘^ba*’;
SELECT * FROM fruits WHERE f_name REGEXP ‘^ba+’;
SELECT * FROM fruits WHERE f_name REGEXP ‘on’;
SELECT * FROM fruits WHERE f_name REGEXP ‘on|ap’;
SELECT * FROM fruits WHERE f_name REGEXP ‘[345]’;
SELECT * FROM fruits WHERE f_name REGEXP ‘[a-e1-2]’;
SELECT * FROM fruits WHERE f_name REGEXP ‘x{2,}’;
SELECT * FROM fruits WHERE f_name REGEXP ‘x{1,3}’;