进入数据库
mysql -hlocalhost -uroot -p
-h表示服务器名,localhost表示本地
-u为数据库用户名,root是mysql默认用户名
-p为密码
创建数据库
create database 数据库名 character set 编码;
编码类型可省略
查询所有数据库
show database;
查询数据库定义信息
show create database 数据库名;
删除数据库
drop database 数据库名;
修改数据库字符类型
alter database 数据库名 character set 类型;
查看当前数据库
select database();
切换数据库
use 数据库名;
创建表
create table 表名(
字段名 类型,
字段名 类型,
字段名 类型,
);
常用数据类型
int:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
char:固定长度字符串类型;
varchar:可变长度字符串类型;
text:字符串类型;
blob:字节类型;
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
删除表
drop table 表名;
查询所有表
show tables;
查询表的字段信息
desc 表名;
表上添加一个列
alter table 表名 add 列名 类型;
修改列类型
alter table 表名 modify 列名 类型;
删除列
alter table 表名 drop 列名;
修改表名
rename table 原表名 to 新表名;
查询表的定义信息
SHOW CREATE TABLE 表名;
修改表的编码
ALTER TABLE 表名 CHARACTER SET 编码;
修改列名
ALTER TABLE 表名 CHANGE 原列名 新列名 类型;
插入数据
INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);
列名与列值的类型、个数、顺序要一一对应
如果插入空值,请使用null
插入的日期和字符,使用引号括起来
修改数据
UPDATE 表名 SET 列名1=列值1,列名2=列值2 ..... WHERE 列名=值;
WHERE表示条件
删除数据
DELETE FROM 表名 WHERE 列名=列值;
DELETE 删除表中的数据,表结构还在,删除后的数据可以找回
TRUNCATE TABLE 表名;
TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表。
删除的数据不能找回。执行速度比DELETE快。
查询数据
查询所有列
SELECT * FROM 表名;
查询指定列
SELECT 列名 FROM 表名;
条件查询
SELECT * FROM 表名 WHERE 条件;
条件运算符
数值和判断 =、!=、<>、<、<=、>、>=;
BETWEEN…AND;
IN(set);
值为空和值不为空 IS NULL; IS NOT NULL;
和(与) AND;
或 OR;
非 NOT;
模糊查询
SELECT * FROM 表名 WHERE LIKE 通配符;
模糊查询需要使用关键字LIKE
模糊查询通配符
_ (下划线) 任意一个字符
% (百分号) 任意0~n个字符
字段控制查询: 去除重复记录
SELECT DISTINCT 字段 FROM 表名;
给列添加别名
SELECT *,列名 AS 别名 FROM 表名;
查询并排序
升序排序(默认)
SELECT *FROM 表名 ORDER BY 列名 ASC;
降序排序
SELECT *FROM 表名 ORDER BY 列名 DASC;
聚合函数
SELECT 函数(列) FROM 表名;
COUNT():统计指定列不为NULL的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
分组查询
当需要分组查询时需要使用GROUP BY子句
凡和聚合函数同时出现的列名,一定要写在group by 之后
having与where的区别:
having是在分组后对数据进行过滤.
where是在分组前对数据进行过滤
LIMIT 方言
LIMIT用来限定查询结果的起始行,以及总行数。
查询5行记录,起始行从0开始
SELECT * FROM 表名 LIMIT 0, 5;
注:每个表中要有一个主键。
特点:数据唯一,且不能为null
第一种添加方式:
CREATE TABLE student(
id int primary key,
name varchar(50)
);
第二种添加方式:此种方式优势在于可以创建联合主键
CREATE TABLE student(
id int,
name varchar(50),
primary key(id)
);
CREATE TABLE student(
classid int,
stuid int,
name varchar(50),
primary key(classid,stuid)
);
第三种添加方式:
CREATE TABLE student(
id int,
name varchar(50)
);
ALTER TABLE student ADD PRIMARY KEY (id);
特点:数据不能重复。
CREATE TABLE student(
Id int primary key,
Name varchar(50) unique
);
自动增长列(auto_increment)
给主键添加自动增长的数值,列只能是整数类型
CREATE TABLE student(
Id int primary key auto_increment,
Name varchar(50)
);
INSERT INTO student(name) values(‘tom’);
非空约束:not null
CREATE TABLE student(
Id int pirmary key,
Name varchar(50) not null,
Sex varchar(10)
);
INSERT INTO student values(1,’tom’,null);
默认值约束 default
CREATE TABLE student(
Id int pirmary key,
Name varchar(50) not null,
Sex varchar(10) default ‘男’
);
insert into student1 values(1,'tom','女');
insert into student1 values(2,'jerry',default);
如果不输入值就用默认的值
外键约束:FOREIGN KEY
CREATE TABLE student(
sid int pirmary key,
name varchar(50) not null,
sex varchar(10) default ‘男’
);
create table score(
id int,
score int,
sid int , -- 外键列的数据类型一定要与主键的类型一致
CONSTRAINT fk_score_sid foreign key (sid) references student(id)
);
第二种添加外键方式。
ALTER TABLE score1 ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES stu(id);
多表查询
合并结果集
合并结果集就是把两个select语句的查询结果合并到一起
UNION:去除重复记录,
例如:SELECT * FROM t1 UNION SELECT * FROM t2;
UNION ALL:不去除重复记录,
例如:SELECT * FROM t1 UNION ALL SELECT * FROM t2。
被合并的两个结果:列数、列类型必须相同。
连接查询
内连接
方言
SELECT e.ename,e.sal,e.comm,d.dname
FROM emp AS e,dept AS d
WHERE e.deptno=d.deptno;
为表指定别名,然后在引用列时使用别名
SQL标准
SELECT *
FROM emp e
INNER JOIN dept d
ON e.deptno=d.deptno;
外连接
外连接的特点:查询出的结果存在不满足条件的可能
左连接
SELECT * FROM emp e
LEFT OUTER JOIN dept d
ON e.deptno=d.deptno;
左连接是先查询出左表(即以左表为主)
然后查询右表,将右表中满足条件的显示出来,
不满足条件的显示NULL
右连接
SELECT * FROM emp e
RIGHT OUTER JOIN dept d
ON e.deptno=d.deptno;
右连接就是先把右表中所有记录都查询出来
然后左表满足条件的显示,不满足显示NULL。
连接不限与两张表,连接查询也可以是三张、四张,甚至N张表的连接查询。
通常连接查询不可能需要整个笛卡尔积,而只是需要其中一部分,
那么这时就需要使用条件来去除不需要的记录。
这个条件大多数情况下都是使用主外键关系去除。
SELECT * FROM emp NATURAL JOIN dept;
SELECT * FROM emp NATURAL LEFT JOIN dept;
SELECT * FROM emp NATURAL RIGHT JOIN dept;
两张连接的表中名称和类型完全一致的列作为条件,
例如emp和dept表都存在deptno列,并且类型一致,
所以会被自然连接找到!
子查询
子查询就是嵌套查询,即SELECT中包含SELECT,
如果一条语句中存在两个,或两个以上SELECT,
那么就是子查询语句了
自连接:自己连接自己,起别名
SELECT e1.empno , e1.ename,e2.mgr,e2.ename
FROM emp e1, emp e2
WHERE e1.mgr = e2.empno AND e1.empno = 7369;
生成SQL脚本 导出数据
mysqldump –u用户名 –p密码 数据库名>生成的脚本文件路径
执行SQL脚本 恢复数据
前提:必须先创建数据库名
执行SQL脚本需要登录mysql,然后进入指定数据库,才可以执行SQL脚本
SOURCE 脚本文件路径
还可以通过下面的方式来执行脚本文件:
mysql –u用户名 –p密码 数据库<要执行脚本文件路径
这种方式无需登录mysql!
注意:在CMD下 命令不能加;
mysql -hlocalhost -uroot -p
-h表示服务器名,localhost表示本地
-u为数据库用户名,root是mysql默认用户名
-p为密码
创建数据库
create database 数据库名 character set 编码;
编码类型可省略
查询所有数据库
show database;
查询数据库定义信息
show create database 数据库名;
删除数据库
drop database 数据库名;
修改数据库字符类型
alter database 数据库名 character set 类型;
查看当前数据库
select database();
切换数据库
use 数据库名;
创建表
create table 表名(
字段名 类型,
字段名 类型,
字段名 类型,
);
常用数据类型
int:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
char:固定长度字符串类型;
varchar:可变长度字符串类型;
text:字符串类型;
blob:字节类型;
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
删除表
drop table 表名;
查询所有表
show tables;
查询表的字段信息
desc 表名;
表上添加一个列
alter table 表名 add 列名 类型;
修改列类型
alter table 表名 modify 列名 类型;
删除列
alter table 表名 drop 列名;
修改表名
rename table 原表名 to 新表名;
查询表的定义信息
SHOW CREATE TABLE 表名;
修改表的编码
ALTER TABLE 表名 CHARACTER SET 编码;
修改列名
ALTER TABLE 表名 CHANGE 原列名 新列名 类型;
插入数据
INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);
列名与列值的类型、个数、顺序要一一对应
如果插入空值,请使用null
插入的日期和字符,使用引号括起来
修改数据
UPDATE 表名 SET 列名1=列值1,列名2=列值2 ..... WHERE 列名=值;
WHERE表示条件
删除数据
DELETE FROM 表名 WHERE 列名=列值;
DELETE 删除表中的数据,表结构还在,删除后的数据可以找回
TRUNCATE TABLE 表名;
TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表。
删除的数据不能找回。执行速度比DELETE快。
查询数据
查询所有列
SELECT * FROM 表名;
查询指定列
SELECT 列名 FROM 表名;
条件查询
SELECT * FROM 表名 WHERE 条件;
条件运算符
数值和判断 =、!=、<>、<、<=、>、>=;
BETWEEN…AND;
IN(set);
值为空和值不为空 IS NULL; IS NOT NULL;
和(与) AND;
或 OR;
非 NOT;
模糊查询
SELECT * FROM 表名 WHERE LIKE 通配符;
模糊查询需要使用关键字LIKE
模糊查询通配符
_ (下划线) 任意一个字符
% (百分号) 任意0~n个字符
字段控制查询: 去除重复记录
SELECT DISTINCT 字段 FROM 表名;
给列添加别名
SELECT *,列名 AS 别名 FROM 表名;
查询并排序
升序排序(默认)
SELECT *FROM 表名 ORDER BY 列名 ASC;
降序排序
SELECT *FROM 表名 ORDER BY 列名 DASC;
聚合函数
SELECT 函数(列) FROM 表名;
COUNT():统计指定列不为NULL的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
分组查询
当需要分组查询时需要使用GROUP BY子句
凡和聚合函数同时出现的列名,一定要写在group by 之后
having与where的区别:
having是在分组后对数据进行过滤.
where是在分组前对数据进行过滤
LIMIT 方言
LIMIT用来限定查询结果的起始行,以及总行数。
查询5行记录,起始行从0开始
SELECT * FROM 表名 LIMIT 0, 5;
约束
主键约束(primary key)注:每个表中要有一个主键。
特点:数据唯一,且不能为null
第一种添加方式:
CREATE TABLE student(
id int primary key,
name varchar(50)
);
第二种添加方式:此种方式优势在于可以创建联合主键
CREATE TABLE student(
id int,
name varchar(50),
primary key(id)
);
CREATE TABLE student(
classid int,
stuid int,
name varchar(50),
primary key(classid,stuid)
);
第三种添加方式:
CREATE TABLE student(
id int,
name varchar(50)
);
ALTER TABLE student ADD PRIMARY KEY (id);
特点:数据不能重复。
CREATE TABLE student(
Id int primary key,
Name varchar(50) unique
);
自动增长列(auto_increment)
给主键添加自动增长的数值,列只能是整数类型
CREATE TABLE student(
Id int primary key auto_increment,
Name varchar(50)
);
INSERT INTO student(name) values(‘tom’);
非空约束:not null
CREATE TABLE student(
Id int pirmary key,
Name varchar(50) not null,
Sex varchar(10)
);
INSERT INTO student values(1,’tom’,null);
默认值约束 default
CREATE TABLE student(
Id int pirmary key,
Name varchar(50) not null,
Sex varchar(10) default ‘男’
);
insert into student1 values(1,'tom','女');
insert into student1 values(2,'jerry',default);
如果不输入值就用默认的值
外键约束:FOREIGN KEY
CREATE TABLE student(
sid int pirmary key,
name varchar(50) not null,
sex varchar(10) default ‘男’
);
create table score(
id int,
score int,
sid int , -- 外键列的数据类型一定要与主键的类型一致
CONSTRAINT fk_score_sid foreign key (sid) references student(id)
);
第二种添加外键方式。
ALTER TABLE score1 ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES stu(id);
多表查询
合并结果集
合并结果集就是把两个select语句的查询结果合并到一起
UNION:去除重复记录,
例如:SELECT * FROM t1 UNION SELECT * FROM t2;
UNION ALL:不去除重复记录,
例如:SELECT * FROM t1 UNION ALL SELECT * FROM t2。
被合并的两个结果:列数、列类型必须相同。
连接查询
内连接
方言
SELECT e.ename,e.sal,e.comm,d.dname
FROM emp AS e,dept AS d
WHERE e.deptno=d.deptno;
为表指定别名,然后在引用列时使用别名
SQL标准
SELECT *
FROM emp e
INNER JOIN dept d
ON e.deptno=d.deptno;
外连接
外连接的特点:查询出的结果存在不满足条件的可能
左连接
SELECT * FROM emp e
LEFT OUTER JOIN dept d
ON e.deptno=d.deptno;
左连接是先查询出左表(即以左表为主)
然后查询右表,将右表中满足条件的显示出来,
不满足条件的显示NULL
右连接
SELECT * FROM emp e
RIGHT OUTER JOIN dept d
ON e.deptno=d.deptno;
右连接就是先把右表中所有记录都查询出来
然后左表满足条件的显示,不满足显示NULL。
连接不限与两张表,连接查询也可以是三张、四张,甚至N张表的连接查询。
通常连接查询不可能需要整个笛卡尔积,而只是需要其中一部分,
那么这时就需要使用条件来去除不需要的记录。
这个条件大多数情况下都是使用主外键关系去除。
SELECT * FROM emp NATURAL JOIN dept;
SELECT * FROM emp NATURAL LEFT JOIN dept;
SELECT * FROM emp NATURAL RIGHT JOIN dept;
两张连接的表中名称和类型完全一致的列作为条件,
例如emp和dept表都存在deptno列,并且类型一致,
所以会被自然连接找到!
子查询
子查询就是嵌套查询,即SELECT中包含SELECT,
如果一条语句中存在两个,或两个以上SELECT,
那么就是子查询语句了
自连接:自己连接自己,起别名
SELECT e1.empno , e1.ename,e2.mgr,e2.ename
FROM emp e1, emp e2
WHERE e1.mgr = e2.empno AND e1.empno = 7369;
生成SQL脚本 导出数据
mysqldump –u用户名 –p密码 数据库名>生成的脚本文件路径
执行SQL脚本 恢复数据
前提:必须先创建数据库名
执行SQL脚本需要登录mysql,然后进入指定数据库,才可以执行SQL脚本
SOURCE 脚本文件路径
还可以通过下面的方式来执行脚本文件:
mysql –u用户名 –p密码 数据库<要执行脚本文件路径
这种方式无需登录mysql!
注意:在CMD下 命令不能加;