登录数据库
1.在MySQL安装目录下的的bin目录打开命令行界面(可按住shift再鼠标左击)。
2.输入mysql -u数据库用户名 -p命令。
3.输入密码登录数据库。
常用命令
SHOW DATABASES //显示所有已创建的数据库
USE db_name //进入某个数据库
CREATE DATABASE db_name //创建一个数据库
DROP DATABASE db_name //删除某个数据库
SHOW TABLES //显示当前数据库下所有的表
DESC tb_name //查看某个表各个字段的描述信息
SHOW CREATE TABLE tb_name //查看创建某个表时的信息
\T 某个文件 //将命令行下所有的信息输出到指定文件中
\t //关闭输出日志功能
建表语句
CREATE TABLE [IF NOT EXISTS] tb_name(字段 描述)[ENGINE=INNODB(默认)|MyISAM] [CHARSET=utf-8(默认)];
CREATE TABLE IF NOT EXISTS user(
id int primary key auto_increment,
username varchar(20) not null unique,
passward varchar(20) not null,
addr varchar(10),
age tinyint,
sex enum('男','女','保密')
);
插值操作
INSERT INTO user VALUES(1,'张三','1000','北京',16,'男');
INSERT INTO user(username,passward,age,sex) VALUES('张三丰','12345',22,'男');
修改操作
对某个字段的属性进行操作
语句格式
ALTER TABLE tb_name [MODIFY] [ADD] [DROP] [ALTER] [CHANGE]
DROP:删除某个字段、索引等
ADD:添加某个字段、索引等
MODIFY:修改某个字段的数据类型
CHANGE:重命名列(要求数据类型一致)或修改某个字段的类型
ALTER:用于设置或删除默认值(DROP DEFAULT|SET DEFAULT '')
MODIFY与CHANGE的区别
CHANGE修改列名:
CHANGE修改数据类型:
MODIFY修改数据类型
更新操作
对表中数据进行更新操作
语句格式
UPDATE tb_name SET 字段名=值 [WHERE] [ORDER BY] [LIMIT]
LIMIT后只能有一个参数,表示更新前几条记录。
UPDATE user SET age=13;
注意不能添加TABLE字段,否则报错
删除操作
语句格式:DELETE FROM tb_name [WHERE 条件] [ORDER BY 字段] [LIMIT 限制条数]
LIMIT后只能有一个参数,表示删除前几条记录
DELETE FROM user WHERE id=11;
彻底清空数据表(自增长值也会恢复初始值):TRUNCATE [TABLE] tb_name
查询操作
单表查询
语句格式:
SELECT 字段名称 FROM tb_name [WHERE] [GROUP BY [WITH ROLLUP]] [HAVING] [ORDER BY] [LIMIT]
WHERE:条件查询
IN(10,20),BETWEEN .. AND ..:区间筛选
LIKE,NOT LIKE :模糊查询,%表示有一个或多个字符,_表示有一个字符
AND OR > < = != <=>(可以筛选出NULL值):逻辑运算
原始数据
区间筛选:
模糊查询:
GROUP BY:对查询结果进行分组,但只会显示每个分组中的第一条数据内容;
通过GROUP_CONCAT(字段名称) 可以得到每个分组中具体的数据信息
COUNT(字段名)可以统计总数;
MAX(字段名)可以筛选出最大值;
MIN(字段名)可以筛选出最小值;
AVG(字段名)可以计算出平均值;
SUM(字段名)可以计算出总和;
配合AS 别名 使结果更加直观;
WITH ROLLUP 语句可以在结果末尾增加一行对所有数据进行统计。
分组查询:
SELECT sex,GROUP_CONCAT(username) AS username,COUNT(*) AS user,
MAX(age) AS max_age,MIN(age) AS min_age,AVG(age) AS avg_age,SUM(age) AS sum_age FROM user WHERE id<5 GROUP BY sex WITH ROLLUP;
HAVING:对分组后的结果进行二次筛选,用法与WHERE用法基本相同。
SELECT id,GROUP_CONCAT(username) AS username,addr FROM user WHERE id<5 GROUP BY sex HAVING addr='上海' OR addr='北京';
ORDER BY:对查询结果结果进行排序
DESC:降序 ASC:升序(默认) NULL值最小 RAND()可以提取随机记录
可以使用多个字段的升降序组合在一起,当第一个字段值排序后出现相同值时按第二个字段的排序方法排序。
LIMIT:限制显示条数
LIMIT 显示条数
LIMIT 偏移量,显示条数(可实现分页功能,第一条记录的偏移量为0)
多表查询
原始数据
通过不同表中具有相同意义的字段将不同表连接起来
内连接查询
(显示两个表中符合连接条件的记录):INNER JOIN
通过ON连接条件
外连接查询
左外连接:LEFT [OUTER] JOIN 显示左表的全部记录及右表中符合连接条件的记录。
右外连接:RIGHT [OUTER] JOIN 显示右表的全部记录及左表中符合连接条件的记录。
内连接查询
SELECT user.id,username,proname FROM user [INNER|CROSS] JOIN province ON user.proID=province.id;
外连接查询
SELECT user.id,username,proname FROM user LEFT JOIN province ON user.proID=province.id;
联合查询
把多个表中的记录统计输出
用法:SELECT 字段名 FROM 表名 UNION [ALL] SELECT 字段名 FROM 表名;
UNION ALL:输出所有记录
UNION:去除重复的记录
子查询
使用[NOT] IN()实现子查询
使用各种比较运算符实现子查询>、<、>=、<=、<>、!=、<=>
使用[NOT] EXISTS()实现子查询
例:SELECT id,username FROM employee WHERE EXISTS (SELECT id FROM department);
使用ANY|SOME或者ALL实现子查询
与比较运算符的结合使用
可以使用INSERT INTO tb_name(字段名称) SELECT 字段 FROM tb_name将查询出来的数据直接插入表中,也可以在建表语句后加上SELECT 语句将查询结果写入表中。
正则表达式查询
通过REGEXP '匹配规则' 来使用
常用规则
^:匹配字符串开始的部分(^a)
$:匹配字符串结束的部分(a$)
.:代表字符串中的任意一个字符,包括回车和换行
[字符集合]:匹配字符集合中的任意一个字符([abc]、[a-z])
[^字符集合]:匹配除字符集合外中的任意一个字符
a|b|c:匹配a、b、c中的任意一个字符串
*:匹配0个1个或多个其前面的字符(a*)
+:匹配1个或多个其前面的字符(a+)
String{N}:字符串出现N次
字符串{M,N}:字符串最少出现M次,最多N次
外键(FOREIGN KEY)
主表与子表的存储引擎必须为INNODB,外键列和参照列必须具有相同的数据类型,并且必须创建索引
外键创建
ALTER TABLE tb_name ADD [CONSTRAINT 外键名] FOREIGN KEY(外键列) REFERENCES department(参照列)
外键删除
ALTER TABLE tb_name DROP FOREIGN KEY 外键名
CREATE TABLE IF NOT EXISTS department(
id smallint unsigned primary key auto_increment,
depName varchar(30) unique
);
INSERT INTO department(depName) VALUES('学风部'),
('社践部'),
('外联部'),
('体育部'),
('网宣部');
CREATE TABLE IF NOT EXISTS employee(
id smallint unsigned auto_increment primary key,
username varchar(30) not null unique,
depId smallint unsigned,
[CONSTRAINT 外键名]FOREIGN KEY(depId) REFERENCES department(id)
);
INSERT INTO employee(username,depId) VALUES('小明',1),
('小红',2),
('小王',3),
('张三',4),
('李四',5),
('王五',1);
外键约束的参照操作
NOT ACTION、RESTRICT:默认形式,拒绝对父表的删除和更新操作;
CASCADE:从父表更新或删除时自动删除或更新子表中匹配的行;
FOREIGN KEY(depId) REFERENCES department(id) ON DELETE CASCADE ON UPDATE CASCADE
SET NULL:从父表更新或删除时将子表的外键列设为NULL(外键列没有指定为NOT NULL);
FOREIGN KEY(depId) REFERENCES department(id) ON DELETE SET NULL ON UPDATE SET NULL
MySQL函数库
数学函数库
字符串函数库
日期时间函数
条件判断函数和系统函数
其他常用函数
索引
建表时创建索引:
[UNIQUE|FULLTEXT|SPATIAL] KEY|INDEX 索引名(字段名)
在已存在的表上创建索引
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名称 ON tb_name {字段名称[(长度)] }
ALTER TABLE tb_name ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名称(字段名称[(长度)]);
删除索引
DROP INDEX 索引名称 ON tb_name