MySql的登录登出操作
//登录
//输入密码登录
//登出
exit;
一、关于库的操作
1.数据库的创建与删除
//创建
create database <数据库名>;
//删除
drop database <数据库名>;
2.数据库的查看与使用
//查看
show databases;
//使用
use <数据库名>;
二、关于表的操作
1.表的创建
1.1类型
1.1.1常用数值类型
1.1.2常用字符类型
1.1.3日期时间类型
1.2约束
- 主键primary key:物理上存储的顺序
- 自增auto_increment:表示自动增长(一般主键使用)
- 非空not null:此字段不允许填写空值
- 惟一unique:此字段的值不允许重复
- 默认default:当不填写此值时会使用默认值,如果填写时以填写为准
- 外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常
1.3表的相关操作
(1)查看库中的所有表
show tables;
(2)查看表的结构
desc 表名;
- 查看表的相关语句
show create table 表名;
(3)创建表
create table 表名(属性1 类型 约束条件,
属性2 类型 约束条件,
属性3 类型 约束条件);
(4)修改表
- 添加字段
alter table 表名 add 列名 类型;
alter table students add birthday datetime;
- 修改字段–重命名
alter table 表名 change 原名 新名 类型及约束;
alter table students change birthday birth datetime not null;
- 修改字段–不重命名
alter table 表名 modify 列名 类型及约束;
alter table students modify birth date not null;
- 删除字段
alter table 表名 drop 列名;
alter table students drop birthday;
(5)查询表
- 查询所有列
select * from 表名;
- 查询指定列,可以使用as为列或表指定别名(支持中文)
select 列1,列2 from 表名;
(6)向表中插入数据
- 全列插入:值的顺序与表中字段的顺序对应
insert into 表名 values(字段1对应value,字段2对应value,...)
例:
insert into students values(0,’郭靖‘,1,'蒙古','2016-1-2');
- 部分列插入:值的顺序与给出的列顺序对应
insert into 表名(列1,...) values(值1,...)
例:
insert into students(name,hometown,birthday) values('黄蓉','桃花岛','2016-3-2');
- 全列多行插入:值的顺序与给出的列顺序对应
insert into 表名(列1,...) values(值1,...),(值1,...)...;
例:
insert into students(name) values('杨康'),('杨过'),('小龙女');
(7)修改数据
update 表名 set 列1=值1,列2=值2... where 条件
例:
update students set gender=0,hometown='北京' where id=5;
(8)删除数据
delete from 表名 where 条件
例:
delete from students where id=5;
(9)删除表
drop table <表名>;
2.表的查询
基本查询:
(1)查看表中的所有元组对应的所有字段:
select * from 表名;
(2)查看表中的查看表中的所有元组对应的指定字段
select 属性名1,属性名2, ...... from 表名;
(3)查询指定的元组:
根据题目中的要求或者项目开发的需求写合适筛选条件
select * from 表名 where 筛选条件;
select 属性名1,属性名2, ...... from 表名 where 筛选条件;
(4)like
% : 代表任意数量个任意字符
_ : 代表一个任意字符
//最后一个字是名
select * from student where name like '%明';
//这个 人名字一共三个字,且中间的字为安
select * from student where name like '_安_';
(5)limit off,len;
off 数据的起始位置
len ; 数据的长度
如果off = 0 则可以省略
order by子句(排序):按照“属性名”指定的字段进行排序。排序方式由“asc”和“desc”两个参数指出,默认是按照“asc”来排序,即升序。
select * from student where name like '小%' limit 3;
order by 属性名 :表示查询出的数据按照这个属性进行排序
(6)在,不在
in
not in
select * from student where age in(15,12,13);
(7) 空,不空
is null;
is not null ;
select * from student where name is null;
将student表中name为空的人查询出来
(8)between…and…
// 查询年纪为15 到 20 之间的 (使用between and 方法)
select * from student where age between 15 and 20;
//其他表示方法
select * from student where age <= 20 and age >= 15;
(9) where子句(条件查询):按照“条件表达式”指定的条件进行查询。
(10) group by子句(分组):按照“属性名”指定的字段进行分组。group by子句通常和count()、sum()等聚合函数一起使用。
(11)having子句(筛选):有group by才能having子句,只有满足“条件表达式”中指定的条件的才能够输出。
select 类别, sum(数量) as 数量之和 from A
group by 类别
having sum(数量) > 18
//having 与where联合使用
select 类别, SUM(数量)from A
where 数量 >8
group by 类别
having SUM(数量) >10
having一般跟在group by之后,执行记录组选择的一部分来工作的。where则是执行所有数据来工作的。
再者having可以用聚合函数,如having sum(属性)>1000
(12) limit(限制结果集)。
(13)mysql中五种常用的聚合函数:
- max(列名):求最大值。
- min(列名):求最小值。
- sum(列名):求和。
- avg(列名):求平均值。
- count(列名):统计记录的条数。
子查询
- where
//查询id最大的一件商品(使用where子查询实现)
SELECT goods_id,goods_name,shop_price FROM goods
WHERE goods_id = (SELECT MAX(goods_id) FROM goods);
- from
//查询每个类别下id最大的商品(使用from型子查询)
SELECT goods_id,goods_name,cat_id,shop_price FROM
(SELECT goods_id,goods_name,cat_id,shop_price FROM goods ORDER BY cat_id ASC,goods_id DESC) AS tmp
GROUP BY cat_id;
- exists
//从类别表中取出其类别下有商品的类别(如果该类别下没有商品,则不取出)
//[使用exists子查询]
SELECT c.cat_id,c.cat_name FROM category c WHERE EXISTS
(SELECT 1 FROM goods g WHERE g.cat_id = c.cat_id);
内连接
(1)select 表1.属性名,.... 表3.* from 表1,表2,表3..........
where 表1.EX = 表2.EX and 表2.EX = 表3.EX and 表3.EX =表4.EX ......;
select a.属性名,.... c.* from 表1 a,表2 b,表3 c..........
where a.EX = b.EX and b.EX = c.EX and c.EX =d.EX ......;
(2) (inner) join 括号表示可以省略
select 表1.属性名,.... 表3.* from 表1 (inner)
join 表2 on 表1.EX = 表2.EX (inner)join 表3 on 表2.EX = 表3.EX .......;
select 表1.属性名,.... 表3.* from 表1 a (inner) join
表2 b on a.EX = b.EX (inner) join 表3 c on b.EX = c.EX .......;
外链接
(1)select 表1.属性名,.... 表3.* from 表1,表2,表3..........
where 表1.EX = 表2.EX and 表2.EX = 表3.EX and 表3.EX =表4.EX ......;
select a.属性名,.... c.* from 表1 a,表2 b,表3 c..........
where a.EX = b.EX and b.EX = c.EX and c.EX =d.EX ......;
(2) (inner) join 括号表示可以省略
select 表1.属性名,.... 表3.* from 表1 (inner)join 表2 on 表1.EX = 表2.EX (inner)join 表3 on 表2.EX = 表3.EX .......;
select 表1.属性名,.... 表3.* from 表1 a (inner) join 表2 b on a.EX = b.EX (inner) join 表3 c on
b.EX = c.EX .......;
几种连接合在一起使用
select 表1.属性名,.... 表3.* from 表1 right join 表2 on 表1.EX = 表2.EX left join 表3 on
表2.EX = 表3.EX (inner)join 表4 on 表3.EX = 表4.EX .......;
select 表1.属性名,.... 表3.* from 表1 a right 表2 b on a.EX = b.EX left join 表3 c on
b.EX = c.EX join 表4 d on c.EX = d.EX .......;
3.数据库编码问题
mysql编码问题
show variables like ‘character_set_database’; //查询mysql数据库默认编码
±-----------------------±-------+
| Variable_name | Value |
±-----------------------±-------+
| character_set_database | latin1 |
±-----------------------±-------+
(1)给varchar/char 前面+n
只改变一个属性的编码形式。
create table test_char (
name nvarchar(10)
);
(2)在属性后面加 character set utf-8
只改变一个属性的编码形式。
create table test_char (
name varchar(10) CHARACTER SET utf8
);
create table test_char1 (
sex enum('男','女') CHARACTER SET utf8
);
create table sex_tb1(
Ssex enum('m','w')
);
alter table sex_tb1 modify Ssex enum('男','女') character set utf8;
(3)改变整张表的编码形式
create table test_char3 (
name varchar(10)
)CHARSET=utf8;
改变整个数据库编码形式
改变mysql的配置文件 my.ini
这个配置文件是只在mysql 服务启动的时候会读取的,如果改变了mysql的配置文件一定要重启
服务之后改变好的配置才会起到作用。
4.DDL
DDL(Data Definition Language 数据定义语言)用于操作对象和对象的属性,这种对象包括数据库本身,以及数据库对象,像:表、视图等等,DDL对这些对象和属性的管理和定义具体表现在Create、Drop和Alter上。特别注意:DDL操作的“对象”的概念,”对象“包括对象及对象的属性,而且对象最小也比记录大个层次。以表举例:Create创建数据表,Alter可以更改该表的字段,Drop可以删除这个表,从这里我们可以看到,DDL所站的高度,他不会对具体的数据进行操作。
- DDL的主要语句(操作)
Create语句:可以创建数据库和数据库的一些对象。
Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。
Alter语句:修改数据表定义及属性。 - DDL的操作对象(表)
(1)表的概念
表的创建就是用来存放数据用的,由于我们存放的数据的不通,所以我们需要定义些数据类型,以方便管理。
(2)表的属性 - 主键属性:主键就是主键约束,只不过起的名字不同了,主键的起名偏向于虚的(就是描述描述这件事),主键约束起名偏向于实得(就是描述操作的实施),描述的都是同一件事,主键约束就是表中的一个属性;在一个表中最多可以有一个主键;一个主键可以定义在一个或多个字段;主键使一个或多个字段的值必须唯一且不为空,这样做可以通过该字段或该组字段中的值唯一的代表一条记录。
- 唯一属性:一个表中只能有一个主键属性,为了方表用户,提出唯一约束;唯一约束可以定义在一个或多个字段上;唯一约束使该字段或该组字段中的值唯一,可以为空,但是,不能重复。
- 外键属性:又叫外键,又叫外键约束,跟主键和主键约束的关系是一样的;外键约束针对的两个表,如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表,但要注意,必须要计算机要知道你是这种关系。
- 核查、Null和缺省属性:核查属性又叫核查约束,Null属性又叫Null约束,缺省属性又叫缺省约束;这些名称是描述一件事,描述一种情况,这件事或这张情况我们当然可以人为的那样特意做(输入数据是注意就行),但是,他们的本意是实现自动化,也就是让计算机做这件事。
5.DML
- DML的概述
DML(Data Manipulation Language 数据操控语言)用于操作数据库对象中包含的数据,也就是说操作的单位是记录。
- DML的主要语句(操作)
Insert语句:向数据表张插入一条记录。
Delete语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是,它的操作对象仍是记录。
Update语句:用于修改已存在表中的记录的内容。
DML的操作对象——记录 - 注意
当我们对记录进行Insert、Delete和Update操作的时候,一定要注意,一定要清楚DDL对其的一些操作。
6.DCL
- DCL的概述
DCL(Data Control Language 数据控制语句)的操作是数据库对象的权限,这些操作的确定使数据更加的安全。 - DCL的主要语句(操作)
Grant语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。
Revoke语句:可以废除某用户或某组或所有用户访问权限
DCL的操作对象(用户) 此时的用户指的是数据库用户。