MySQL登录与退出
登录: mysql -hlocalhost -P3306 -uroot -p
简写:mysql -uroot -p -h mysql服务器ip -P mysql端口号 -u 用户名 -p 密码
退出
exit
quit
\q
修改mysql提示符
prompt 提示符 \D 完整的日期 \d 当前数据库 \h 服务器名称 \u 当前用户
MySQL语法
MySQL采用结构化查询语言SQL (Structured Query Language)语言来操作数据库
- SQL语句必须以 ; 结束
- SQL语句分类
- DDL(数据定义语言): create、drop、alter、truncate
- DQL(数据查询语言): select、show
- DML(数据操作语言): insert、update、delete
- DCL (数据控制语言): grant、revoke、begin transaction、commit、roolback
- 功能函数——日期函数、数学函数、字符函数、系统函数等
MySQL中使用SQL语言几点说明
- 属于一个SQL语句,使用分号(;)结尾,否则mysql认为语句没有输入完。
- 箭头(->)代表SQL语句没有输入完
- 取消SQL语句使用(\c)
- SQL语句关键字和函数名不区分大小写(Linux区分,Windows不区分)
使用函数时,函数名和后面的括号之间不能有空格yigou_shop yigouShop
MySQL数据类型
整型 浮点型 字符型 布尔型 日期型
1. 整形
注意:int(10) unsigned zerofill //最大10位数字的无符号整数 整数类型的语法(以INT为例): INT[(M)] 注意:在MySQL中,允许在整数后面带一个表示显示宽度的数字 如:INT(5),表示宽度为5 0-99999 00000-99999
2. 浮点型
float[(总位数,小数点后位数)] 最大精确到小数点后7位 double[(总位数,小数点后位数)] 最大精确到小数点后15位 注:超过限定长度将进行四舍五入计算
货币数据类型 decimal(P,D) P是表示有效数字数的精度。 P范围为1?65。 D是表示小数点后的位数。 D的范围是0~30。MySQL要求D小于或等于(<=)P。
3. 字符串类型
注意事项
CHAR的长度范围在0~255之间 VARCHAR类型的长度范围0~65535 在使用CHAR和VARCHAR类型时,当我们传入的实际的值的长度大于指定的长度,字符串会被截取至指定长度 在使用CHAR类型时,如果我们传入的值的长度小于指定长度,实际长度会使用空格补至指定长度 在使用VARCHAR类型时,如果我们传入的值的长度小于指定长度,实际长度即为传入字符串的长度,不会使用空格填补 CHAR要比VARCHAR效率更高,但占用空间较大 BLOB和TEXT类型是可以存放任意大数据的数据类型 BLOB区分大小写,TEXT不区分大小写 ENUM和SET类型是特殊的的串类型,其列值必须从固定的串集中选择 ENUM只能选择其中一个值,SET可以选择多个值
日期类型
布尔值
BOOLEAN或简写为BOOL 0表示假,非0表示真,一般用1表示
MySQL的操作- 按操作对象可分为:
- 数据库操作
数据表操作 数据记录操作 - 按操作类型可分为
增加 (Create)操作 修改 (Update)操作 查询 (Read)操作 删除 (Delete)操作
数据库操作
添加数据库
create database [if not exists] 库名 [[default] character set 编码方式]
查看数据库
show databases 查看MySQL下有哪些数据库
show create database 库名 查看某个数据库的详细信息
修改数据库
alter database 库名 [default] character set 编码方式
删除数据库
drop database [if exists] 库名
数据表操作
操作数据表之前需要先打开数据表所在的数据库
use 库名
添加数据表
create table [if not exists] 表名(
字段名 数据类型 [约束],
字段名 数据类型 [约束],
......
字段名 数据类型 [约束]
)[ENGINE=MyISAM DEFAULT CHARSET=utf8 collate utf8_general_ci] ;
查看数据表
show tables 查看当前数据下有哪此数据表
show create talbe 表名 查看建表信息
desc 表名 查看表结构
修改数据表
/* 增加字段 */
alter table 表名 add [colum] 字段名 数据类型 [约束]
/* 修改字段名 */
alter table 表名 change 字段名 新字段名 数据类型 [约束]
/* 删除字段 */
alter table 表名 drop [colum] 字段名
/* 更改表名 */
alter table 表名 rename [to] 新表名
删除数据表
drop table 表名
数据记录操作
添加一条数据
INSERT INTO 表名 [(字段名1,字段名2,…字段名n)] VALUES(‘值1’,‘值2’,…,’值n’);
添加多条数据
INSERT INTO 表名 [(字段名1,字段名2,…字段名n)]
VALUES(‘值1’,‘值2’,…,‘值n’),
(‘值1’,‘值2’,…,‘值n’),
......
(‘值1’,‘值2’,…,’值n’);
删除记录
delete from 表名 [where 条件子句] [order by 字段 asc|desc ] [limit 条数]
删除全部记录
truncate table 表名
更新记录
根据条件更新记录
update 表名 set 字段名=新值,字段名=新值,....... [where 条件子句] [order by 字段 asc|desc ] [limit 条数]
查询记录
单表查询
select 字段1,字段2,...... from 表名 [where 条件子句] [group by 字段][having 条件子句][order by 字段] [limit [起始值] 条数]
where 子句是判断语句,用来设定条件,限制只更新匹配的行,如果不带where子句,则更新所有行数据
起始值从1开始
条件查询
like模糊查询通配符: % 通配0个或多个字符 %李% _ 通配一个字符 binary 区分大小写 [abcdef] 通配字符列中的任何单一字符 [^abcdef] 通配不在字符列中的任何单一字符
Alias 别名
通过使用 SQL,可以为字段名称和表名称指定别名
SELECT 字段名 AS 别名 FROM 表名
SELECT * FROM 表名 AS 表别名---多表查询
distinct 去重复
关键词 DISTINCT 用于返回唯一不同的值
SELECT DISTINCT 字段名称 FROM 表名称
增删改查数据
单表查询
select 字段1,字段2,...... from 表名 [where 条件子句] [group by 字段][haveing 条件子句][order by 字段] [limit [起始值] 条数]
插入记录操作
INSERT [INTO] <表名> [列名] VALUES <值列表>
如果表名后面没写字段名,则默认是向所有的字段添加值,另外字符串值应该用‘ ’或“ ”引号括起来
/* 向people表中添加一条记录: */
insert into people(name,age) values(“zhangsan”,20);
更改记录操作
UPDATE <表名> SET <列名 = 更新值> [WHERE <更新条件>]
where 子句是判断语句,用来设定条件,限制只更新匹配的行,如果不带where子句,则更新所有行数据
/* 将student表中的所有学生名称为"Alex"的改为"Tom":*/
update student set sname="Tom" where sname="Alex";
删除操作
DELETE FROM <表名> [WHERE <删除条件>]
此语句删除表中的行,如果不带where子句,则删除整个表中的记录,但是表不被删除。
/* 删除student表中的所有年龄小于18岁的记录:*/
delete from student where sage<18;
update sudent set type=0 where sage<18
设定编码方式
use shop set names utf8;(windows自带的编码方式是gbk)
多边操作
连接查询:
1. 同时涉及多个表的查询称为连接查询;
2. 用来连接两个表的条件称为连接条件
多表插入
将查询到的记录插入到已存在的表中
insert 表名(字段列表) select 语句
insert brand(brand_name) select brand_name from goods group by brand_name;
多表查询
创建新表并将查询到的记录插入到新表中
create table 表名[( 字段名 数据类型 [约束], … )] select 语句 ;
create table category(
cid smallint unsigned key auto_increment
)
select cate_name from goods group by cate_name;
连接类型
select 字段列表 from 表1 [[as] 别名] 连接类型 表2 [[as] 别名] on 连接条件 where …
内连接 inner join 外联接 左外连接 left [outer] join 右外连接 right [outer] join
内连接
显示左表及右表中符合连接条件的记录
select id,goods_name,brand_name,cate_name from goods
inner join brand on goods.brand_id=brand.bid
inner join category on goods.cate_id=category.cid;
左外连接
显示左表全部记录及右表中符合连接条件的记录
select id,goods_name,brand_name,cate_name from goods
left join brand on goods.brand_id=brand.bid
left join category on goods.cate_id=category.cid;
右外连接
显示右表全部记录及左表中符合连接条件的记录
select id,goods_name,brand_name,cate_name from goods
right join brand on goods.brand_id=brand.bid
right join category on goods.cate_id=category.cid;
类似于内连接的多表查询
select 字段列表 from 表1,表2,表3… where 连接条件1 and 连接条件2 …
select id,goods_name,cate_name,brand_name,price from goods as g,brand as b,category as c where g.brand_id=b.bid and g.cate_id=c.cid;
多表更新
update 表1 [[as] 别名] inner join 表2 [[as] 别名] on 连接条件 [where 条件语句] set 表1.字段=表2.字段,…
update goods as g inner join category as c on g.cate_name=c.cate_name set g.cate_name=c.cid;
update goods as g inner join brand as b on g.brand_name=b.brand_name set g.brand_name=b.bid;
多表删除
delete 表名 from 数据表参照关系 where 语句
delete t1 from goods as t1 left join
(select id,goods_name from goods group by goods_name having count(goods_name)>1) as t2 on t1.goods_name=t2.goods_name
where t1.id >t2.id;
|