Mysql数据库基础操作-笔记

浮夸小生。
2021-10-07 / 0 评论 / 36 阅读 / 正在检测是否收录...

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:ss
5.timestamp:时间戳类型 包含年月日时分秒,yyyy-MM-dd HH:mm:ss

  *如果将来不给这个字段赋值,或赋值为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.删除列   

alter table 表名 drop 要删除的列名;

4.D(De lete)

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

DML:增删改表中数据

  1.添加数据:
    *语法:       

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


  2.删除数据
    *语法:

*delete from 表名 where 条件;

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

  3.修改数据
    *语法:

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


 

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. 排序查询
    

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

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

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

1

评论 (0)

取消