Mysql常见指令:

  • Post author:
  • Post category: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 i

f 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 数据表的类型

MYISAM INNODB
事务支持 no yes
数据行锁定 no yes
外键约束 no yes
全文索引 yes no
表空间的大小 较小 较小,约为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=6 false
<>或 != 不等于 5<>6 true
> 大于
< 小于
<= 小于等于
>= 大于等于
between…and… 在某个范围内 [2,5]
and && 5>1 and 1>2 false
or || 5>1or 1>2 true

注意:

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 null a is null 如果操作符为null,结果为真
is not null a is not null 如果操作符不为null,结果为真
between a between b and c a若在 b c 直接为真

like
a like b sql匹配,如果a匹配b,则结果为真

In
a 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自连接和联表查询

== 自连接:自己的表和自己的表连接,核心:

一张表拆为两张一样的表即可

父类表:

pid
categoryid
categoryname
1
2
信息技术
1
3
软件开发
1
5
美术设计

子类表:


pid
categoryid categoryname

3
4 数据库

3
6 web开发

5
7 ps技术

2
8 办公信息

怎样连起两张表:子类的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



版权声明:本文为andy_lee520原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。