zoukankan      html  css  js  c++  java
  • mysql操作

    MySQL

    一、 MySQL基础

    1. MySQL数据库链接及目录

    控制台连接数据库

    MySQL 是一个需要账户名密码登录的数据库,登陆后使用,它提供了一个默认的 root 账号,使用安装时设置的密码即可登录

    中文显示乱码chcp 65001(即使用utf-8字符编码)

    登陆格式

    1)mysql -u用户名 -p密码

    2)mysql -hip地址 -u用户名 -p密码

    3)mysql --host=ip 地址 --user=用户名 --password=密码

    MySQL退出

    quit或exit

    MySQL目录结构

    MySQL 的目录结构描述
    bin<目录> 所有 mysql 的可执行文件,如: mysql.exe
    MySQLInstanceConfig.exe 数据库的配置向导,在安装时出现的内容
    data<目录> 系统必须的数据库所在的目录
    my.ini 文件 mysql 的配置文件,一般不建议去修改。
    c:ProgramDataMySQLMySQ L Server 5.5data 我们自己创建的数据库所在的文件夹
    1. SQL 的概念

    Structured Query Language 结构化查询语言

    image-20200330161729464

    (1)SQL 语句分类

    1) Data Definition Language (DDL 数据定义语言) 如:建库,建表 2) Data Manipulation Language(DML 数据操纵语言), 如:对表中的记录操作增删改 3) Data Query Language(DQL 数据查询语言),如:对表中的查询操作 4) Data Control Language(DCL 数据控制语言),如:对用户权限的设置

    (2)MySQL 的语法

    1) 每条语句以分号结尾,如果在 SQLyog 中不是必须加的。 2) SQL 中不区分大小写,关键字中认为大写和小写是一样的 3) 3 种注释:

    注释的语法说明
    --空格 单行注释
    /* */ 多行注释
    # 这是 mysql 特有的注释方式

    3. DDL 操作数据库

    (1)创建数据库的几种方式

    1)创建数据库 CREATE DATABASE 数据库名;

    2)判断数据库是否已经存在,不存在则创建数据库 CREATE DATABASE IF NOT EXISTS 数据库名;

    3)创建数据库并指定字符集

    -- 直接创建数据库 db1
    create database db1;
    -- 判断是否存在,如果不存在则创建数据库 db2
    create database if not exists db2;
    -- 创建数据库并指定字符集为 gbk
    create database db3 default character set gbk;

    (2)查看数据库

    -- 查看所有的数据库
    show databases;
    -- 查看某个数据库的定义信息
    show create database db3;
    show create database db1;

    (3)修改数据库

    1)修改数据库默认的字符集

    ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;

    -- 将db3 数据库的字符集改成 utf8
    alter database db3 character set utf8;

    2)删除数据库

    DROP DATABASE 数据库名;

    • 每行 SQL 语句需要选中再执行,可以按 F9

    -- 删除 db2 数据库
    drop database db2

    (4)使用数据库

    1)查看正在使用的数据库

    SELECT DATABASE(); 使用的一个 mysql 中的全局函数

    2)使用/切换数据库

    USE 数据库名;

    -- 查看正在使用的数据库
    select database();
    -- 改变要使用的数据库
    use db4;

    4. DDL 操作表结构

    • 前提先使用某个数据库

    (1)创建表

    CREATE TABLE 表名 (
    字段名 1 字段类型 1,
    字段名 2 字段类型 2
    );

    (2)数据类型

    分类类型名称类型说明
    tinyInt 微整型:很小的整数(占 8 位二进制)  
    smallint 小整型:小的整数(占 16 位二进制)  
    mediumint 中整型:中等长度的整数(占 24 位二进制)  
    int(integer) 整型:整数类型(占 32 位二进制)  
    整数    
    float 单精度浮点数,占 4 个字节  
    小数 double 双精度浮点数,占 8 个字节
    time 表示时间类型  
    日期 datetime 同时可以表示日期和时间类型
    date 表示日期类型  
    char(m) 固定长度的字符串, 无论使用几个字符都占满全部, M 为 0~255 之间的整 数  
    字符串 varchar(m) 可变长度的字符串, 使用几个字符就占用几个, M 为 0~65535 之间的整数
    tinyblob Big Large Object 允许长度 0~255 字节  
    blob 允许长度 0~65535 字节  
    mediumblob 允许长度 0~167772150 字节  
    大二进制 longblob 允许长度 0~4294967295 字节
    tinytext 允许长度 0~255 字节  
    text 允许长度 0~65535 字节  
    大文本 longtext 允许长度 0~4294967295 字节
    mediumtext 允许长度 0~167772150 字节  

    (3)具体操作

    • 创建 student 表包含 id,name,birthday 字段

    create table student1 (
    id int,
    name varchar(20),
    birthday date
    );

    (4)查看表

    • 查看某个数据库中的所有表

    SHOW TABLES;
    • 查看表结构

    DESC 表名;
    • 查看创建表的 SQL 语句

    SHOW CREATE TABLE 表名;

    (5)快速创建一个表结构相同的表

    CREATE TABLE 新表名 LIKE 旧表名;
    -- 创建一个 s1 的表与 student 结构相同
    create table s1 like student;
    desc s1;

    (6)删除表

    DROP TABLE IF EXISTS 表名;
    -- 直接删除表 s1 表
    drop table s1;
    -- 判断表是否存在并删除 s1 表
    drop table if exists s1;

    (7)修改表结构

    1)添加表字段 ADD

    ALTER TABLE 表名 ADD 列名 类型;
    -- 为学生表添加一个新的字段 remark,类型为 varchar(20)  
    alter table student add remark varchar(20);

    2)修改字段类型 MODIFY

    ALTER TABLE 表名 MODIFY 列名 新的类型;
    -- 将 student 表中的 remark 字段的改成 varchar(100)
    alter table student modify remark varchar(100);

    3)修改字段名

    ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
    -- 将 student 表中的 remark 字段名改成 intro,类型 varchar(30)
    alter table student change remark intro varchar(30);

    4)删除字段

    -- 删除 student 表中的字段 intro
    alter table student change remark intro varchar(30);

    5)修改表名

    RENAME TABLE 表名 TO 新表名;
    --将学生表 student 改名成 student2
    rename table student to student2;

    6)修改字符集 character set

    修改字符集 character set
    -- 将 student2 表的编码修改成 gbk
    alter table student2 character set gbk;

    5. DML 操作表中的数据

    用于对表中的记录进行增删改操作

    (1)插入记录

    INSERT [INTO] 表名 [字段名] VALUES (字段值)
    /*INSERT INTO 表名:表示往哪张表中添加数据
    (字段名 1, 字段名 2, …): 要给哪些字段设置值
    VALUES (值 1, 值 2, …): 设置具体的值*/

    1)插入全部字段

    -- 所有的字段名都写出来
    INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3…) VALUES (值 1, 值 2, 值 3);
     -- 不写字段名
    INSERT INTO 表名 VALUES (值 1, 值 2, 值 3…);

    2)插入部分数据

    INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...);

    3)具体操作

    insert into student (id,name,age,sex) values (1, '孙悟空', 20, '男');
    insert into student (id,name,age,sex) values (2, '孙悟天', 16, '男');
    • 向表中插入所有字段

    -- 插入所有列
    insert into student values (3, '孙悟饭', 18, '男', '龟仙人洞中');
    -- 如果只插入部分列,必须写列名
    insert into student values (4, '孙悟饭', 18, '男');--错误
    select * from student;

    (2)更新表记录

    UPDATE 表名 SET 列名=值 [WHERE 条件表达式]
    UPDATE: 需要更新的表名
    SET: 修改的列值
    WHERE: 符合条件的记录才更新
    你可以同时更新一个或多个字段。
    你可以在 WHERE 子句中指定任何条件。

    1)不带条件修改数据

    UPDATE 表名 SET 字段名=值; -- 修改所有的行

    2)带条件修改数据

    UPDATE 表名 SET 字段名=值 WHERE 字段名=值;

    3)具体操作

    -- 不带条件修改数据,将所有的性别改成女
    update student set sex = '女';
    -- 带条件修改数据,将 id 号为 2 的学生性别改成男
    update student set sex='男' where id=2;
    -- 一次修改多个列,把 id 为 3 的学生,年龄改成 26 岁, address 改成北京
    update student set age=26, address='北京' where id=3;

    (3)删除表记录

    DELETE FROM 表名 WHERE 条件表达式
    如果没有指定 WHERE 子句, MySQL 表中的所有记录将被删除。
    你可以在 WHERE 子句中指定条件

    6. DQL 查询表中的数据

    查询不会对数据库中的数据进行修改.只是一种显示数据的方式

    SELECT 列名 FROM 表名 [WHERE 条件表达式]
    1) SELECT 命令可以读取一行或者多行记录。
    2) 你可以使用星号( *)来代替其他字段, SELECT 语句会返回表的所有字段数据
    3) 你可以使用 WHERE 语句来包含任何条件。

    (1)简单查询

    1)查询表所有行和列的数据

     使用*表示所有列
    SELECT * FROM 表名;
     查询所有的学生:
    select * from student;

    2)查询指定列

     查询指定列的数据,多个列之间以逗号分隔
    SELECT 字段名 1, 字段名 2, 字段名 3, ... FROM 表名;
     查询 student 表中的 name 和 age 列
    select name,age from student;

    (2)指定列的别名进行查询

     使用别名的好处: 显示的时候使用新的名字,并不修改表的结构。

    语法:

     对列指定别名
    SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名;
     对列和表同时指定别名
    SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名 AS 表别名;

    具体操作:

    -- 使用别名
    select name as 姓名,age as 年龄 from student;
    -- 表使用别名  表使用别名的原因:用于多表查询操作
    select st.name as 姓名,age as 年龄 from student as st

    (3)清除重复值

    1)查询指定列并且结果不出现重复数据

    SELECT DISTINCT 字段名 FROM 表名;

    2)具体操作:

     查询学生来至于哪些地方
    -- 查询学生来至于哪些地方
    select address from student;
    -- 去掉重复的记录
    select distinct address from student;

    (4)查询结果参与运算

    1)某列数据和固定值运算

    SELECT 列名 1 + 固定值 FROM 表名;

    2)某列数据和其他列数据参与运算

    SELECT 列名 1 + 列名 2 FROM 表名;

     注意: 参与运算的必须是数值类型

    需求:添加数学,英语成绩列,给每条记录添加对应的成绩,查询时讲数学和英语的成绩相加。

    select * from student;
    -- 给所有的数学加 5 分
    select math+5 from student;
    -- 查询 math + english 的和
    select * from student;
    select *,(math+english) as 总成绩 from student;
    -- as 可以省略
    select *,(math-english) 总成绩 from student;

    (5)条件查询

    1)语法

    SELECT 字段名 FROM 表名 WHERE 条件;
    • 准备数据

    CREATE TABLE student3 (
    id int, -- 编号
    name varchar(20), -- 姓名
    age int, -- 年龄
    sex varchar(5), -- 性别
    address varchar(100), -- 地址
    math int, -- 数学
    english int -- 英语
    );
    INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'男','杭州',66,78),(2,'马化腾',45,'女','深圳',98,87),(3,'马景涛',55,'男','香港',56,77),(4,'柳岩',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港',99,99),(7,'马德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);

    2)运算符

    • 比较运算符说明
      >、 <、 <=、 >=、 =、 <> <>在 SQL 中表示不等于,在 mysql 中也可以使用!= 没有==
      BETWEEN...AND 在一个范围之内,如: between 100 and 200 相当于条件在 100 到 200 之间,包头又包尾
      IN(集合) 集合表示多个值,使用逗号分隔
      LIKE '张%' 模糊查询
      IS NULL 查询某一列为 NULL 的值,注:不能写=NULL
      • 操作

    -- 查询 math 分数大于 80 分的学生
    select * from student3 where math>80;
    -- 查询 english 分数小于或等于 80 分的学生
    select * from student3 where english <=80;
    -- 查询 age 等于 20 岁的学生
    select * from student3 where age = 20;
    -- 查询 age 不等于 20 岁的学生,注:不等于有两种写法
    select * from student3 where age <> 20;
    select * from student3 where age != 20;

    3)逻辑运算符

    逻辑运算符说明
    and 或 && 与, SQL 中建议使用前者,后者并不通用。
    or 或 ||
    not 或 !
    -- 查询 age 大于 35 且性别为男的学生(两个条件同时满足)
    select * from student3 where age>35 and sex='男';
    -- 查询 age 大于 35 或性别为男的学生(两个条件其中一个满足)
    select * from student3 where age>35 or sex='男';
    -- 查询 id 是 1 或 3 或 5 的学生
    select * from student3 where id=1 or id=3 or id=5;

    4)in 关键字

    in 里面的每个数据都会作为一次条件,只要满足条件的就会显示

    SELECT 字段名 FROM 表名 WHERE 字段 in (数据 1, 数据 2...);
    -- 查询 id 是 1 或 3 或 5 的学生
    select * from student3 where id in(1,3,5);
    -- 查询 id 不是 1 或 3 或 5 的学生
    select * from student3 where id not in(1,3,5);

    5)范围查询

    BETWEEN 值 1 AND 值 2
    -- 查询 english 成绩大于等于 75,且小于等于 90 的学生
    select * from student3 where english between 75 and 90;

    6)like 关键字

    LIKE 表示模糊查询
    SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';

    7)MySQL 通配符

    通配符说明
    % 匹配任意多个字符串
    _ 匹配一个字符
    -- 查询姓马的学生
    select * from student3 where name like '马%';
    select * from student3 where name like '马';
    -- 查询姓名中包含'德'字的学生
    select * from student3 where name like '%德%';
    -- 查询姓马,且姓名有两个字的学生
    select * from student3 where name like '马_';

     

  • 相关阅读:
    linux service 例子
    YII2自动初始化脚本
    ubuntu 如何在命令行打开当前目录
    mysql 储存过程
    Mysql 随笔记录
    Lack of free swap space on Zabbix server
    意外发现PHP另一个显示转换类型 binary
    常用的排序代码
    线程的实现方式之内核支持线程和用户级线程
    寻找二叉树中的最低公共祖先结点----LCA(Lowest Common Ancestor )问题(递归)
  • 原文地址:https://www.cnblogs.com/wxhao/p/13624719.html
Copyright © 2011-2022 走看看