MySQL基础语法笔记总计(包含DDL,DML,DQL语句,以及数据库设计,备份还原相关知识点)

目录

mysql服务的启动和停止

登陆mysql

增加新用户

DDL :操作数据库和表

操作数据库

操作表

DML:增删改表中数据

约束

数据库设计

数据库的备份与还原

事务


mysql服务的启动和停止

1.停止
        * net stop mysql
    2.启动
        * net start mysql
      启动失败可按快捷键 win+R,输入 services.msc,找到MySQL服务器的名称启动

登陆mysql

mysql (-h)-u 用户名 -p 用户密码
      注意,如果是连接到另外的机器上,则需要加入一个参数-h机器IP

     键入命令mysql -uroot -p, 回车后提示你输入密码,然后回车即可进入到mysql中了

增加新用户

grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"

    例:增加一个用户user密码为password,让其可以在本机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:
    
    grant select,insert,update,delete on . to user@localhost Identified by “password”;

    如果希望该用户能够在任何机器上登陆mysql,则将localhost改为"%"。

DDL :操作数据库和表

操作数据库

1.C(Create):创建
    *创建数据库:
        * create database 数据库名称;
    *创建数据库,判断不存在,再创建:
        * create database if not exists 数据库名称;
    *创建数据库,并指定字符集
        * create database 数据库名称 character set 字符集名;
    *练习: 创建db4数据库,判断是否存在,并制定字符集为gbk
        * create database if not exists db4 character set gbk;


    2.R(Retrieve): 查询
    *查询所有数据库的名称:
        * show databases;
    *查询某个数据库的字符集:查询某个数据库的创建语句
        * show create database 数据库名称;


    3.U(Update):修改
    *修改数据库的字符集
        * alter database 数据库名称 character set 字符集名称;


    4.D(Delete):删除
    *删除数据库
        * drop database 数据库名称;
    *判断数据库存在,存在再删除
        * drop database if exists 数据库名称;
    *查询当前正在使用的数据库名称
        * select database();
    *使用数据库 
        * use 数据库

操作表

1.C(Create):创建
          语法 :
            create table 表名(
                列名1 数据类型1 comment '注释',
                列名2 数据类型2 comment '注释',
                ...
                列名n 数据类型n comment '注释'
            )comment '注释'; 
            * 注意: 最后一列,不需要加逗号 (,)
            * 数据库数据类型 :        
                1. int : 整数类型
                      * age int,
                2. double:小数类型
                      * score double(5,2)
                3. date:日期,只包含年月日,yyyy-MM-dd
                4. datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
                5. timestamp:时间戳类型 包含年月日时分秒 yyyy-MM-dd HH:mm: ss
                        *如果将来不给这个字段赋值,或赋值为nu11,则默认使用当前的系统时间,来自动赋值
                6. varchar :字符串
                        * name varchar(20):姓名最大20个字符
                        * zhangsan 8个字符 张三 2个字符
            * 创建表
                create table Student(
                         age int,
                         name varchar(32),
                         score double(4,1),
                         birthday date,
                         insert_time timestamp
                );


            * 复制表
                    * create table 表名 like 被复制的表的名;            

2.R(Retrieve):查询
        * 查询某个数据库中所有的表名称
            * show tables;
        * 查询表结构
            * desc 表名;


    3.u(Update):修改
        1.修改表名
            alter table 表名 rename to 新的表名;
        2.修改表的字符集
            alter table 表名 character set 字符集名称;
        3.添加一列
            alter table 表名 add 列名 数据类型;
        4.修改列名称 类型
            alter table 表名 change 列名 新列名 新数据类型;
            alter table 表名 modify 列名 新数据类型;
            modify和change都可以
        5.删除列
            alter table 表名 drop 列名;


    4.D(Delete):删除
        * drop table 表名;
        * drop table if exists 表名;

DML:增删改表中数据

    1.添加数据
        * 语法:
            * insert into 表名(列名1,列名2,...列名n)values(值1,值2,...值n);
        * 注意:
            列名和值要一一对应,表名后不写括号,则针对全体赋值。
    2.删除数据
        * 语法:
            * delete from 表名 where 条件;
            * 注意:
                1.如果不加条件,则删除表中所有记录
                2.如果要删除所有记录
                    1.delete from 表名;-- 不推荐使用。有多少条记录就会执行多少次删除操作
                    2.TRUNCATE TABLE 表名;-- 推荐使用,效率更高 先删除表,然后再创建一张样的表。
    3.修改数据
        * 语法:
            update 表名 set 列名1 = 值1,列名2 = 值2...where 条件];
        * 注意 :
              1.如果不加任何条件,则会将表中所有记录全部修改。

DQL:查询表中的记录

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


    2.基础查询
        1.多个字段的查询
            select 字段名1,字段名2... from 表名;
        * 注意 :
            如果查询所有字段,则可以使用 * 来替代
        2.字段列表去除重复 :(跟在select后面)
            * distinct


    3.计算列
        * 一般可以使用四则运算计算一些列的值。 (一般只会进行数值型的计算)
        * ifnul1(表达式1,表达式2): null参与的运算,计算结果都为nul1
        * 表达式1: 哪个字段需要判断是否为nu11
        * 表达式2:如果该字段为nu11后的替换值


    4.起别名
        as :as也可以省略 跟在字段后面


    5.条件查询
        1.where子句后跟条件
        2.运算符
            * > < <= >= = <>      ( <>是不等于 也可以写成!=) 
            * BETWEEN...AND...
            * IN( 集合)(or关系)
            * LIKE(模糊查询)
                * _ :单个任意字符
                * % :多个任意字符
                例如:查找姓名中含有'马'的数据 :LIKE '%马%' 
            * IS NULL  (null是一个特殊的值,不能用 = 来判断)
            * and 或 &&
            * or 或!
            * not 或 !


    6.排序查询
        * 语法 : order by 子句
            * order by 排序字段1 排序方式1 ,排序字段2 排序方式2...
        * 排序方式:
            *ASC :升序,默认的。
            *DESC:降序。
        * 注意 :
            * 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。

    7.聚合函数: 将一列数据作为一个整体,进行纵向的计算(select 聚合函数 from 表名)
        1.count :计算个数
            1.一般选择非空的列:主键
            2. count(*)
        2.max : 计算最大值
        3.min: 计算最小值
        4.sum : 计算和
        5.avg: 计算平均值
        * 注意: 聚合函数的计算,排除nul1值。解决方案:
            1.选择不包含非空的列进行计算
            2.IFNULL函数


    8.分组查询:
        1.语法 : group by 分组字段;
        2.注意 :
            1.分组之后查询的字段 : 分组字段、聚合函数
            2.where 和 having 的区别 ?
                1.where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
                2.where 后不可以跟聚合函数,having可以进行聚合函数的判断


    9.分页查询:
        * 语法:
            * limit 开始的索引,每页查询的条数;  开始的索引=(当前的页码-1)* 每页显示的条数
        * 注意:
            * limit是MySQL的方言


    10.多表查询
        * 内连接查询
            * 隐示内连接:select 字段列表 from 表名 where 条件
            * 显示内连接:select 字段列表 from 表名1 [inner] join 表名2 on 条件
        * 外连接查询
            * 左外连接:select 字段列表 from 表1 left [outer] join 表2 on 条件
                * 查询的是左表所有的数据和两个表的交集
            * 右外连接:select  字段列表 from 表1 right [outer] join 表2 on 条件
                * 查询的是右表所有的数据和两个表的交集
        * 子查询:嵌套的查询语句

约束

* 分类:
        1.主键约束:primary key
        2.非空约束:not null
        3.唯一约束:unique
        4.外键约束:foreig key

    *非空约束: not null,某一列的值不能为null
        1.创建表时添加约束
            CREATE TABLE stu(
            id INT,
            NAME VARCHAR(20) NOT NULL -- name为非空
            );          
        2.创建表完后,添加非空约束
            ALTER TABLE StU MODIFY NAME VARCHAR(20) NOT NULL;
        3.删除name的非空约束
            ALTER TABLE SU MODIFY NAME VARCHAR(20);


    * 唯一约束 : unique,某一列的值不能重复
        1.注意:唯一约束可以有NULL值,但是只能有一条记录为null
        2.在创建表时,条件唯一约束
            CREATE TABLE stu(id INT ,phone number VARCHAR(20) UNIOUE -- 手机号
        3.删除唯一约束
            ALTER TABLE stu DROP INDEX phone number;
        4.在表创建完后,添加唯一约束
            ALTER TABLE stu MODIFY phone number VARCHAR(20) UNIOUE;


    * 主键约束:非空且唯一,一张表只能有一个字段是主键约束,是表中记录的唯一标识
        1.创建表时添加约束
            CREATE TABLE stu(
            id INT primary key, --主键
            NAME VARCHAR(20)
            );            
        2.创建表完后,添加主键约束
            ALTER TABLE StU MODIFY id INT primary key;
        3.删除非主键约束
            ALTER TABLE SU MODIFY drop primary key;
        4.自动增长 一般与主键联用(比如说id这种数值类型)
            1.创建表时添加约束
            CREATE TABLE stu(
                id INT primary key auto_increment, --自动增长
                NAME VARCHAR(20)
            );    
            2.删除自动增长
                alter table stu modify id int;
            3.添加自动增长
                alter table stu modify id int auto_increment;
        5.创建复合主键
            primary key(字段1,字段2)

    *外键约束: foreign key,让表于表产生关系,从而保证数据的正确性上
        1.在创建表时,可以添加外键
            * 语法 :
            create table 表名(
                ...
                外键列
                constraint 外键名称 foreign key (外键列名称)references 主表名称(主表列名称)
            );
        2.删除外键
            ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
        3.创建表之后,添加外键
            ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);    
        4.1.添加级联操作
                语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称
                FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE
         4.2.分类 :
                级联更新:ON UPDATE CASCADE
                级联删除: ON DELETE CASCADE     

数据库设计

1.多表之间的关系
        1.分类:
            1.一对一(了解) :
            * 如:人和身份证
            * 分析 : 一个人只有一个身份证,一个身份证只能对应一个人
            2.一对多(多对一):
            * 如:部门和员工
            * 分析 : 一个部门有多个员工,一个员工只能对应一个部门
            3.多对多:
            * 如:学生和课程
            * 分析: 一个学生可以选择很多门课程,一个课程也可以被很多学生选择


        2.实现关系:
            1.一对多(多对一) :
                * 如:部门和员工
                * 实现方式:在多的一方建立外键,指向一的一方的主键
            2 .多对多 :
            * 如: 学生和课程
            * 实现方式:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第    三张表的外键,分别指向两张表的主键


    2.数据库设计的范式
        目前关系数据库有六种范式:第一范式 (1NF) 、第二范式 (2NF) 、第三范式(3NF)巴斯_科德范式(BCNF) 、第四范式(4NF) 和第五范式 (5NF又称完美范式)。
        * 分类:
            * 第一范式 (1NF) :每一列都是不可分割的原子数据项
            * 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于码(在1NF基础上消除非主属性对主码    的部分函数依赖)
            * 第三范式(3NF) :在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)


        * 几个概念 :
            1. 函数依赖:A-->B,如果通过A属性(属性组)的值,可以确定唯一B属性的值。则称B依赖于A
            2. 完全函数依赖 : A-->B, 如果A是一个属性组,则B属性值得确定需要依赖于A属性组中所有的属性值。
            3. 部分函数依赖:A-->B, 如果A是一个属性组,则B属性值得确定只需要依赖于A属性组中某一些值即可。
            4. 传递函数依赖 :A-->B,B - 如通过A属性(属性组)的值,可以确定唯一B属性的值,在通过B属性(属性组)的值可以确定唯一1
            5. 码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码
            6. 主属性: 码属性组中的所有属性
            7. 非主属性: 除过码属性组的属性

数据库的备份与还原

* cmd命令行执行
        * 备份
            mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
        * 还原
            1. 登录数据库
            2. 创建数据库
            3. 使用数据库
            4. 打开文件 source 文件路径

事务

    1. 概念:
        * 如果一个包含多个步骤的业务操作被事务管理,那么这些操作要么同时成功要么同时失败


    2. 操作:
        1. 开始事务:start transaction
        2. 回滚:rollback
        3. 提交事务:commit


    3. mysql数据库中事务是默认提交的,Oracle数据库则是默认手动提交
        1. 手动提交:先开启事务在提交
        2. 自动提交:一条增删改(DML)语句就会自动提交一次
        3. 查看事务的默认提交方式:select @@autocommit; -- 1:自动提交 0:手动提交
        4. 修改事务的默认方式;set @@autocommit=0;


    4. 事务的四大特征
        1. 原子性
        2. 持久性 
        3. 隔离性
        4. 一致性


    5.事务的隔离级别 
        * 概念:多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题.
        * 存在问题 :
            1. 脏读:一个事务,读取到另一个事务中没有提交的数据
            2. 不可重复读(虚读): 在同一个事务中,两次读取到的数据不一样。
            3. 幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改
        * 隔离级别:
            1.read uncommitted: 读未提交
                产生的问题:脏读、不可重复读、幻读
            2.read committed :读已提交   (oracle默认)
                产生的问题:不可重复读、幻读
            3.repeatable read:可重复读  (MySoL默认)
                产生的问题:幻读
            4.serializable:串行化
                可以解决所有的问题
            * 注意: 隔离级别从小到大安全性越来越高,但是效率越来越低
            * 数据库查询隔离级别·
                * select @@tx isolation;
            * 数据库设置隔离级别:
                * set global transactin isplation level 级别字符串;

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个菜笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值