登录mysql客户端命令:
mysql -uroot -p123 -h localhost;
-u:后面的root是用户名,这里使用的是超级管理员root;
-p:后面的123是密码,这是在安装MySQL时就已经指定的密码;
-h:后面给出的localhost是服务器主机名,它是可以省略的,例如:mysql -u root -p 123;
退出客户端命令:
quit
或
exit;
创建数据库
语法:
CREATE DATABASE [IF NOT EXISTS] db_name [CHARACTER SET charset_name] [COLLATE collation_name]
其中charset_name是为数据库指定的默认字符集
Collate是为数据库指定的默认校对规则
(校对规则是在字符集内用于比较字符的一套规则,可以控制select查询时where条件大小写是否敏感的规则。)
练习:
~创建一个名称为mydb1的数据库。
create database mydb1;
~创建一个使用gbk字符集的mydb2数据库。
create database mydb2 character set gbk;
查看数据库
语法:
显示所有数据库:
SHOW DATABASES
显示数据库创建语句:
SHOW CREATE DATABASE db_name
练习:
~查看当前数据库服务器中的所有数据库
SHOW DATABASES;
~查看前面创建的mydb2数据库的定义信息
SHOW CREATE DATABASE mydb2;
修改数据库
注意: 数据库一旦创建成功, 其名字无法修改!
语法:
ALTER DATABASE db_name [CHARACTER SET charset_name] [COLLATE collation_name]
练习:
~查看服务器中的数据库,并把mydb2库的字符集修改为utf8
alter database mydb2 character set utf8;
删除数据库
语法:
DROP DATABASE [IF EXISTS] db_name
练习:
~删除前面创建的mydb2数据库
DROP DATABASE mydb2;
选择数据库
语法:
选择数据库:
use db_name;
查询当前选择的数据:
select database();
( 没有退出数据库的命令, 如果想退出当前数据库进入另一个数据,直接use切换到另一个数据库就可以了 )
新增表
语法:
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
)[character set 字符集] [collate 校对规则]
field:指定列名 datatype:指定列类型
注意:
创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型。
创建表时,一般不需要指定字符集编码和校对规则,和数据库保持一致即可。
查看表
语法:
查看表结构:
desc tabName;
查看当前所有表:
show tables;
查看当前数据库表建表语句
show create table tabName;
修改表
语法:
增加列:
ALTER TABLE tabname ADD col_name datatype [DEFAULT expr][,ADD col_name datatype...];
修改列:
ALTER TABLE tabname MODIFY (col_name datatype [DEFAULT expr][,MODIFY col_name datatype]...);
删除列:
ALTER TABLE tabname DROP [COLUMN] col_name;
修改表名:
ALTER TABLE old_tabname RENAME TO new_tabname;
或
RENAME TABLE old_tabname TO new_tabname;
修改列名称:
ALTER TABLE tabname CHANGE [COLUMN] old_col_name new_col_name datatype;
修改列的顺序:
ALTER TABLE tabname MODIFY col_name1 datatype AFTER col_name2;
修改表的字符集:
ALTER TABLE tabname CHARACTER SET character_name;
删除表
语法:
DROP TABLE tabname;
练习: ~删除employee表
drop table employee;
利用sql语句来操作数据库表记录
INSERT
语法:
INSERT INTO tabname [(column [, column...])] VALUES (value [, value...]);
- 在MySQL中插入中文数据,或查询中文数据时的乱码问题: 可以通过修改MySQL安装目录下的my.ini文件(57行)中的配置,来指定服务器端使用的码表。这种方式一劳永逸。(注意: 配置完成后需要重启服务器!!);
查询数据库中编码:
show variables like 'char%';
UPDATE
语法:
UPDATE tab_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]
UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。
DELETE
语法:
DELETE FROM tab_name [WHERE where_definition]
where用来筛选要删除的记录,如果不使用where子句,将删除表中所有数据。
delete语句不能删除某一列的值
delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。
SELECT
1.基本的查询
语法:
SELECT [DISTINCT] * | {column1, column2. column3..} FROM table_name;
select 指定查询哪些列的数据。
column指定列名。
* 号代表查询所有列。
from指定查询哪张表。
DISTINCT可选,指显示结果时,是否剔除重复数据
2.使用where子句的查询
语法:
SELECT * | 列名 FROM tablename [WHERE where_definition]
3.排序查询
语法:
SELECT column1, column2, column3.. FROM tablename order by column asc|desc;
Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。
Asc 升序(默认)、Desc 降序
ORDER BY 子句应位于SELECT语句的结尾。
4.聚合函数
语法:
求符合条件的记录中指定列的记录数
select count(列名)… from tablename [WHERE where_definition]
求符合条件的记录中指定列的和值
select sum(列名)… from tablename [WHERE where_definition]
求符合条件的记录中指定列的平均值
select avg(列名)… from tablename [WHERE where_definition]
求符合条件的记录中指定列的最大值
select max(列名)… from tablename [WHERE where_definition]
求符合条件的记录中指定列的最小值
select min(列名)… from tablename [WHERE where_definition]
5.分组查询
语法:
SELECT column1, column2. column3.. FROM tablename group by column having ...
where和having的区别?
- where子句和having子句都可以进行过滤, 但是使用场景有所不同:
- where子句对分组之前的数据进行过滤,不能使用聚合函数和列别名
- having子句对分组之后的数据进行过滤,可以使用聚合函数和别名
- 使用where子句的地方一般都可以用having替代,但是使用having的地方一般不能用where替代
数据库的备份与恢复
1.备份数据库, 在cmd窗口中:
备份命令:
mysqldump -u用户名 -p 数据库名字 > 数据文件的位置
例如:
mysqldump -uroot -p mydb1 > e:/1.sql
2.恢复数据到数据库
方式一: 在cmd中:
命令:
mysql -u用户名 -p 数据库名字 < 数据文件的位置
例如:
mysql -uroot -p mydb3 < e:/1.sql
方式二: 在mysql客户端中
命令:
SOURCE 数据文件的位置
例如:
source e:/1.sql
多表查询
案例:
create table dept(
id int primary key auto_increment,
name varchar(20)
);
insert into dept values(null, '财务部');
insert into dept values(null, '人事部');
insert into dept values(null, '科技部');
insert into dept values(null, '销售部');
create table emp(
id int primary key auto_increment,
name varchar(20),
dept_id int
);
insert into emp values(null, '张三', 1);
insert into emp values(null, '李四', 2);
insert into emp values(null, '老王', 3);
insert into emp values(null, '刘能', 5);
需求1:查询出部门表和员工表,同时列出部门信息和员工信息。
select * from dept,emp;
(笛卡尔积查询)
select * from dept, emp where emp.dept_id=dept.id;
或者
select * from dept inner join emp on emp.dept_id=dept.id;
需求2:查询出部门信息和部门所对应的员工信息,同时列出那些没有员工的部门
select * from dept left join emp on emp.dept_id=dept.id;
需求3:查询出部门信息和部门所对应的员工信息,同时列出那些没有部门的员工
select * from dept right join emp on emp.dept_id=dept.id;
需求4:查询出部门信息和部门所对应的员工信息, 同时列出没有员工的部门和那些没有部门的员工
select * from dept full join emp on emp.dept_id=dept.id;
###mysql不支持
笛卡尔积查询:
两张表相乘得出来的结果。如果左边表有m条记录,右边有n条记录,则查询出来的结果就是m*n条。这些查询结果中包含大量错误的结果,通常不会使用这种查询。
内连接查询:
查询出左边表(dept)有且右边表(emp)也有的记录
select * from emp inner join dept on dept.id=dept_id;
左外连接查询:在内连接查询的基础上,加上左边表有而右边表没有的记录
查询出部门所对应的员工信息, 同时列出那些没有员工的部门
select * from dept left join emp on dept.id=dept_id;
右外连接查询:在内连接查询的基础上,加上右边表有而左边表没有的记录。
查询出部门所对应的员工信息, 同时列出那些没有部门的员工
select * from dept right join emp on dept.id=dept_id;
全外连接查询:在内连接查询的基础上,加上左边表有而右边表没有的记录 和 右边表有而左边表没有的记录。
查询出部门所对应的员工信息,同时列出那些没有员工的部门及些没有部门的员工
select * from dept full join emp on dept.id=dept_id;###mysql不支持全外连接查询
使用union模拟全外连接查询:
select * from dept left join emp on dept.id=dept_id
union
select * from dept right join emp on dept.id=dept_id;
网友评论