• 我的mysql入门笔记



    DDL
    DDL:Data Definition Language,数据定义语言!
    主要是用来定义和维护数据库的各种对象(比如库、表、索引和视图等),
    也可以说操作的层次是在数据库和表的逻辑结构和存储结构上面,并没有对表中的实际的
    数据进行操作!

    主要的操作关键字:create、drop、alter等

    DML
    DML:Data manipulation Language,数据操作语言
    主要是对表中的记录进行增删改查的操作!

    其中,“查询”部分,又称为DQL(Data Query Language),数据查询语言!

    主要的操作关键字:insert、delete、update、select等

    DCL
    DCL:Data Control Language,数据控制语言

    主要是对数据库进行统一控制和统一管理的工作,比如并发控制、存取控制、安全控制等;
    具体的有:数据库的权限管理,数据的备份与恢复等!

    -- 从入门开始,从入门开始,从入门开始,从入门开始,从入门开始,-------

    -- -------------------------------数据库操作---------------------------------

    #创建数据库(增) create
    #create database 数据库名 [字符集 校对规则];
    create database test1;
    或者
    create database if not exists test1;

    #创建表测试
    use test1;
    create table t1 (
    id int,
    name varchar(10)
    )engine=innodb;

    #增加测试数据
    insert into t1 values(1, 'a'),(2, 'A'),(3, 'b'), (4,'B');

    #在没有指定校验规则下,也就是不区分大小写,结果查出两条
    select * from t1 where name = 'a';

    #查看数据库 (查) show
    show databases;

    #查看数据库创建语句
    show create database test1;

    #删除数据库 (删) drop
    drop database test1;
    或者
    drop database if exists test1;

    #修改数据库 (改) alter
    #数据库的名称不可通过sql语句进行修改!只能修改数据库的库选项信息
    #如果现在就是想修改数据库名,应该怎么办?
    #1,直接修改目录名!但是要谨慎,因为有时候不是所有数据库下的表都放在同一个地方!
    #2,把当前所有的数据表导出,创建一个新的数据库,把导出的数据表再导入进来,最后再删除以前的数据库!
    alter database 数据库名 新的库选项;
    alter database test1 default charset utf8;

    #通过rename语法实现数据库的重命名
    #1,先创建一个新的数据库
    #2,就旧数据库下所有的数据表rename到新的数据库下
    #3,删除旧数据库
    rename table 表名 to 数据库名.数据表名;

    -- ------------------------------数据表操作---------------------------------------

    #创建数据表(增) 关键字:create
    create table [if not exists]表名(
    字段名1 字段类型,
    字段名2 字段类型,
    .......
    )[表选项];

    create table t1(
    a int,
    b float
    );
    #增加一条测试数据
    insert into t1 values(1, 5.20), (2, 3.34);

    #查看数据表 (查) 关键字: show
    show tables;
    show create table 表名;
    show create table t1;
    #查看数据表的表结构
    desc t1;

    #删除数据表 (删) 关键字: drop
    drop table 表名;
    drop table t1;
    #如果删除一个不存储的表,会报错,所以,还有一个比较完整的语法形式:
    drop table if exists t1;

    #修改数据表 (改) 关键字: alter
    #表中有哪些地方可以修改?
    #1,表名
    #2,字段类型,字段名、增加字段、删除字段等,统称为列定义
    #3,表选项
    #上面的修改数据表的指令都可以分成上级命令+下级命令来记忆,其中上级命令都是一样的,
    -- 上级命令
    alter table 表名 .....
    -- 下级命令
    #增加:add
    #删除:drop
    #重命名表名:rename
    #重命名字段名:change
    #修改:modify

    #修改表名,下级命令: rename
    alter table 表名 rename to 新表名;
    alter table t1 rename to t2;
    -- 还有另外一种语法
    rename table 旧表名 to 新表名;
    rename table t2 to t1;
    #还可以利用rename语法实现将一个数据库的数据表移动(剪切)到另一个数据库下:
    rename table 表名 to 数据库名.数据表名;

    #修改列定义,又可以分成很多操作,常见的有:
    #增加一列,下级命令: add
    alter table 表名 add 新列名 列类型;
    alter table t1 add c varchar(10);

    #新增的列默认是在整个字段的最后面,如果想排在最前面,需要在语句的后面加上first关键字!
    alter table 表名 add 新列名 列类型 first;
    alter table t1 add d varchar(10) first;

    #如果是想排在另外一个字段名的后面,需要使用after关键字:
    alter table 表名 add 新列名 列类型 after 字段名;
    alter table t1 add e varchar(10) after a;

    #删除一列,下级命令: drop
    alter table 表名 drop 字段名;
    alter table t1 drop e;

    #修改一列, 下级命令: modify
    alter table 表名 modify 字段名 新的字段类型;
    alter table t1 modify c float;

    #修改已有的字段排序
    alter table 表名 modify 字段名1 字段类型 after 字段名2;
    alter table 表名 modify 字段名 字段类型 first;

    #重命名字段, 下级命令: change
    alter table 表名 原字段名 新字段名 新字段类型;

     alter table t1 change a aa varchar(10);

    #修改表选项
    alter table 表名 新的表选项;
    alter table t1 engine Myisam default charset utf8;


    -- --------------------------------数据的操作-----------------------------------
    DML语言,增删改查
    -- 创建一张测试表
    create table student (
    stu_name varchar(20),
    stu_gender enum('male', 'famale'),
    stu_age tinyint unsigned,
    stu_tel varchar(20)
    );

    #插入数据(增), 关键字:insert
    #1,字段列表可以是该表的全部字段,也可以是部分字段(也就是只插入部分数据,
    # 其他的默认为null,表示什么都没有)
    #2,字段列表可以和原表中的字段列表的顺序不一样,但是要保证和后面值列表的顺序是一一对应的!
    insert into 表名(字段名1, 字段名2,.....) values(值1,值2.......);
    insert into student(stu_name, stu_gender) values('张三', 'male');
    #省略字段名,但值得顺序必须和字段名顺序一致
    insert into student values('李四', 'male', 22, '13812345678'),
    ('王五', 'male', 25, '13812345452'),
    ('马六', 'male', 27, '13812345852');
    #插入数据的另一种写法
    insert into 表名 set 字段1=值1,字段2=值2,字段3=值3......;

    #查询数据 (查), 关键字:select
    select *|字段列表 from 表名 [查询条件];
    select * from student;

    #删除数据(删), 关键字: delete
    #在实际的应用中,这里的删除条件也往往是必须的,
    #因为如果省略,就代表删除了该表中的所有的记录!而且默认也不可逆的!
    delete from 表名 [删除条件];
    delete from student where stu_age is null;

    #修改数据 (改), 关键字: update
    #和删除数据一样,这里的修改条件也往往是必须的,
    #因为如果省略,整个数据表的所有的记录都受影响!
    update 表名 set 字段1=值1, 字段2=值2....[修改条件];
    update student set stu_age = stu_age + 1 where 1;


    -- -------------------------字符集-------------------------------------
    #查看当前MySQL服务器支持哪些字符集
    show charset;
    gbk :一个汉字占用2个字节!
    utf8:一个汉字占用3个字节!

    为什么会出现乱码?
    如果两个软件所采用的默认字符集不同,又没有进行相应的转换或说明,就会出现乱码!

    字符集是多个字符(英文字符,汉字字符,或者其他国家语言字符)的集合,
    字符集种类较多,每个字符集包含的字符个数不同。

    ①字符编码方式是用一个或多个字节表示字符集中的一个字符!
    ②每种字符集都有自己特有的编码方式,因此同一个字符,
    在不同字符集的编码方式下,会产生不同的二进制!

    #查看MYSQL系统变量值
    show variables like '%character%';

    库、表、列字符集的由来
      ①建库时,若未明确指定字符集,则采用character_set_server指定的字符集。
      ②建表时,若未明确指定字符集,则采用当前库所采用的字符集。
      ③新增时,修改表字段时,若未明确指定字符集,则采用当前表所采用的字符集。

    设置字符集编码
    set names 'utf8';

    相当于同时设置:
      set character_set_client = utf8;
      set character_set_results = utf8;
      set character_set_connection = utf8;

    -- -----------------------------校对规则--------------------------------------

    校对规则(collation):
      是在字符集内用于字符比较和排序的一套规则,比如有的规则区分大小写,有的则无视。
    校对规则都基于字符集的,每一套字符集都有与之相关的校对规则!

    通过show collation命令来查看当前数据库有哪些排序规则:
    只看utf8_开头的
    show collation like '%utf8_%';
    常见的有:
    ci结尾的:不区分大小写(针对英文)
    cs结尾的:区分大小写(针对英文)
    bin结尾:二进制编码比较

    #utf8不支持中文比较,但是gbk支持(比较拼音)
    #修改校对规则的语法为:
    alter database 数据库名 default collate utf8_general_ci;
    alter database test1 default collate utf8_general_ci;

    由于校对规则都是基于字符集的,所以修改了相关校对规则之后,可能会自动的修改了默认的字符集:

  • 相关阅读:
    Bootstrap+Angularjs自制弹框
    【2019年04月22日】A股最便宜的股票
    沪深300指数的跟踪基金排名
    【2019年04月10日】股票的滚动市盈率PE最低排名
    【2019年04月09日】A股净资产收益率ROE最高排名
    基金 、社保和QFII等机构的重仓股排名评测
    【2019年04月04日】股市指数估值排名
    【2019年04月03日】A股最便宜的股票
    净资产收益率ROE连续3年超过15%的股票排名
    A股滚动净利润增速最高排名
  • 原文地址:https://www.cnblogs.com/zhang19950924/p/13217139.html
Copyright © 2020-2023  润新知