MySQlL基本使用

时间:2022-06-20 06:57:20

MySQL

1.数据目录

数据库:文件夹

表:文件

数据

2.安装目录

配置文件 my.imi

SQL

Structured Query Language:结构化查询语言。。定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方。称之为方言。

通用语法

SQL语句单行或者多行书写,以分号结尾。可使用空格和缩进来增强语句的可读性

MySQL数据库的SQL语句不区分大小写,关键字建议使用大写

单行注释

-- 注释内容【--后必须有空格】 # 注释内容(mysql特有)

多行注释

/* 注释 */

DDL:数据定义语言

用来定义数据库对象:数据库,表,列表。关键字:create,drop,alter

DML:数据操作语言

用来对数据库中表的记录进行增删改。关键字:insert,delete,update

DQL:数据查询语言

用来查询数据库中表的记录(数据)。关键字:select,where

DCL:数据控制语言

用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT,REVOKE

操作数据库:CRUD Create,Retrieve查,Update改,Delete 使用数据库

登录:mysql -u... -p... mysql -uroot -padmin

mysql -hip -u... -p... mysql -h127.0.0.1 -uroot -p

DDL

操作数据库

查询数据库

show databases

information_schema
mysql
performance_schema
test

show create database mysql;

 Database | Create Database
mysql   | CREATE DATABASE `mysql` /*!40100 DEFAULT CHARACTER SET utf8 */
创建数据库

creat database db1;

create database if not exists db2;

create database if not exists db2 character set utf8;

修改数据库

alter database db2 character set jbk;

删除数据库
 drop database db1;
?
drop database if exists db1;

 

使用数据库

select database();查询当前正在使用的数据库

use db2;使用数据库

操作表

查询表

show tables;

desc 表名;查询表结构

创建表

create table tab1(age int,height double(3,2),birthday date,name varchar(5));

date:yyyy-MM-dd;

datetime:yyyy-MM-dd HH:mm:ss

timestamp:时间错类型 包含年月日时分秒。 若不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值。

create table tab2(age int,

height double(3,2),

birthday date,

name varchar(5),

insert_time timestamp

);

creat table 表名 like 被复制表名;

删除D(Delete)

drop table;

drop table if exists

修改表U(update)

1.修改表名:alter table 表名 rename to 新的表名

2.修改表的字符集:alter table 表名 character set 字符集名

3.添加一列:alter table 表名 add 列名 数据类型;

4.修改列名称类型:alter table 表名 change 列名 新列名 新数据类型

alter table 表名 modify 列名 新数据类型

5.删除列:alter table 表名 drop sex;

 

DML:增删改表中数据

添加数据

INSERT INTO 表名(NAME,age,chinese,math) VALUES("张三",20,99.5,1122.5);

列名和值一一对应

若表名后,不定义列名,则默认给所有列添加值

insert into 表名 values(值1,值2,.....值n);

除了数字类型,其他都用引号起来【单引双引皆可】

删除数据

delete from 表名 [where条件]; delete from 表名 where age=1; 不加条件,改变所有数据的

delete from 表名; 有多少记录就删除多少次

truncate table 表名; 删除表,然后再创建一个一模一样的空表

修改数据

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

DQL:查询表中数据

select *from 表名;

1.语法

select 字段列表 from 表名 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定

2.基础查询

1.多个字段查询

 SELECT sex,NAME,age FROM preson;
?
SELECT
?
sex, -- 性别
?
NAME, -- 姓名
?
age -- 年龄
?
FROM
?
preson; -- 成员表

 

2.去重【注意格式....eg空格】

SELECT DISTINCT addresss FROM preson;

3.计算列

 SELECT NAME,math,english,math english FROM preson;
SELECT NAME,math,english,math IFNULL(english,0) FROM preson;-- 空值

4.起别名

 SELECT NAME,math,english,math IFNULL(english,0) AS 总分 FROM preson;
[可用空格代替AS]
SELECT NAME,math AS 数学,english 英语,math IFNULL(english,0) AS 总分 FROM preson;
3.条件查询

1.where子句后跟条件

2.运算符

>、<、<=、>=、=、<>【不等于】

BETWEEN...AND 【之间,包含双边】

IN(集合) 【之内】

LIKE 【模糊查询】

IS NULL

and 或 &&

or 或 ||

not 或 !

【NULL值不能使用=、!=判断,用IS NULL,IS NOT NULL】

 SELECT *FROM preson WHERE age<>20;
SELECT *FROM preson WHERE NAME LIKE ‘马%‘;
SELECT *FROM preson WHERE NAME LIKE ‘_岩%‘;
SELECT *FROM preson WHERE NAME LIKE ‘___‘;
SELECT *FROM preson WHERE NAME LIKE ‘%马%‘;
%一个或多个
_字数
4.查询语句
排序查询

order by 子句

order by 排序字段1 排序方式1,排序字段2 排序方式2

排序方式 ASC:升序 【默认的】; DESC:降序

 SELECT *FROM preson ORDER BY math,english DESC;
聚合函数:将一列数据作为一个整体,进行纵向的运算。

count:计算个数

1.一般选择非空的列 主键

2.count(*)

max:计算最大值

min

avg:计算平均值

 SELECT SUM(english)FROM preson; -- 自动排除null值
-- 解决办法
SELECT COUNT(IFNULL(english,0))FROM preson; -- IFNULL
SELECT COUNT(id)FROM preson;-- 选择非空的列进行计算

 

分组查询

group by 分组字段

注意1.分组之后查询的字段:分组字段、聚合函数

2.where ,having区别。

1.where分组之前进行限定,不满足条件,不参与分组

having分组之后进行限定,不满足条件,则不会被查询出来

2.where后不可跟聚合函数,having可进行聚合函数的判断

 SELECT sex,COUNT(id),AVG(math),AVG(english)FROM preson GROUP BY sex
SELECT sex,AVG(math)FROM preson WHERE math>=70 GROUP BY sex

SELECT sex,COUNT(id),AVG(math)FROM preson WHERE math>=70 GROUP BY sex HAVING  COUNT(id)>2;-- 分组之后人数大于二的   HAVING
SELECT sex,COUNT(id) 人数,AVG(math)FROM preson WHERE math>=70 GROUP BY sex HAVING 人数>2;
分页查询

limit 开始的索引,每页查询的条数;

公式:开始的索引=(当前页码-1)*每页显示的条数

 SELECT id,NAME,age FROM preson LIMIT 0,2;-- 第一页
SELECT id,NAME,age FROM preson LIMIT 2,2;-- 第二页

limit是MySQL的一个“方言”;

5.约束:对表中的数据进行限定,保证数据的正确性、有效性和完整性

非空约束 not null

USE db2;
CREATE TABLE student(id INT,
      NAME VARCHAR(5) NOT NULL-- 创建前约束
);
ALTER TABLE student MODIFY NAME VARCHAR(5);
ALTER TABLE student MODIFY NAME VARCHAR(5) NOT NULL;-- 创建后约束

唯一约束 unique

USE db2;
CREATE TABLE student1(id INT UNIQUE,-- null可重复
      NAME VARCHAR(5)
);
ALTER TABLE student1 DROP INDEX id;
ALTER TABLE student1 MODIFY id INT UNIQUE;

主键约束 primary key

1.非空且唯一

2.一张表只能有一个字段为主键

3.主键就是表中记录的唯一标识

USE db2;
CREATE TABLE student2(id INT PRIMARY KEY);
-- ALTER TABLE student1 MODIFY id INT;
ALTER TABLE student2 DROP PRIMARY KEY;
ALTER TABLE student2 MODIFY id INT PRIMARY KEY;

自动增长

1.若某一列是数值类型的,使用 auto_increment可以完成值的自动增长。

2.配合主键使用

USE db2;
CREATE TABLE student4(id INT PRIMARY KEY AUTO_INCREMENT,
      NAME VARCHAR(5)
);
INSERT INTO student4(NAME) VALUES(‘张三‘),(‘李四‘);
INSERT INTO student4 VALUES(NULL,‘张三‘),(10,‘李四‘),(NULL,‘王五‘);
SELECT *FROM student4;
ALTER TABLE student4 MODIFY id INT;-- 删除自动增长
ALTER TABLE student4 MODIFY id INT AUTO_INCREMENT;

外键约束 foreign key【外键可以为null值】

1.创建表时,添加外键

constraint 外键名称 foreign key(外键列名称)references 主表名称(主表列名称)

2.删除外键

alter table 表名 drop foreign key 外键名称;

3.创建表之后,添加外键

alter table 表名 add constraint 外键名称 foreign key(外键字段名称)references 主表名称(主表列名称)

CREATE DATABASE db3;
USE db3;
CREATE TABLE school(id INT PRIMARY KEY AUTO_INCREMENT,
  grade VARCHAR(5)
);
INSERT INTO school VALUES(NULL,‘一年级‘),(NULL,‘二年级‘),(NULL,‘三年级‘);
SELECT *FROM school;
TRUNCATE TABLE school;
?
?
?
USE db3;
CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,
  NAME VARCHAR(5),
  sch_id INT,
  CONSTRAINT stu_sch_id FOREIGN KEY(sch_id)REFERENCES school(id)
   
);
INSERT INTO student VALUES(NULL,‘张三‘,1),(NULL,‘李四‘,2),(NULL,‘王五‘,3),(NULL,‘赵六‘,2);
SELECT *FROM student;
ALTER TABLE student DROP FOREIGN KEY stu_sch_id;
ALTER TABLE student ADD CONSTRAINT stu_sch_id FOREIGN KEY(sch_id)REFERENCES school(id);

级联

级联删除:on delete cascade;

级联更新:on update cascade;

ALTER TABLE student ADD CONSTRAINT stu_sch_id FOREIGN KEY(sch_id)REFERENCES school(id)ON UPDATE CASCADE ON DELETE CASCADE;