mysql基础使用手册

手把手叫会零基础的你使用mysql

登录MySql

windows环境进入cmd后,输入: mysql –h localhost –u username –p 再输入密码就可以启动mysql

linux 进入terminal后直接输入: mysql –h localhost -u username -p
随后根据提示输入密码。

其中localhost是mysql服务器所在的ip,如果是本机可以省略*-h localhost* 或用localhost; username是登录mysql的用户名。


数据库(DATABASE)相关操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- 建名为db_name的数据库
CREATE DATABASE db_name;


-- 查看已经存在的数据库
show DATABASES;


-- 删除名为db_name的数据库
DROP DATABASE db_name;


-- 操作名为db_name的数据库
USE db_name;


-- 显示数据库中的表
SHOW TABLES;


-- 查看表名为table_name的表的结构
DESC table_name;

数据库中表(TABLE)的操作

查看表的详细结构语句

1
SHOW CREATE TABLE table_name;

几个概念

主键

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 创建表且设置了ID为主键 
CREATE TABLE table_name
(id int primary key,
name varchar(50),
age int ,
sex varchar(10)
);


-- 设置了表中stu_id和course_id两个都为主键
CREATE TABLE table_name
(stu_id int,
course_id int,
name varchar(20),
grade float,
PRIMARY KEY(stu_id,course_id));

外键

如果表A的某一个属性值依赖于表B的主键,则称B为父表,A为子表,A中的这个字段为A的外键,如果父表中的信息改变,则对应子表的数据也会改变

1
2
3
4
5
6
7
8
9
10
-- table_name02是父表,table_name01是子表,给子表设置了两个外键
CREATE TABLE table_name01
(id int PRIMARY KEY,
stu_id int,
course_id int ,
score float,
grade int,
CONSTRAINT c_fk(外键别名) FOREIGN KEY(stu_id,course_id)
REFERENCES table_name02(stu_id,course_id)
);

约束

表字段的非空约束

指字段中值不能为null

1
2
3
4
5
6
-- 设置not null表示字段不能为空,也就是非空
CREATE TABLE table_name
(id int primary key not null,
name varchar(50) not null,
stu_id int
);

唯一约束

指字段中值不能重复

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 其中设置了主键id,且自动增加,且unique设置了stu_id的值必须唯一性,不能有相同的值存在
CREATE TABLE table_name
(id int primary key auto_increment,
stu_id int unique,
name varchar(20) not null
);


-- default 为表设置默认值,即在没有插入数据的时候会用默认值代替;
-- 即为Englist字段设置了默认值为zero;
CREATE TABLE table_name
(id int primary key auto_increment,
stu_id int unique,
name varchar(50) not null,
english varchar(20) default 'zero'
);

表的修改操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
-- 修改表名
ALTER TABLE old_table_name RENAME [to] new_table_name;


-- 修改字段属性
ALTER TABLE table_name MODIFY 属性名 数据类型(修改后的类型);


-- 修改字段
ALTER TABLE table_name CHANGE 旧字段名 新字段名 新数据类型;

-- 增加字段
-- 在字段2后面增加字段1;如果把字段2改成 FIRST即加在最前面
ALTER TABLE table_name ADD 数据类型 AFTER 字段2;


-- 删除字段
ALTER TABLE table_name drop 字段名;


-- 修改字段的位置
ALTER TABLE table_name MODIFY 字段名 FIRST(第一个位置,AFTER 字段,指定字段的后面);


-- 更改表的引擎名
ALTER TABLE table_name engine=Mylsam;


-- 删除表的外键约束
ALTER TABLE table_name DROP FOREIGN KEY 外键别名;


-- 删除表 --
  
--普通的没有关联的表
drop table table_name;


-- 删除有关联的表
-- 先查看表的详情,看到外键的另名,
-- 先删除外键,再删除表格就可以了。
SHOW CREATE TABLE table_name;

数据库的增删改查操作

数据库的增(insert into)删(delete)改(update)查(select)操作:   

添加数据(INSERT INTO)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
-- A增加数据分两种:

-- 不指定具体字段名如
INSERT INTO table_name
VALUES(值1,值2…);


-- 指定字段名
-- 如果是为指定的字段加数据,只需要写出需要加数据的字段即可
INSERT INTO table_name
(字段1,字段2….)
VALUES(值1,值2….);


-- 同时插入多条数据
INSERT INTO table_name
[字段列表]
VALUES(取舍列表1),(取值列表2)…;


-- 将一个表的数据插入到别个一张表中
INSERT INTO table_name1
(字段列表)
SELECT (表2字段) FROM table_name2 WHERE 条件表达式;

更新数据(改)操作(UPDATE)

1
2
3
4
-- 可以对一定范围中的数据更改,主要是从where后面的条件来判断
UPDATE table_name
SET 字段1=1,字段2=2
WHERE 条件表达式;

删除数据操作(DELETE)

1
2
3
4
5
6
7
-- 依据条件表达式筛选需要删除的数据。
DELETE FROM table_name
WHERE 条件表达式;


-- 将会删除所有数据。
DELETE FROM table_name;

查询数据(QUERY)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
SELECT 字段名列表 
FROM table_name
[WHERE 条件表达式1]
[GROUP BY 字段名
[HAVING 条件表达式2]
]
[ORDER BY 字段名
[ASC(升序)/DESC(降序)]
]
-- 单表查询
SELECT 字段名 FROM table_name
WHERE 条件;


-- 带in关键字查询
-- 判断某个字段的值是否在指定的集合中,是的话就查出来
SELECT 字段名 table_name WHERE 字段名 IN (值1,值2…..)


-- 带between and 关键字的查询
-- 查找的是范围在值1与值2之间对应的数据;结果是包含两端的值的。
SELECT 字段名 FROM table_name
WHERE 字段名
BETWEEN1 AND2;


-- 带like的匹配查询一个完整字符串,可以加%;
-- %表示任意长度的字符串如b%k表示以b开头,以k对事的任意字符串,而只表示单个字符,如b_k表示以b开始k结束的3个字符的字符串 。not表示不匹配时.
SELECT 字段名 FROM table_name WHERE 字段名 [not] LIKE 条件;


-- 空值查询
-- 即查询[不]为空的数据
SELECT 字段名 FROM table_name
WHERE 字段名 IS [not]null;


-- and与or的多条件查询
-- and表示所以条件都必须成立,而or表示只需要其中任何一个条件成立就可以。
SELECT 字段名 FROM table_name
WHERE 条件1 AND 条件2;


-- 查询结果不重复
SELECT DISTINCT 字段名 FROM table_name;

分组查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
-- 单独用 group by 分组,结果只会显示一个分组的一条记录
SELECT 字段名 FROM table_name
GROUP BY 字段名;


-- group by 和group_concat()函数使用
-- 功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
-- 语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
-- 说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号

-- 每个分组的所有字段都可以显示。
SELECT 字段名, GROUP_COUCAT(字段名) FROM table_name
GROUP BY 字段名;


-- group by与集合函数使用
SELECT 字段名, COUNT(字段名) FROM table_name
GROUP BY 字段名 HAVING COUNT (字段名) 条件;


-- 多字段分组
SELECT * FROM table_name GROUP BY 字段1,字段2…;


-- group by与with rollup一起用
-- ROLLUP 运算符生成的结果集类似于 CUBE 运算符生成的结果集。
SELECT 字段名, COUNT(字段名) FROM table_name
GROUP BY 字段名 WITH ROLLUP;

用limit限制查询数据

1
2
3
4
-- 前者是显示从第一条到a条数据
-- 后者是显示从a条到b条间的数据
SELECT * FROM table_name
LIMIT a 或(LIMIT a,b);

使用集合函数查询数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- count()统计数据条数
SELECT COUNT(*) FROM table_name


-- sum()求和
SELECT 字段名, SUM(字段名) FROM table_name
WHERE 条件;


-- avg()求平均数
SELECT AVG(字段名) FROM table_name
GROUP BY 字段名;


-- max与min最大与最小值
SELECT MAX(字段名)/MIN(字段名) FROM table_name;

多表连接查询

内连接查询

两个以上表中存在意义相同的字段时,可以用该字段来连接表进行查询.如:

1
2
3
SELECT 字段1,字段2,字段3
FROM table_name1 INNER JOIN table_name2
ON table_name1.字段a=table_name2.字段b;

外连接查询

1
2
3
-- Letf表示左链接,right表示右链接。
SELECT 字段列表 FROM table_name01
LEFT/RIGHT JOIN table_name02 ON table_name01.字段名=talbe_name02.字段名;

用正则表达式查询

1
2
3
4
5
6
7
8
9
10
-- 查询以特定字符开头的记录。以a头。
SELECT * FROM table_name WHERE 字段名 REGEXP '^a';


-- 查询以特定字符结束的记录。以xx结尾。
SELECT * FROM table_name WHERE REGEXP 'xx$';


-- 用符号"."来代替字符串中任意一个字符。以1开头y结尾,且中间两个字符。
SELECT * FROM table_name WHERE name REGEXP '^1..y$';

表或字段取别名

1
2
3
4
5
6
-- 表的别名。t就是表的别名。
SELECT * FROM table_name t WHERE t.字段=值;


-- 字段的别名。用as关键字。
SELECT t_id as id FROM table_name WHERE t_id=值 ;

数据库备份

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# mysqldump命令备份.
# 其中db_name是数据库的名称, table1..是表名, backupname.sql表示备份文件的名称,前面可以加个绝对路径
# 如果没有表名将备份 整个数据库
mysqldump –u username –p db_name table1,table2….>backupname.sql;


# 备份多个数据库
mysqldump -u username –p –databases db_name1 db_name2… > backupname.sql


# 备份所有数据库
mysqldump –u root –p –all-databases > C:\all.sql


# 用Mysqlhotcopy工具快速备份


# 数据库还原
# 其中backup.sql是保存的数据库文件
mysql –u root –p < backup.sql