mysql简单入门笔记

MYSQL的SQL语句

​ SQL: Structrued Query Langauage 结构化的查询语言

    - DDL: 数据定义语言 : 定义数据库或者表结构. alter(修改) create(创建) drop(删除) truncate(截断)

    - DML: 数据操纵语言: 用来操作表中数据:  insert(插入)  update(更新)  delete(删除)

    - DQL: 数据查询语言: 用来查询数据  select(选择)  from(从哪里查)  where(哪一条,判断条件)

    - DCL: 数据控制语言: 用来控制用户权限 grant(授权) revoke(取消授权)

cmd窗口登陆数据库:

    cmd窗口登录数据:  mysql  -uroot -proot

    -u  username 用户名

    -p  password密码

一.数据库基本语句

1.创建数据库

    create database 数据库的名字 ---用的非常多的方式

    create database day08_1;

    create database 数据库的名字 character set 字符集;

    create database day08_2 character set gbk;

    create database 数据库的名字 character set 字符集 collate 校对规则;

    -- 校对规则: 字符的比较规则 a=100  A=110

    -- 默认的校对的规则utf8_general_ci    : 不区分大小写 : a=A  条件成立

    -- utf8_bin 比较的是字符的编码, a=A 不能成立

    -- ISO-8859-1  不支持中文

    -- gbk  中文字符集

    -- utf8  国际标准字符集, 支持中文

    create database day08_3 character set utf8 collate utf8_bin;

2.查看数据库

    -- 查看数据库定义的语句: 查询的是数据库创建的语句

    show create database 数据库的名字

    --查看所有数据库

    show databases;

3.修改数据库的操作

--修改数据的字符集

alter database 数据库的名字  character set 字符集

alter database data08_2 character set utf8;

4.删除数据库

drop database 数据库名字

5.其他数据库操作命令

--切换数据库(选中数据库)

use 数据库名字

--当前选中是哪个数据库,当前正在使用哪个数据库

select database();

二.表的CRUD操作

1.创建表

--语法:

create table 表名(

列名 列的类型 [列的约束],

列名 列的类型 [列的约束]

);

--[] 代表的可有可无

create table 表名(

列名1 列的类型 [列的约束],

列名2 列的类型 [列的约束]

);

-- 列的类型

java                             mysql

int                              int

String                           char(长度)/varchar(长度)
  
                                 char(10): 固定长度字符hello 没有填满用空格补齐10个   -- 都不能超过最大长度
    
                                 varchar(10):可变长度字符hello  只占5个字符   -- 可以存放10个汉字 ,10个字符

boolean                           boolean

Date date : YYYY-MM-DD            datetime: YYYY-MM-DD hh:mm:ss  默认值是null

time : hh:mm:ss                   timestamp:YYYY-MM-DD hh:mm:ss  默认值是当前的时间, 最大取值是2038年

                                  text: 大文本类型

                                   blob: 二进制大对象类型  大电影 java-存放和读取

-- 创建员工(employee)表: 员工编号empno,员工名称ename,工资sal,部门编号deptno

create table emp(

empno int,

ename varchar(20),

sal  double,

deptno int

);

--列的约束

主键约束: primary key不能重复,不能为空  通常用在编号ID

唯一约束: unique 唯一约束: 不能重复,但是可以为空

非空约束: not null 不能为空

create table emp1(

empno int primary key,

ename varchar(20) unique,

sal double not null,

deptno int

);

--auto_increment 自动增长属性,通常是加载编号上的

create table emp1(

empno int primary key auto_increment,

ename varchar(20) unique,

sal double not null,

deptno int

);

2.查看表

--  查看所有的表

show tables;

--  查看表的创建过程,建表语句

show create table 表名

--  查看表结构

desc 表名

3.修改表

添加列(add),修改列(modify),修改列名(change),删除列(drop),修改表名(rename),修改表的字符集

-- 添加列(add)  alter table 表名 add 列名 列名类型

-- 添加性别

alter table emp1 add gender varchar(2);

-- 修改列(modify) alter table 表名 modify 列名 列的类型

-- 重定义列的类型

alter table emp1 modify gender int; 0 1 2

-- 修改列名(change)  alter table 表名 change 旧的列名 新列名 列的类型

--  将gender 改成 sex

alter table emp1 change gender sex int;

-- 删除列(drop) alter table 表名 drop 列名;

alter table emp1 drop sex;

-- 修改表名(rename) rename table 旧表名 to 新表名

rename table emp1 to emp11;

-- 修改表的字符集 alter table 表名 character set 字符集

alter table emp11 character set gbk;

4.删除表

--drop table 表名

drop table emp11;

三.表中数据的CRUD的操作

1.插入数据

--创建一张表

-- 学生表 : 学号, 姓名,性别

create table stu(

stuno int primary key auto_increment,

sname varchar(20),

gender varchar(2)

);

-- 指定列名插入:insert into 表名(列名1,列名2) values(值1,值2)

-- 注意: 列名的数量和值的数量要一一对应

insert into stu(stuno,sname) values(1,'zs');

insert into stu(stuno,sname) values(null,'lisi');

-- 不指定列名插入:必须按照顺序,把表中所有的列的数据都填上,如果不填必须填null

insert into stu values(null,'wangwu','nv');

insert into stu values(null,'wangwu','female');  --数据太长了 varchar(2)

insert into stu values(null,'zhaoliu','男');

insert into stu values(null,'zhaoliu','人妖');

insert into stu values(null,'zhaoliu','人妖王');  --错误的

insert into stu values(null,'zhaoliu','nan');    --错误的

2.删除记录(面试)

--delete from 表名 [ where 条件 ]

--删除 stuno = 1的学生信息

delete from stu where stuno=1;

--全部删除  , 逐条删除数据

delete from stu;

--面试问题: 请说一下 delete 删除表中所有数据 和 truncate 删除表中所有数据有什么差别

detele: DML(操作数据)    逐条删除数据

truncate : DDL(操作结构)  先删除表,再创建表

-- delete 和 truncate 哪一个高效 ? truncate高效

看表中数据量的大小

数据量小: delete 高效

数据量大: truncate 高效

3.更新表记录

update 表名 set 列名=列的值,列名2=列的值2  [where 条件]

update stu set gender='男';

update stu set gender='女' where stuno=1;

update stu set gender='女' where sname='wangwu';

4.语句详情

--查询语句的基本结构:  select ... from ....

select 要显示的列名 from 从哪张表里面去查询数据 [where 条件:查询的是哪条记录]

select [distinct] [列名,列名] [*] from 表名 [where 条件]

--只是查询出结果,不会改变数据库里面原有的内容

--简单查询:

---查询所有商品信息:

select * from product;

---查询商品名称和商品价格:

select pname,price from product;

---别名查询. as 的关键字 , as 关键字是可以省略  外号

--表别名: 多表查询里面

select p.pname,p.price from product p;

select p.* from product p;

--列别名: as 可省略

select pname as 商品名称,price 商品价格 from product;

去重distinct

--- 去掉重复的值 distinct

--查询所有商品的名称

select pname from product;

--去除重复的商品名称

select distinct pname from product;

-- 多列去除重复的, 必须是每一列都一样才算重复

select distinct pdesc,cno from product;

-- select运算查询 : 仅仅在查询结果上做了运算 + - * /

select pname,price*0.75 折后价 from product;

select 1+1; -- mysql里面可以这样写, 在Oracle中不可以这样

-- 条件查询 [where关键字] : 查询表中符合条件的数据

where 列名 条件

关系比较


--关系/比较运算符: > >= = < <= != <>

!= : 非标准SQL

<> : 标准SQL语法

--逻辑运算: and , or , not

--其它运算符:

is null    判断是否是空

is not null 判断是否不为空

in (集合)   在某个范围内

between..and..  在某个区间内 ,包含两端  闭区间 [10,100]  (10,100)

-- 注意: null 代表的是未知的,不可预知的内容

--查询商品价格>60元的所有商品信息

select * from product where price > 60;

-- where 后的条件写法

--查询商品价格不等于99的所有商品

select * from product where price !=99;

select * from product where price <>99;

--查询出商品价格不为null的所有商品

select * from product where price != null; -- 错误的演示

select * from product where price is not null;

-- 查询商品价格在10 到 100之间 price >=10 and price <=100;

select * from product where  price >=10 and price <=100;

select * from product where price between 10 and 100;

select * from product where price between 100 and 10; --错误的演示 [100,10]

--查询出商品价格 小于35 或者商品价格 大于900

select * from product where price <35 or price >900;

模糊查询

--like: 模糊查询

%  匹配多个字符

_  匹配单个字符

-- 查询出名字中带有辣的所有商品:

select * from product where pname like '%辣%';

-- 查询出名字第三个字是辣字的所有商品信息

select * from product where pname like '__辣%';

-- in 判断值是否在某个集合/范围

--查询出商品分类ID在 1,3,4里面的所有商品

select * from product where cno in(1,3,4);

--排序查询: order by 关键字/列名

升序: asc  ascend  默认是升序

降序: desc  descend

--0. 查询所有商品,按照价格进行排序

select * from product order by price;

select * from product order by price asc;

delete from product where pid = 9;

--1.查询所有的商品,按价格进行降序排序 (asc-升序  desc-降序);

select * from product order by price desc;

--2.查询名称有 辣 的商品,按价格降序排序

---1. 查询出所有 辣的商品

select * from product where pname like '%辣%';

---2 排序

select * from product where pname like '%辣%' order by price desc;

--模糊查询如果出现了特殊字符

create table test2(

sname varchar(20)

);

insert into test2 values('华%安');

select * from test2 where sname like '%\%%';  --使用转义符号

select * from test2 where sname like '%#%%' escape '#';

-- escape 相当于是告诉mysql 我这里面的这个#代表的是转义字符

校对规则(了解的内容): 字符的在查询语句中的比较规则

-- 创建数据库的时候, 使用默认的校对规则 utf8_general_ci 不区分大小写

create database day08_4;

use day08_4;

create table test1(

sname varchar(10)

);

insert into test1 values('abc');

select * from test1 where sname = 'ABC';

select * from test1 where sname like 'ABC';  ---能查询出结果

-- 创建数据库的时候执行字符集和校对规则  utf8_bin  比较字符的编码

create database day08_5 character set utf8 collate utf8_bin;

use day08_5;

create table test2(

sname varchar(10)

);

insert into test2 values('abc');

select * from test2 where sname = 'ABC';

select * from test2 where sname like 'ABC';  ---- 查询不出来结果

聚合函数

--聚合函数:

sum() 求和 avg()求平均值 count()统计个数 max()最大值 min()最小值

--1.获得所有商品价格的总和:

select sum(price) from product;

select sum(price) 商品总价 from product;

--2.获得所有商品的平均价格:

select avg(price) 平均价格 from product;

--3.获得所有商品的个数:

select count(pid) from product;

select count(*) from product;

select 1 from product;

select count(22) from product;  --使用常量能够提高效率

--注意: where 条件后面不能接聚合函数 having 后面可以加

select * from product where  price > avg(price);--  错误

分组 group by

--分组: group by

select 分组的条件,分组之后的操作 from 表名  group by 分组条件 having 条件过滤;

--select后控制的是要显示的内容, 只写分组的条件和分组之后的操作

--1.根据cno字段分组,分组后统计商品的个数

select cno,count(1) from product group by cno ;

select cno,pname,count(1) from product group by cno ;  --错误的演示

--分组之后的条件过滤: having

--2.根据cno分组,分组统计每组商品的平均价格 并且商品平均价格 > 60

select cno,avg(price) from product group by cno ;

select cno,avg(price) from product group by cno having avg(price)>60;

-- SQL编写顺序

--  S..F..W..G..H..O

select ... From .. where .. group by ... having ....order by

-- SQL执行顺序

F..W..G..H..S..O

from ... where .. group by ... having ...select ...order by

5.乱码解决方法:

- 终身解决方案:

1. 先关闭掉MYSQL服务器

2. 找到安装路径C:\Program Files (x86)\MySQL\MySQL Server 5.5\my.ini

注意:  可能需要修改权限

修改第57行的编码为gbk

3. 打开mysql服务
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容