首页
avatar

.瑶

Mysql数据库基础操作-笔记

CRUD

DDL(操作数据库)

R(Retrieve):查询

查询所有数据库的名称:

show databases;

查看某个数据库的字符集(数据库编码如:gbk等):

show create database //数据库名称;
返回信息 例如:
CREATE DATABASE `student` /*!40100 DEFAULT CHARACTER SET utf8 */

创建数据库:

create database //数据库名称;
  
create database if not exists 数据库名称; //创建数据库前判断一下该数据库是否存在,没有则创建
  
create database 数据库名称 character set  //编码名称;  创建数据库,并且指定编码格式

汇总:

create database if not exists 数据库名称 character set 编码名称; //创建数据库前判断一下该数据库是否存在,没有则创建并且指定编码格式

创建数据库

###U(Update):修改

修改数据库的字符集:
alter database 数据库名称 character set 编码名称;

删除数据库:

drop database 数据库名称;
drop database if exists 数据库名称;  判断数据库是否存在,存在则删除;

使用数据库:

 查询当前正在使用的数据库名称:

select database();

 使用数据库:

use 数据库名称;

###DBL(操作表) ##1.C(create):创建

create table 表名(
      列名1 数据类型1,
      列名2 数据类型2,
      ...
      列名n 数据类型n
);
  //注意:最后一列,不需要加逗号(,)
    create table 表名2 like 表名1; //复制一份表1 到表2;

数据类型:

#####1.int:整数类型

age int

#####3.double:小数类型;

score double(5,2) //小数最多有五位,小数点后保留2位小数。

#####3.date:日期,只包含年月日, yyyy-MM-dd; #####4.datatime:日期,包含年月日时分秒,yyyy-MM-dd HH:mm

#####5.timestamp
包含年月日时分秒,yyyy-MM-dd HH:mm
  *如果将来不给这个字段赋值,或赋值为Null,则默认使用系统时间,来自动赋值。 #####6.varchar:字符串

name varchar(20):姓名最大20个字符
zhangsan 8个字符 张三 2个字符

创建表

create table student(
      id int,
      name varchar(32),
      age int,
      score double(4,1),
      birthday date,
      insert_time timestamp	 
      );

##2.R(Retrieve):查询

show tables; //查询某个数据库中所有的表的名称
desc  表名称; //查询表结构

##3.U(Update):修改  1.表名

alter table 表名 rename to 新表名; 

 2.修改表的字符集

alter table 表名 character set 编码名; //修改字符集 
show create table 表名; //查看表的字符集

 3.添加一列   

alter table 表名 add 列名 数据类型;

4.修改列名称 类型    

alter table 表名 change 要修改的列名 新的列名 数据类型;
只修改类型:
alter table 表名 modify 要修改的列名 数据类型;
``` 
  5.删除列   
```sql
alter table 表名 drop 要删除的列名;

##4.D(De lete)

drop table 表名;
drop table if exists 表名;

##DML:增删改表中数据   1.添加数据:     *语法:       

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

{% note purple ‘fas fa-info-circle’ flat %} *注意:    1.列名和值要一一对应。    2.如果表名后,不定义列名,则默认给所有的列添加值,     insert into 表名 values(值1,值2…值n);    3.除了数字类型,其他类型需要引号(单双)引起来 {% endnote %}   2.删除数据     *语法:

*delete from 表名 where 条件;

{% note purple ‘fas fa-info-circle’ flat %} *注意:   如果不加条件,则删除表中所有的记录 {% endnote %}

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

  3.修改数据     *语法:

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

{% note purple ‘fas fa-info-circle’ flat %}

  • 注意:   * 如果不加条件,会将表中所有的记录都将修改 {% endnote %}   ##DQL:查询表中的数据:
select * from 表名;

  1.语法:

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

  2.基础查询:     1.多个字段的查询     2.去除重复

select distinct 字段名 from 表名;

    3.计算列

SELECT 字段名,字段名,字段名,字段名+字段名 FROM student;
SELECT 字段名,字段名,字段名,字段名 + IFNULL(字段名,0)  FROM student;

    4.起别名

SELECT 字段名,字段名 别名,字段名 别名,字段名  + IFNULL(字段名,0) AS 别名 FROM student;

  3.条件查询:     1.where子句后跟条件     2.运算符        *>、<、<=、>=、=、<>        *BETWEEN…AND        *IN(集合)        *LIKE

         *——:单个任意字符          *%:多个任意字符        *IS NULL        *and 或 &&        *or 或 ||        *not 或 !

SELECT*FROM student WHERE age > 20;

SELECT*FROM student WHERE age < 20;等

SELECT * FROM student WHERE age >= 20 && age <= 30; // 年龄在 20-30之间
  
SELECT * FROM student WHERE age >= 20 AND age<= 30;  // 年龄在 20-30之间
简化写法:
SELECT * FROM student WHERE age BETWEEN 20 AND 30;  // 年龄在 20-30之间


//查询年龄22岁,18岁,25岁
SELECT * FROM student where age=22 or age=18 or age=25;

简化写法:
SELECT * FROM student WHERE age IN (22,18,25);

查询成绩为NULL的
SELECT * FROM student WHERE english IS NULL;

查询成绩不为NULL的
SELECT * FROM student WHERE english IS NOT NULL;

*LIKE:模糊查询
SELECT * FROM student WHERE english IS  NULL;

-- 查询姓马的
SELECT * FROM student WHERE NAME LIKE "马%";

-- 查询第二个字是化的
SELECT * FROM student WHERE NAME LIKE "___腾%";

-- 查询名字是三位数的
SELECT * FROM student WHERE NAME LIKE "___";

-- 查询名字中包含马的
SELECT * FROM student WHERE NAME LIKE "%马%";

DQL

1.排序查询 2.聚合函数 3.分组查询 4.分页查询

2.约束 3.多表之间的关系 4.范式 5.数据库的备份和还原

DQL

  1. 排序查询

语法: roder by 子句
  
  order by 排序字段 排序方式1,排序字段2 排序方式2..
  
排序方式 :
  
  ASC : 升序,默认的。 SELECT * FROM student ORDER BY math ASC 
  DESC : 降序 SELECT * FROM student ORDER BY math DESC

注意: 如果有多个排序条件,则当前的条件值一样时,才会判断第二个条件

SELECT * FROM student ORDER BY math ASC, english ASC
  1. 聚合函数:将一列数据作为一个整体,进行纵向的计算。
  • count
  • 一般选择非空的列:主键
  • count(*)SELECT COUNT(IFNULL(english,0)) FROM student;     — max:计算最大值     — min:计算最小值     —sum:计算和     —avg:计算平均值

    注意:聚合函数的计算,排除null值         解决方法:           1. 选择不包含非空的列进行计算           2. IFNULL函数 3. 分组查询:     - 语法:group by 分组字段     - 注意:       — 分组之后查询的字段:分组字段,聚合函数       — where 和 having 的区别?         --- where 在分组之前进行限定,如果不满足条件,则不参与分组,having在分组之后进行限定,如果不满足结果,则不会被查询出来         --- where 后不可以跟聚合函数,having可以进行聚合函数的判断;

SELECT sex,AVG(math),COUNT(id) FROM student GROUP BY sex;
SELECT sex,AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id)>2;

  4.分页查询     1. 语法:limit 开始的索引,每页查询的条数;     2. 公式:开始的索引 = (当前的页码 -1)* 每页的条数     3. 分页操作是一个”方言”

约束

  * 概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。   * 分类:     1. 主键约束:primarykey     2. 非空约束:not null     3. 唯一约束:unique     4. 外键约束:foregin key

  * 非空约束:not null     1. 创建表时添加约束         CREATE TABLE stu(           id INT,           NAME VARCHAR(20) NOT NULL         );     2. — 删除 name的约束     ALTER TABLE stu MODIFY NAME VARCHAR(20)     3. — 创建表后添加约束     ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL   * 唯一约束:unique     1. 创建表时添加唯一约束       1. CREATE TABLE stu(           id INT,           phone_number VARCHAR(20) UNIQUE         );     2. 删除唯一约束       ALTER TABLE stu DROP INDEX phone_number;     3. 创建表后,添加唯一约束       ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE

  * 主键约束:primarykey     1. 创建表时添加主键       CREATE TABLE stu(         id INT PRIMARY KEY ,         NAME VARCHAR(20)       );     2. 删除主键       ALTER TABLE stu DROP PRIMARY KEY;

    3. 创建完成之后添加主键       ALTER TABLE stu MODIFY id INT PRIMARY KEY;

    4. 自动增长:       * 概念:如果某一列时数值类型的,使用 auto_increment 可以完成值的自动增长         * 创建表添加自动增长           CREATE TABLE stu(             id INT PRIMARY KEY AUTO_INCREMENT,             NAME VARCHAR(20)           );         * — 删除自动增长 ALTER TABLE stu MODIFY id INT         * — 添加自动增长 ALTER TABLE stu MODIFY id INT AUTO_INCREMENT

  * 外键约束:foreign key     1. 在创建表时,可以添加外键       * 语法:         creat table 表名(           …           外键列           constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)         )

    2. 删除外键         * ALTER TABLE employee DROP FOREIGN KEY emp_dept_fk;     3. 创建表之后,添加外键         * ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id)

    4. 级联操作         *ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id) ON UPDATE CASCADE DELETE CASCADE

      1. 级联更新:ON UPDATE CASCADE       2. 级联删除:ON DELETE CASCADE