MySQL--基本操作(一)

一、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}’;

猜你喜欢

转载自blog.csdn.net/weixin_42311095/article/details/81176296