美文网首页
MySQL常用命令

MySQL常用命令

作者: ddxuzengbin | 来源:发表于2018-09-16 11:27 被阅读0次

登录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;

相关文章

网友评论

      本文标题:MySQL常用命令

      本文链接:https://www.haomeiwen.com/subject/kvbxnftx.html