MySQL基础学习笔记

在以前接触了点SQL Server的基础上,最近了解了MySQL相关基础知识,整理了下笔记,如下:

知识点:

一 安装MySQL

二 MySQL基础

三 MySQL常用命令

四 数据表以及数据类型

五 SQL命令 DDL(结构化操作)

六 SQL DML操作(增删改查)

七 MySQL 聚合函数

八 MySQL中的索引

九 MySQL外键

一.安装MySQL

1.独立安装

2.集成环境中安装:appserv phpstudy wamp

此处省略...

二.MySQL基础

1.数据库:存储数据以及数据结构的仓库 DB

2.数据库管理系统:DBMS

管理方式:命令行模式,phpmyadmin(可视化),其他管理工具:nav

3.用户:

数据库系统由三部分构成:用户 数据库管理系统 数据库

4.数据库:帮助查询 存储 管理 数据的

    1)实体:表名,按照对象的概念来划分

    2)属性:字段,实体的特性

5.数据库种类:

关系型:mysql sqlserver oracle db2...

非关系型:层次型 网状型 redis

三.MySQL常用命令

1.MySQL登录

mysql [-h 主机/ip] -u用户名 -p密码

2.MySQL退出

exit;

其他退出quit \q

3.MySQL常用命令:

select now(); 查看当前时间

select curdate();当前日期

select curtime();当前时间

select version();查看mysql版本

select user();查看用户

四.数据表和数据类型

1.实用命令:

1>show databases();
    默认数据库:
    information_schema 日志信息
    mysql:mysql 系统库
    test:测试库

2>创建数据库
    create database 数据库名称
    create database demo;

3>删除数据库
    drop database demo;

4>使用数据库
    use 数据库名称

2.数据表

    create table 数据表名称(
        列定义:
            列名称 类型 [默认值] [auto_increment自增长][主索引 primary key]
            列名称 类型 [默认值]
            列名称 类型 [默认值]
            列名称 类型 [默认值]
            ...
        索引定义:
)

3.数据类型:

1>整型:
        tinyint 1字节 有符号 -128 ~127  无符号 0~255
        smallint 2字节 有符号 -32768~32767  无符号 0~65535
        int    4字节 有符号 -2147483648~2147483647 无符号 0~4294967295
        BIGINT 8字节

        bool  ==  tinyint  1字节

2>浮点型
        float 4字节  日常生活中的小数 MySQL存储 丢失精度
        double 4字节 丢失精度
        DECIMAL[M,D] M是总位数  D是小数点后面的位数

3>字符串
        char(位数)  定长字符  255个字符
        varchar(位数) 变长字符 255个字符
        text 65535个字符
        MEDIUMBLOB 2的24次方字符
        enum(val1,val2,val3...)  列枚举:enum("男","女")

4>日期时间
        date 日期
        time 时间
        datetime 日期时间

4.创建第一个数据表

    学生表  stu
    id    排序序号
    学号
    姓名
    年龄
    性别
    手机
    create table stu(
        id int(6) auto_increment primary key,
        stuNum varchar(6),
        stuName varchar(20),
        stuAge tinyint(2),
        stuSex enum("1","2"),
        stuTel varchar(20)
);

primary key 主键:确定唯一记录的字段

    show tables;查看数据库中的表
    desc 表名称  查看表结构

五.SQL命令DDL(结构化操作)

1.表添加字段:

    alter table 表名称 add 列定义
    alter table stu add email varchar(200);

2.修改字段:

    alter table 表名称 change 旧字段名称 新字段定义
    alter table stu change email stuEmail varchar(150);

3.删除字段:

    alter table 表名称 drop 字段
    alter table stu drop stuEmail;

4.修改表名:

    alter table 表名 rename 新名字
    alter table stu rename student;

5.删除表:

    drop table 表名称
    drop table student;

六.SQL DML操作(增删改查)

1.增

insert into 表名称(字段1,字段2,字段3,...) values(val1,val2,val3,...);

insert into student(stuNum,stuName,stuAge,stuSex,stuTel) values("0001","zhangsan",18,"1","13812345678");

insert into student(stuNum,stuName,stuAge,stuSex,stuTel) values("0002","lisi",12,"2","18712345678");

insert into student(stuNum,stuName,stuAge,stuSex,stuTel) values("0003","王五",13,"1","123456");

insert into student(stuNum,stuName,stuAge,stuSex,stuTel) values("0004","李柳",13,"2","123456456");

insert into student(stuNum,stuName,stuAge,stuSex,stuTel) values("0006","张六",13,"2","123456456");

insert into student(stuNum,stuName,stuAge,stuSex,stuTel) values("0007","张六1",13,"2","123456456");

insert into student(stuNum,stuName,stuAge,stuSex,stuTel) values("0008","张六2",13,"2","123456456");

insert into student(stuNum,stuName,stuAge,stuSex,stuTel) values("0009","张六3",13,"2","123456456");

插入中文会出现乱码的情况:

set names gbk;//指定 DBMS 系统字符集为中文字符集

修改mysql字符集:

show variables 查看mysql系统变量的
show variables like "%character%";//查找关于字符集的系统变量

回显:

 character_set_client     | gbk

 character_set_connection | gbk

 character_set_database   | utf8

 character_set_filesystem | binary

 character_set_results    | gbk

 character_set_server     | utf8

 character_set_system     | utf8

修改:set character_set_connection =utf8;

2.查看

select * from 表名称

3.修改:

update 表名称 set 字段=值,字段=值...... where id=num;
update student set stuName="赵六",stuAge=20 where id=3;

4.删除:

delete from 表名称 where id=num;
delete from student where id=4;

5.查询:

select 字段列表 from 表名称 [where 条件][order by 字段 asc|desc][limit 起始位置,长度][group by 字段名称(分组)]
1) select 字段列表 from 表名称
    查询某些字段
    select stuNum,stuName from student;
    注意:可以给字段名称 表名称 起别名
        select stuNum as stn,stuName as sn from student as sd;
        起别名作用:字段简单,方便其他程序调用


2)order by 排序 asc升序 desc降序
        select * from student order by id asc;
        select * from student order by id desc;

3)limit 起始位置,长度  截取记录
        select * from student limit 1,3;
        select * from student limit 4,4;
  倒序截取记录:(位置与id无关)
        select * from order by id desc limit 0,4;

4)group by 分组:
    select * from books group by bTypeId  按类型id分组
    分组以后,每组中的记录都会取1条

5)where 条件:
    比较符号:>  <  >=  <=  =  <>
        select * from books where bid=100;字段和值进行比较
    逻辑运算:and or
        select * from books where bid>100 and bid<110;
    模糊搜索:字符串中 含有某个关键词 就能找到
        like "%关键词%"  %表示任意字符串
        select * from books where bName like "%网%";

    范围:
        连续范围
            [not]between......and
            select * from books where bid between 100 and 110;
                                      bid >= 100 and bid <= 110;
        不连续 范围
            [not]in()
            select * from books where bid in(103,105,107,109);
                                      bid=103 or bid=105 or bid=107 or bid = 109;

6)子查询:
    select 语句中 的条件 又出现了查询语句
    查询 类型是"网站"的所有图书
    select * from books where btypeid=(select btypeid from btypeid where btypename="网站");
    主表:后边需求中涉及到的表 主表 “所有图书”
    从表:前面需求中涉及到的表 从表 “类型是网站的表”
    效率低


7)连接查询:通过 多张表的共有字段,查找多张表构成的并集
    2张表以上。


    内连接:共同字段相等。两张表的地位相等
        select * from 表1,表2 where 表1.共有字段=表2.共有字段
        select * from books as bs,btype as bt where bs.btypeid = bt.btypeid;
        注意:内连接中:共有字段中的值,必须两张表都有,才能找到。


    外连接:表分主表 从表。主表中的数据,全部展示,从表有和主表对应的数据 显示,没有对应的,不显示。

    left join
        select * from 主表 left join 从表 on 主表.共有字段=从表.共有字段[where 其他条件];
        select * from books as bs left join btype as bt on bs.btypeid=bt.btypeid;

    right join
        select * from 从表 right join 主表 on 从表.共有字段=主表.共有字段[where 其他条件];
        select * from btype as bt right join books as bs on bt.btypeid=bs.btypeid;

七.MySQL聚合函数

MySQL聚合函数:MySQL提供的系统实现特定功能的函数

1.算术函数

    sum()求和: select sum (bytypeid) from books;
    avg()求平均值:select avg(btypeid) from books;
    count() 统计记录数:
    select count(*) from books; 
    select count(*) from books where btypeid=2 ******

2.字符串:

    concat(str1,str2,str3,...)拼接
    select concat (bName Typeid) as p from books;

一般情况:很少在mysql语句上使用函数,加重mysql负担。

八.MySQL中的索引

索引:类似于查询目录    
数据库索引:以文件的形式存储的。
特点:数据的更新和索引的更新 是同步的。
作用:提高查询效率

索引类型:

主索引:

        primary key,主键 确定唯一记录的。where id=???
        id int auto_increment primary key,

普通索引:最基本的索引,可以加在多列上

创建表的时候添加:

            create table student(
                id int(6) auto_increment primary key,
                stuNum
                stuName
                stuAge
                stuSex
                stuTel
                key 索引名称(字段)
);
            create table users(
                id int(6) auto_increment primary key,
                name varchar(20),
                pwd varchar(20),
                key dt(name)
);

对已经有的表添加:

                alter table 表名称 add index 索引名称(字段);
                alter table student add index ts(stuNum);
                alter table student add index ts1(stuName);

唯一索引:可以加在多列上,列上加了唯一索引,该列值不能重复

创建表的时候添加:

            create table student(
                id int(6) auto_increment primary key,
                stuNum
                stuName
                stuAge
                stuSex
                stuTel
                unique key 索引名称(字段)
);

修该表的时候添加:

            alter table 表名称 add unique 索引名称(字段);

全文索引:加载有大段字符串的文本上。

创建表的时候添加:

            create table student(
                id int(6) auto_increment primary key,
                stuNum
                stuName
                stuAge
                stuSex
                stuTel
                fulltext key 索引名称(字段)
);

修该表的时候添加:

            alter table 表名称 add fulltext 索引名称(字段);

全文索引目前不支持中文

注意顺序:
    主索引
    唯一索引
    普通索引
    全文索引

索引的缺点:

    数据索引同步更新,全有索引,降低效率。

    索引是以文件的形式存储的,索引过多,索引文件会很大。

用户名 手机 性别 商品名称 价格 供应商 都是要加索引的类型

九.MySQL外键

1.什么是外键

表与表之间的特定关系,保持了数据的完整性和一致性

    user 用户
    order 订单
    用户下订单
    1)删除用户,没有删除订单,数据就不一致
    2)order 表中插入记录

外键控制:让用户不更新数据,或者是用户删除数据的时候,让订单同步删除。

2.外键特点:

    (1)innodb 类型 查看 show create table 表名;  engine值是否为(innodb)
    (2)外键是两表的约束关系
    (3)外键的名称唯一

3.创建外键:

        create table 表名(
        列定义
        索引定义
        外键定义:[constraint 约束名称] foreign key [外键名称]
                references [外键名称](外键约束)
                【on delete (restrict | cascade | set null | no action)】
                【on update (restrict | cascade | set null | no action)】
);
    restrict:拒绝对父表的删除或更新操作
    cascade:父表的删除或更新,自动删除或更新子表中对应的记录
    set null:父表删除或更新的时候,设置子表外键字段为null
    no action:什么都不做

4.demo

        create table user(
        id int(6) auto_increment primary key,
        name varchar(30),
        sex int(1)
)engine=innodb
insert into user(name,sex)values("zhangsan",1);
insert into user(name,sex)values("lisi",2);
insert into user(name,sex)values("wangwu",1);
    create table orders(
    order_id int(6) auto_increment primary key,
    u_id int(6),
    username varchar(30),
    money int(6),
    datetime date,
    key ud(u_id),
    foreign key order_f_key (u_id) references user(id)
);
insert into orders(u_id,username,money,datetime)values(1,"zhangsan",300,"2018-01-22");
insert into orders(u_id,username,money,datetime)values(1,"zhangsan",500,"2018-01-22");
insert into orders(u_id,username,money,datetime)values(2,"lisi",600,"2018-01-22");
insert into orders(u_id,username,money,datetime)values(2,"lisi",800,"2018-01-22");
insert into orders(u_id,username,money,datetime)values(3,"wangwu",1000,"2018-01-22");
insert into orders(u_id,username,money,datetime)values(3,"wangwu",1200,"2018-01-22");
insert into orders(u_id,username,money,datetime)values(4"maliu",100,"2018-01-22");

5.通过修改表 来改变外键的属性

alter table 表名称 add foreign key 外键名称(外键字段) references 主表(字段) on delete/on update cascade;

alter table orders add foreign key (u_id) references user(id) on update cascade;

delete from user where id=2;

6.删除外键:

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

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

标签:

分享到:

扫一扫在手机阅读

扫一扫 在手机阅读、分享本文

上一篇: 下一篇:

精彩评论

全部回复3人评论899 views人参与
  1. 1楼
    xing1982

    不错不错!内容感觉好极了!

    2018-02-04 05:20:04 回复
  2. 2楼
    屌炸天

    新春佳节到。祝好!祝好!

    2018-02-06 01:15:09 回复
  3. 3楼
    趣头条

    鸟儿叫,花儿笑,一年一季春来到!

    2018-02-07 02:55:40 回复

电子邮件地址不会被公开。 必填项已用*标注

loading

孤独的渔夫,自闭修炼到白头~

最新评论