Mysql常见指令:

1(部分命令)

名称        解释命令
DDL(数据定义语言)定义和管理数据对象,如数据库,数据表等create、drop、alter
DML(数据操作语言)用于操作数据库对象中所包含的数据insert、update、delete
DQL(数据查询语言)用于查询数据库数据select
DCL(数据控制语言)用于管理数据库的语言,包括管理权限及数据更改grant、commit、rollback

1.命令行链接数据库:进入cmd命令行:

mysql -uroot -p(密码)

2.更改密码:首先进入mysql  注释 --

update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';

3.查看所有的数据库:

show database;

4.使用某个数据库:

-- use  数据库名

5.查看某个数据库的表:

--show tables;

6.显示上表的具体信息

--describe 表名;

7.创建数据库

create database 数据库名;

8:exit;退出链接;

9 -- 单行注释   /**/多行注释

2 操作数据库

操作数据库>操作数据库中的表>操作数据库中表的数据

mysql不区分大小写

2.1、操作数据库

1、创建数据库

create database if not exists 数据库名

2、 删除数据库

drop database if exists 数据库名

3、使用数据库

如果你的表名或者字段名是一个特殊字符需要用  `  `符号

4.查看所有的数据库:

show databases

2.2数据库的列类型

数值

tinyint 1 

smallint 2   

mediumint 3   

int 4

bigint 8 

float 4

double 8

decimal 字符串形式浮点数 金融计算的时候

字符串

char 固定大写0~255

varchar 可变字符串 0~65535 常用string

tinytext 微型文本 2^8-1

text 文本串2^16-1

时间日期

data YYY-MM-DD 日期

time HH: mm: ss时间格式

datetime YYY-MM-DD HH:mm:ss

timestamp 时间戳

year年份表示

null

没有值,未知

==注意,不要用null进行计算

2.3、数据库的字段属性

Unsigned:

无符号的整数;声明了该列不能声明为负数

zerofill;

0填充;不足额位数,使用0来填充;

自增:通常理解为自增,自动在上一条记录的基础上自增1

通常用来设计唯一的主键 index 必须是整数类型

非空:null not null

假设设置为not null 如果不给值,就会报错

2.4创建数据库表

1.1、创建数据库列子

CREATE TABLE IF NOT EXISTS `student`(
      `id` INT(4)NOT NULL AUTO_INCREMENT COMMENT '学号', 
      `name`VARCHAR(30) NOT NULL DEFAULT'匿名'COMMENT'姓名',
      `pwd`VARCHAR(20)NOT NULL DEFAULT'123456'COMMENT'密码',
      `sex`VARCHAR(2)NOT NULL DEFAULT'女'COMMENT'性别',
      `birthday`DATETIME DEFAULT NULL COMMENT'家庭住址',
      `address`VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
      `email`VARCHAR(50) DEFAULT NULL COMMENT'邮箱',
       PRIMARY KEY(`id`)#主键一个表只有一个主键 在最后设置

)ENGINE = INNODB  DEFAULT CHARSET=utf8

格式;

create table [if not exists] `表名`(

`字段名` 列类型  [属性] [索引] [注释],

`字段名` 列类型  [属性] [索引] [注释],

`字段名` 列类型  [属性] [索引] [注释],

primary key(`字段名`),

)engine = innodb default charset = utf8

1.2、反向查看数据库的创建过程

SHOW CREATE DATABASE school#查看创建数据库的语句
SHOW CREATE TABLE student#查看创建表的语句
DESC student#查看表的结构

1.3 数据表的类型

MYISAMINNODB
事务支持noyes
数据行锁定        noyes
外键约束no        yes
全文索引yesno
表空间的大小较小较小,约为2倍

常规使用操作:

MYISAM:节约空间,速度较快;

INNODB:安全性高,事物的处理,多表多用户操作;

1.4、修改删除表

#表的操作:用alert
#修改表名   ALTER TABLE 表名 RENAME AS 新表名

ALTER TABLE student RENAME AS  stuent1

#增加字段  ALTER TABLE 表名 ADD  字段 字段属性

ALTER TABLE stuent1 ADD  age INT(11)

#修改表的字段(重命名字段名,修改约束!)

ALTER TABLE stuent1 MODIFY age VARCHAR(11) #修改约束
ALTER TABLE stuent1 CHANGE age age1 INT(1)#修改表中字段名字


# modify修改字段的约束条件 change 更改字段的名字

#删除表中的某一字段:

ALTER TABLE stuent1 DROP age1


CREATE TABLE IF NOT EXISTS `teacher`(
   `id` INT(4)NOT NULL AUTO_INCREMENT COMMENT '学号', 
    PRIMARY KEY(`id`)
)ENGINE = INNODB  DEFAULT CHARSET=utf8


#删除表:

DROP TABLE  IF EXISTS teacher

2.5 MySq数据管理

1.1 外键的设置

方式一:创建子表,同时创建外键

-- 年级表
create table `grade`(
    `gradeid` int(10) not null auto_increment comment '年纪id',
    `gradename` varchar(50) noy null comment '年级名称',
    primary key(`gradeid`)
    
)engine=innodb default charset = utf8;

-- 学生表
-- 学生表的gradeid字段,要去引用年级表的 gradeid
-- 1. 定义外键key
-- 2. 给这个外键添加约束(执行引用)
create table if not exists `student` (
    `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
    `name` varchar(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
    `pwd` varchar(20) NOT NULL DEFAULT '123456' COMMENT '密码',
    `sex` varchar(2) NOT NULL DEFAULT '女' COMMENT '性别',
    `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
    `address` varchar(100) DEFAULT NULL COMMENT '家庭住址',
    `gradeid` int(10) noy null comment '学生的年级',
    `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
     PRIMARY KEY(`id`), 

     -- 1. 定义外键 FK_gradeid
     KEY `FK_gradeid`(`gradeid`),
     -- 2. 给这个外键添加约束
     CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) references `grade`(`gradeid`)
)ENGINE = INNODB DEFAULT CHARSET = utf8;

 方式二:直接添加外键约束

-- 创建表的时候没有外键关系
alter table `studnet` add constraint `FK_gradeid` foreign key(`gradeid`) references `grade`(`gradeid`),

1.2 DML语言

数据存储,数据管理

DML语言:数据操作语言

insert 插入

update 修改

delete 删除

添加  insert

-- 插入语句(添加)
-- insert into 表名([字段名1,字段名2,字段名3]) values('值1','值2','值3'grade)

-- 一个字段名,插入多行数据
 INSERT INTO `grade`(`gradename`)VALUES('大三'),('大四'),('研一')

-- 字段名和插入值一一对应
INSERT INTO `student`(`name`,`pwd`,`sex`)VALUES ('李亚杭','123456789','男')

-- 多个字段插入多行数值,每一个组合都得和表中的字段一一对应
INSERT INTO `student`(`name`,`pwd`,`sex`)
VALUES ('李亚杭','123456789','男'),('李亚杭','123456789','男'),('李亚杭','123456789','男')

注意:字段和字段之间是有英文逗号隔开

           字段名也可以省略,但是后面的值必须一一对应;

           可以同事插入多条数据,values后面的值需要使用英文逗号隔开

修改  update

update  修改谁(条件) set 原来的值 = 新值

--修改一条数据
update 表名 set column_name = value where[条件]



UPDATE `student` SET `name` = '狂胜' WHERE id = 3


--修改多条数据 column_name之间用逗号隔开

UPDATE `student` SET `name` = '哈哈',`email` = '26099185@qq.com' WHERE id BETWEEN 7 AND 10


--通过多个条件定位数据

UPDATE `student` SET `name` = '木子亚航' WHERE `name` = '哈哈' AND `email` = '26099185@qq.com' 

where 条件

操作符含义范围结果
=等于5=6false
<>或 !=不等于5<>6true
>大于
<小于
<=小于等于
>=大于等于
between…and…在某个范围内[2,5]
and&&5>1 and 1>2false
or||5>1or 1>2true

注意:

colnum_name是数据库的列,尽量带上``;

条件,筛选的条件,如果没有指定,则会修改所有的列;

value,是一个具体的值,也可以是一个变量;

多个设置的属性之间,使用英文逗号隔开;

删除 delete

delete from 表名 where【条件】

truncate table 表名

相同点:都可以删除数据库中表的数据

不同点:truncate 重新设置自增列 计数器会归零

           truncate不会影响事务

INSERT INTO `test`(`cool`) VALUES('0'),('1'),('2')

DELETE FROM `test`

INSERT INTO `test`(`cool`) VALUES('0'),('1'),('2')

TRUNCATE TABLE `test`

DQL(数据库查询语言)

data query language:数据库查询语言;

所有的查询操作都用它 Select

简单的查询,复杂的查询它都能做

数据库中最核心的语言

2.1、指定查询字段

--查询一个字段名

select `字段名` from 表名

 --查询多个字段名

select `字段名`,`字段名`....from 表名

select

【left | right | inner join]--联合查询

【where】--指定结果需要满足的条件

  [group by ...] --指定结果按照哪几个字段来分组

【having】 --过滤分组的记录必须满足的次要条件

【order by ...】--指定查询记录按一个或多个条件排序

【limit{[offset,]row_count | row_countOFFSET offset}】;

select  查询顺序;

--查询多个字段并且更改列的名字

select `字段名`as 更改的列名字,`字段名`as更改的列的名字 .....from 表名

-- 函数  Concat(a,b) 字符串的拼接
SELECT CONCAT('姓名:',studentname) AS 新名字 FROM student

--去重操作 distinct

SELECT `studentno`FROM result

-- distinct 去除select查询出来的结果的重复的数据,重复的数据是现实一条
SELECT DISTINCT `studentno` FROM result

where条件子句
作用: 检索数据中符合条件的值

搜索的条件由一个或者多个表达式组成,结果为布尔值!

逻辑运算符

运算符    语法    描述
and &&    a and b a&&b    逻辑与,两个都为真,结果为真
or ||    a or b a || b    逻辑或,其中一个为真,则结果为真
Not !    not a !a    逻辑非,真为假,假为真


 

模糊查询:比较运算符

运算符语法描述
is nulla is null如果操作符为null,结果为真
is not nulla is not null如果操作符不为null,结果为真
betweena between b and ca若在 b c 直接为真
likea like bsql匹配,如果a匹配b,则结果为真
Ina in(a1,a2,a3.....)假设a在其中一个里面为真

 like 模糊匹配: %(0到任意一个字符)  _(一个字符)

例如:查询名字带“刘”的名字

--LIKE 结合 %(代表0到任意一个字符) _(一个字符)
SELECT `studentname` FROM student WHERE studentname LIKE '赵%'

查询中间带有'无'字 的名字

--查询名字中带有’芷‘字的名字
SELECT `studentname` FROM student WHERE studentname LIKE '%无%'

in 相关的语句

--      与in 相关的语句
-- 查询指定的学生
SELECT * FROM student WHERE `address` IN ('北京朝阳')

jion 链表查询

-- 链表查询
-- 参加了考试的同学(学号,姓名,科目编号,分数)


/*
思路
1.确定需求,分析查询的字段来自哪些表
2.确定使用哪种链接查询?7种
确定交叉点(这两个表中哪个数据是相同的)
判断的条件:学生表中的 studentno  = 结果表中的 studentno
*/

SELECT s.studentno,studentname,subjectno,studentresult -- 要明确 studentno 从那个表中得到 所以要加起新的名字并且明确是哪个表
FROM student AS s
INNER JOIN result AS r
WHERE s.studentno = r.studentno

-- inner join
SELECT CONCAT ('学号:',s.studentno),CONCAT('姓名:',studentname),gradeid,studentresult
FROM student AS s 
INNER JOIN  result  AS r
WHERE s.studentno=r.studentno


-- right join
SELECT CONCAT ('学号:',s.studentno),CONCAT('姓名:',studentname),gradeid,studentresult
FROM student AS s 
RIGHT JOIN  result  AS r
ON s.studentno=r.studentno


-- left join
SELECT CONCAT ('学号:',s.studentno),CONCAT('姓名:',studentname),gradeid,studentresult
FROM student AS s 
LEFT JOIN  result  AS r
ON s.studentno=r.studentno

student表

 result表:中没有1006这位同学的考试成绩

左连接两个表查询数据:虽然result中没有1006这位同学的成绩 但是也会查询出来该同学的信息

-- left join
SELECT CONCAT ('学号:',s.studentno),CONCAT('姓名:',studentname),gradeid,studentresult
FROM student AS s 
LEFT JOIN  result  AS r
ON s.studentno=r.studentno

inner join如果表中至少有一个匹配,就返回行
left join会从左表中返回所有的值,即使右表没有匹配
right join会从右表中返回所有的值,即使左边中没有匹配

join  (连接的表)on (判断的条件:两个表之间的共同字段) 连接语法

where等值查询

多表连接的原理和二表连接是一样的

1.确定需求,分析查询的字段来自哪些表
2.确定使用哪种链接查询?7种
确定交叉点(这两个表中哪个数据是相同的)

SELECT CONCAT ('学号:',s.studentno),CONCAT('姓名:',studentname),s.gradeid,studentresult,subjectname
FROM student AS s 
RIGHT JOIN  result  AS r
ON s.studentno=r.studentno
RIGHT JOIN `subject` AS sub
ON r.subjectno = sub.subjectno

2.2自连接和联表查询

== 自连接:自己的表和自己的表连接,核心:一张表拆为两张一样的表即可

父类表:

pidcategoryidcategoryname
12信息技术
13软件开发
15美术设计

 子类表:

pidcategoryidcategoryname
34数据库
36web开发
57ps技术
28办公信息

怎样连起两张表:子类的pid和父类的categoryid

父类子类
信息技术办公信息
软件技术数据库
软件开发web技术
美术设计ps技术
-- 查询父子信息把一张表看成一模一样的表
SELECT a.`categoryname`AS '父栏目',b.`categoryname`AS '子栏目'
FROM `category` AS a,`category`AS b
WHERE a.`categoryid` = b.`pid`
-- 查询学员所在的年级

SELECT a.`studentname` AS '姓名',b.`gradeid` AS '班级'
FROM `student` AS a,`student`AS b
WHERE a.studentno = b.studentno

2.3分页和排序

3.MySQL函数

1.数学运算

-- 数学运算

select ABS(-8) --绝对值

select ceiling(9.4) --向上取整

select floor(9.4) -- 向下取整

select rand() --返回0~1之间的随机数

select sign() --判断一个数的字符 负数返回-1,正数返回1

2.字符串运算

--字符串函数

select char_length() --字符串长度

select concat('我','爱','你们') --字符串的合并

select insert('我爱编程helloword',1,2,'超级热爱')--查询,从某个位置开始替换某个长度

select lower('SAFAdfs') --转换小写

select upper('DASsd') --转换大写


select instr('kuangshen','h') --返回第一次出现的子串的的索引

select replace('坚持就能成功','坚持','努力') -- 指定字符串的替换

select substr('狂神说坚持就能成功',4,6)-- 从索引位置4开始,截取6个数据


select reverse()--反转字符串

3. 时间和日期函数

-- 时间和日期函数

select current_date() -- 获取当前日期时间

select curdate() -- 获取当前时间

select now() --获取当前时间


select localtime() --本地时间

select sysdate() --系统时间


select year(now())

select day(now())

select month(now())

select hour(now())

select minute(now())

select (now())

3.1聚合函数

函数名描述
count()计数
sum()求和
avg()平均数
max()最大值
min()最小值
-- 会忽略所有的null值
SELECT COUNT(studentname) FROM student;-- count(指定列)

--  不会忽略null值
SELECT COUNT(*)FROM student

-- 不会忽略所有的null值 本质 计算行
SELECT COUNT(1)FROM result


SELECT SUM(`studentresult`) AS 总和 FROM result
WHERE studentno='1000'

SELECT AVG(`studentresult`)AS 平均数 FROM result
WHERE studentno='1000'

SELECT MAX(`studentresult`)AS 平均数 FROM result
WHERE studentno='1000'

SELECT MIN(`studentresult`)AS 平均数 FROM result
WHERE studentno='1000'

-- 查询不同课程的平均分 最高分 最低分

SELECT s.subjectname,AVG(studentresult),MAX(`studentresult`),MIN(`studentresult`)
FROM result r
INNER JOIN `subject` s
ON r.subjectno = s.subjectno
GROUP BY r.subjectno
HAVING AVG(studentresult) > 80


SELECT subjectno,AVG(studentresult),MAX(`studentresult`),MIN(`studentresult`)
FROM result r
GROUP BY r.subjectno

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值