mysql使用笔记(二)

一、启动和关闭mysql服务

windows下 
启动 
(方法1)管理员权限进入cmd,执行 net start mysql 
(方法2)管理员权限进入cmd,执行 mysqld -uroot --console 
(方法3)在计算机——服务——mysql,通过图形界面的方式启动 
关闭 
(方法1)管理员权限进入cmd,执行 net stop mysql 
(方法2)管理员权限进入cmd,执行 mysqladmin -uroot shutdown 
(方法3)在计算机——服务——mysql,通过图形界面关闭

linux下 
启动 
(方法1)终端下执行 cd mysql可执行文件目录,比如cd /usr/bin,执行 
./mysqld_safe & 
(方法2)终端下执行 service mysql start (这种方法需要RPM方式安装的mysql才行)

关闭 
(方法1)终端下执行 mysqladmin -uroot shutdown 
(方法2)service stop mysql (这种方法需要RPM方式安装的mysql才行)

常见的异常 
    启动时候失败,提示 [ERROR] InnoDB: .\ibdata1 can‘t be opened in read-write mode。解决方案: 
(1)打开任务管理器,终止mysqld.exe 
(2)打开mysql安装目录的data文件夹,删除 ib_logfile0, ib_logfile1 
(3)重启mysql

二、 连接数据库

(方法1)通过mysql workbench图形界面的方式连接 
(方法2)在命令行下,执行 mysql -u 用户名 -p 密码 -h 主机ip,如 
mysql -u root -p,回车后输入密码,不写 -h 表示使用本机ip地址。

三、 SQL语句分类

mysql支持标准sql语句,同时有自己的拓展语句。SQL语句可以分为三类: 
(1)DDL(Data Definition Language) 数据定义语句,定义了不同的数据段、数据库、表、列、索引等数据库对象。常用的语句关键字主要包含create、drop、alter等。 
(2)DML(Data Manipulation Language) 
数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用的语句关键字主要包括insert、delete、update、select。 
(3)DCL(Data Control Language) 
数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别,主要的语句关键字包含grant、revoke等。

DML语句只是对数据库表内的数据进行操作,而DDL语句可以对表定义、结构进行修改。 
    在mysql命令行下,语句以;作为结束,每个语句之后跟;,然后回车,才会被执行。

四、 DDL语句操作

(4.1)创建数据库 
create database dbname; 
(4.2)显示当前数据库 
show databases; 
    在安装mysql时,会自动创建4个数据库: 
(a)information_schema: 主要保存了系统中的一些数据库对象信息,比如用户表信息、列信息、权限信息、字符集信息、分区信息。 
(b)cluster: 存储了系统的集群信息 
(c)mysql: 存储了系统的用户权限信息 
(d)test: 系统自动创建的测试数据库,任何用户都可以使用

(4.3)选择数据库 
use dbname; 
之后的操作,都是在选择的数据库下的操作。比如,show tables;,显示该数据库下的所有表。

(4.4)查看当前信息 
status,显示当前connection的信息,比如使用的数据库、用户、数据库的字符集等。

(4.5)删除数据库 
drop database dbname; 
在mysql中,drop语句的操作结果均显示‘0 rows affected‘

(4.6)创建表 
create table tbname( 
column1_name column1_constraints, 
column2_name column2_constraints, 
... 

    例如,创建一个emp表,表中包括 ename(姓名)、hiredate(雇佣日期)、sal(薪水)、deptno部门编号三个字段,字段类型分别为varchar(10), date, decimal(10,2), int(2) 
create table emp( 
ename varchar(10), 
hiredate date, 
sal decimal(10, 2), 
deptno int(2)) 

(4.6) 查看表定义 
desc tbname;,desc 可以查看表定义,但是输出信息不够全面,可以通过 show create table tbname \G;来查看更加详细的信息,比如存储引擎,字符集等。"\G"选项是使得记录能够按照字段竖向排列,以便更好的显示内容较长的记录。

(4.7)删除表 
drop table tbname;

(4.8)修改表 
    大多数情况下,表结构的修改都通过alter table语句,常用的操作包括: 
<1> 修改字段 
alter table tbname modify column_name column_definition [first|after col_name] 
比如 alter table emp modify ename varchar(20); #将enmae列类型修改为varchar(20) 
<2> 增加字段 
alter table tbname add column_name column_definition [first|after col_name] 
比如 alter table emp add age int(3) #在emp表中添加列age 
<3> 删除字段 
alter table tbname drop column_name 
比如 alter table emp drop age; 
<4> 字段改名 
alter table tbname change old_col_name new col_name [new_col_definition] [first|after col_name]#[]表示其包含的内容可有可无 
比如 alter table emp change age age1 int(4);#将age字段改名为age1,同时修改字段类型为int(4) 
    change和modify都可以修改表的定义,不同的是change后面需要写两次列明,但是change可以修改列名称,而modify不能。 
<5> 修改字段排列顺序 
上面的add/change/modify操作语句中都有 [first|after col_name]选项,用来修改字段在表中的位置,add新加的字段默认是加在表的最后位置,而change/modify默认都不会改变字段的位置。 
比如 alter table emp add birth date after ename; #将新增的birth字段加在ename之后 
alter table emp modify age int(3) first; #将字段age放在最前面 
<6> 更改表名 
alter table tbname rename new_name

五、 DML语句

(5.1)插入记录 
insert into tbname (field1, field2, ...fieldn) values (val1, val2, ...valn) 
也可以不用指定字段名称,但是values后面的顺序应该和表中字段顺序一致,含可控字段、非空但是含有默认值的字段、自增字段,可以不用在insert后的字段列表里面出现,values后面只写对应字段名称的value。 
    insert语句可以一次性插入多条记录,格式为: 

insert into tbname (field1, field2, ...fieldn) values 
(val11, val12, ... val1n), 
(val21, val22, ... val2n), 
.... 
(valk1, valk2, ... valkn)

(5.2)更新记录 
update tbname set col1 = val1, col2 = val2 .. [where condition] 
    在mysql中,update命令可以同时更新多个表中的数据,格式如下: 
update t1, t2, ...tn set t1.field1=expr1, ... tn.fieldn=exprn [where condition] 
比如 udpate emp a, dept b set a.sal=b.sal*b.deptno, b.deptname=a.ename where a.deptno=b.deptno;#emp表(记为a)和dept表(记为b),a中存放雇员信息,包括雇员薪水和其所在的部门号;b中存放部门信息,包括部门号和部门名称。对于给出a的一条雇员信息记录,通过其部门号deptno,从b中找到该deptno对应的deptname.....

(5.3)删除记录 
    如果记录不再需要,可以用delete命令删除 
delete from tbname [where condition] 
在mysql中可以一次删除多一个表中的数据,格式如下: 
delete t1,t2....tn from t1,t2...tn [where condition] 如果from后面的表名为别名,则delete后面也要用相应的别名,否则会提示语法错误。 
无论是单表还是多表,如果不加where条件,会将表的所有记录删除。

(5.4)查询记录 
select field1, field2,....fieldn from tbname [where condition] 
<1> 普通查询 
比如: 
select age, deptno from emp where sal > 1000 and deptno = 1; 
select * from emp; 
<2> 查询不重复的记录 
有时候需要将表中重复的记录去掉后显示出来,可以用distnict关键字来实现: 
select distinct deptno from emp; 
<3> 排序和限制 
如果需要返回按照某个字段排序后的结果集,可以使用order by实现: 
select * from tbname [where condition] order by field1 [desc|asc], 
field2 [desc|asc] ... fieldn[desc|asc]
 
排序规则默认为asc(升序排序)

(5.4)聚合 
    对数据进行汇总操作,group by 
select [field1, field2 ... fieldn] fun_name from tbname [where where_condition] 
[group by field1, field2....fieldn] [with rollup] [having where_condition]

fun_name 表示要做的聚合操作,即聚合函数,常用的有sum,count,max,min,avg等 
group by关键字表示要进行分类聚合的字段,比如要按照部门分类统计员工数量,部门就应该写在group by后面 
with rollup 可选语法,表明是否对分类聚合后的结果进行再汇总 
having 关键字表示对分类后的结果再进行条件的过滤 
having和where的区别:having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤,如果逻辑允许,尽可能使用where先过滤记录,这样减少结果集,提高效率。

比如: 
select count(1) from emp; 统计公司雇员人数 
select deptno, count(1) from emp group by deptno; 统计各个部门的人数 
select deptno, count(1) from emp group by deptno with rollup;统计各部门人数,最后进行汇总 
select deptno, count(1) from emp group by deptno having count(1) > 1;统计部门人数大于1的各个部门以及该部门的人数 
select max(val), min(val), sum(val) from emp; 统计所有的雇员中的最大、最小、总薪水值

(5.5)表连接 
    当需要同时显示多个表中的字段,需要用到表连接。表连接分为内连接外连接,之间的主要区别是,内连接仅选出两张表中互相匹配的记录,外连接会选出其他不匹配的记录,常用内连接。 
比如: 
内连接select ename, deptname from emp, dept where emp.deptno = dept.deptno; 
外连接分为左连接和右连接,左连接是指包含所有的左边的表中的记录,即使有些记录在右边的表中没有与之相匹配的记录; 
右连接是指包含所有的右边表中的记录,即使有些左边表中没有与之匹配的记录。 
比如: 
select ename, deptname from emp left join dept on emp.deptno=dept.deptno;emp表左连接dept表,连接后的结果中包含emp表中的所有的ename,即使该ename对应的员工的deptno在dept表中不存在。

(5.6)子查询 
    某些情况下,当进行查询的时候,需要的条件就是另外一个select的结果,这个时候需要用到子查询。用于子查询的关键字主要包括 in, not in, =, !=, exists, not exists等。 
比如: 
select * from emp where deptno in (select deptno from dept);只查找deptno在dept表中存在的那些deptno的emp中的记录。 
    如果子查询记录数唯一,还可以用 = 代替 in。 
    某些情况下,子查询可以转化为表连接,例如: 
select * from emp where deptno in (select deptno from dept); 
转化为表连接之后,为 select emp.* from emp, dept where emp.deptno=dept.deptno;

(5.7)记录联合 
    如果需要将两个表的数据按照一定的查询条件查询出来以后,将结果合并到一起显示出来,此时需要用union和union all关键字来实现这样的功能: 
select * from t1 union|union all 
select * from t2 union|union all 
.... 
select * from tn; 

    union和union all的区别在于:union all是把结果集直接合并在一起,而union是将union all的结果进行一次distinct,去除重复记录后的结果。

比如,将emp和dept表中的部门编号的集合显示出来: 
select deptno from emp union all select deptno from dept;这样将显示所有的在emp表和deptno表中出现的deptno,去掉重复:select deptno from emp union select deptno from dept;

六、DCL语句

DCL语句主要是DBA用来管理系统中的对象使用权限时使用,一般的开发人员很少使用。 
    比如创建一个数据库用户zl,具有对sakila数据库中所有表的select/insert权限: 
mysql -u root -p 
grant select,insert on sakila.* to ‘zl‘@‘localhost‘ identified by ‘123‘;此时,数据库sakila多了一个新的用户zl,密码为123,且具有select,insert权限。 
    由于权限变更,需要将zl的权限修改,收回insert,只能对数据进行select操作: 
mysql -u root -p 
revoke insert on sakila.* from ‘zl‘@‘localhost‘;

七、 查询元数据信息

msql 5.5之后,提供了新的数据库information_schema,用来记录mysql中的元数据信息。元数据指数据的数据,比如表名、列名、列类型、索引名等表的各种属性名称。该数据库是一个虚拟的数据库,物理上不存在相关的目录和文件,通过show tables显示的并不是实际存在的表,全部是视图。 
    一些比较常用的视图: 
schemata:提供了当前mysql示例中的所有数据库的信息,show databases的结果来自于该表; 
tables:提供了关于数据库中的表的信息(包括视图),详细表述了某个表属于哪个schema、表类型、表引擎、创建时间等信息。show tables from schemaname的结果来自该表; 
colunms:提供了表中的列信息,详细表述了某张表的所有列以及每个列的信息,show columns from schemaname.tablename的结果取自该表; 
statistics:该表提供了关于表索引的信息

利用数据库元信息进行一些操作,比如删除数据库 test1 下所有前缀为tmp的表: 
select concat(‘drop table test1.‘, table_name, ‘;‘) from tables where table_schema=‘test1‘ and table_name like ‘tmp%‘;

时间: 2024-11-06 10:08:41

mysql使用笔记(二)的相关文章

MySQL学习笔记(二)

-- 回顾 数据库基础知识: 关系型数据库(磁盘),建立在关系模型上的数据库,数据结构(二维表),浪费空间. 操作数据的指令集合:SQL(DDL,DML[DQL]和DCL) 完整性约束:表内和表之间(实体) mysql 关系型数据库:c/s结构软件(连接认证,发送SQL指令,服务器处理指令返回结果,客户端接收结果解析结果) mysql服务端对象:DBMS->Datebase->Table->fields sql 基本操作:库操作,表操作(字段)和数据操作 字符集问题:中文数据问题 改变服

MySQL学习笔记(二)

-- 回顾 数据库基础知识: 1.关系型数据库(磁盘),建立在关系模型上的数据库,数据结构(二维表),浪费空间. 操作数据的指令集合:SQL(DDL,DML[DQL]和DCL) 完整性约束:表内和表之间(实体) mysql 关系型数据库:c/s结构软件(连接认证,发送SQL指令,服务器处理指令返回结果,客户端接收结果解析结果) mysql服务端对象:DBMS->Datebase->Table->fields sql 基本操作:库操作,表操作(字段)和数据操作 字符集问题:中文数据问题 改

MySQL学习笔记二

Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然后每条数据得到一条结果. 如:字符串函数:而多行函数,就是多条记录同时计算,得到最终只有一条结果记录.如:sum.avg等 多行函数也称为聚集函数.分组函数,主要用于完成一些统计功能.MySQL的单行函数有如下特征: 单行函数的参数可以是变量.常量或数据列.单行函数可以接受多个参数,但返回一个值.

MySQL 学习笔记 二

Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然后每条数据得到一条结果. 如:字符串函数:而多行函数,就是多条记录同时计算,得到最终只有一条结果记录.如:sum.avg等 多行函数也称为聚集函数.分组函数,主要用于完成一些统计功能.MySQL的单行函数有如下特征: 单行函数的参数可以是变量.常量或数据列.单行函数可以接受多个参数,但返回一个值.

MySQL学习笔记(二)&mdash;查询

一.多表连接查询 新建两张表t_user.t_order.              1.内连接      返回满足条件的所有记录. (1)显式内连接      使用inner join关键字,在on子句中设定连接条件. SELECT u.id, u.name, u.address, o.orderno FROM t_user u INNER JOIN t_order o ON u.id = o.userid; 结果:          (2)隐式内连接      不包含inner join和o

MySQL学习笔记二:权限管理

1. 创建和删除用户,mysql中的用户是由用户名和主机名来确定的 create user "user_name@host_name" identified by passwd; drop user user_name; ---------------也可以直接向mysql.user表添加记录---------------- insert into mysql.user(host,user,password) values ("host_name","us

马哥学习笔记二十六——MySQL主从复制

配置MySQL复制基本步骤: 一.master 1.启用二进制日志 log-bin = master-bin log-bin-index = master-bin.index 2.选择一个惟一server-id server-id = {0-2^32} 3.创建具有复制权限的用户 REPLICATION SLAVE REPLICATION CLIENT 二.slave 1.启用中继日志 relay-log = relay-log relay-log-index = 2.选择一个惟一的server

Mysql学习笔记(二)数据类型 补充

原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与varchar char与varchar的类型相似,但是他们的保存方式和检索方式不同... char的存储结构是固定长度的存储...即指定了几个字节,那么就占用几个字节,如char(4),那么无论存入的是什么字串,那么都占用四个字节...char的 可表示长度范围为0-255的任何值,当保存的字节不

Mysql 笔记二

Mysql 笔记二 Table of Contents 1. 前言 2. Master Thread 工作方式 2.1. 主循环(loop) 2.2. 后台循(backgroup loop) 2.3. 刷新循环(flush loop) 2.4. 暂停循环(suspend loop) 3. InnoDB关键特性 3.1. 插入缓冲(Insert Buffer) 3.2. 两次写(Double Write) 3.3. 自适应哈希索引(Adaptive Hash Index),默认开启 3.4. 异步

MYSQL基础笔记(二)-SQL基本操作

SQL基本操作 基本操作:CRUD,增删改查 讲SQL的基本操作根据操作对象进行分类: 1.库操作 2.表操作 3.数据操作 库操作: 对数据库的增删改查 新增数据库: 基本语法: 1 Create database 数据库名字[库选项]: 库选项:用来约束数据库,分为两个选项:1.字符集设定:charset/character set 具体字符集(数据存储的编码格式,中文常用字符集gbk和utf8.).2.校对集设定:collate 具体校对集(数据比较的规则). 例如: 其中:数据库名字不能