zoukankan      html  css  js  c++  java
  • Python Day 39 Mysql基本语法(一)基本介绍、安装(无界面版)、数据库和数据表增删改查、数据类型(整形,浮点型,字符型,时间 、枚举与集合)

      ##Mysql基本语法(一)

    ##Mysql基本语法
      MySql day01
    
    #一. 为啥使用数据库?
        
        因为之前使用文件(Excel)管理数据, 但是数据量特别大的时候,使用Excel管理 的话, 就比较的麻烦了
        因此引入一个新的数据管理软件 : 数据库软件
    
    #二. 数据库的分类?
        
        关系型数据库
            
            1. 有约束
            2. 基于硬盘的存储 (就是将数据存储到硬盘上, 持久化 === 落地)
            
            典型代表:
                MySQL oracle(国企) sqlserver(微软)  sqllite  db2
            
        非关系型数据
        
            1. 没有约束 (key--->value)
            2. 基于内存存储 (将数据放入到内存中)
            
            典型代表:
                MemCache, redis(微博), mongodb
                
    #三. mySQL的架构::        
            
            客户端:
                socket客户端, 连接服务端, 发送指令 (SQL语句)
            服务端:
                socket服务端, 接收客户端的指令, 并将结果返回给客户端
            
            
    #四. MySQL 的安装
    
            版本: 5.5 以上  5.7 以下
            
            1. 可执行文件:
                .exe 或者 .msi文件
                点击下一步
                
            2. 压缩包
            
                解压, 进入目录 bin
                
                mysqld : 启动服务
                
                mysql  : 连接服务端
                
            3. 环境变量的配置
            
    
        ps:
            工作中, 线上的 MySQL 不需要开发自己装, 运维或者DBA装
            练习中, 需要自己手动安装MySQL
            
    
            
    #五. 初始化:
            mysqld --initialise-secure
            
        
        数据库 (文件夹):
            表 (文件)
               数据行 (文件中的一行内容)
    
    #六. 数据库的操作: (********************************)
            
            1. 数据库:
            
                    增加:
                        SQL语句:  
                            create database 数据库名称;
                        例子:
                            create database db1;
                        
                    删
                        drop database 数据库名称;
                        drop database db1;
                        
                    修改
            
                        没有专门的修改指令 update
                        
                        删了重新建
                        
                    查询
                        show databases;
                    
                    使用:
                        use 数据库名;
                        use db1;
            
            2. 数据表:
                
            #创建表的完整语法
              create table 表名(
              字段名1 类型[(宽度) 约束条件],
              字段名2 类型[(宽度) 约束条件],
              字段名3 类型[(宽度) 约束条件]
              );
    
             #解释:
              类型:使用限制字段必须以什么样的数据类型传值
              约束条件:约束条件是在类型之外添加一种额外的限制
    
    
              # 注意:
              1. 在同一张表中,字段名是不能相同
              2. 宽度和约束条件可选,字段名和类型是必须的
              3、最后一个字段后不加逗号
              #修改sql_mode为严格模式:在该模式下,如果插入的数据超过限制,则会立即报错
              mysql> set global sql_mode="strict_trans_tables";
    
                  #统一字符编码
                        1、在mysql安装目录下新建my.ini文件
                        2、修改my.ini
                            [mysqld]
                            character-set-server=utf8
                            collation-server=utf8_general_ci
    
                            [client]
                            default-character-set=utf8
    
                            [mysql]
                            default-character-set=utf8
    
                        3、重启mysqld
                        4、客户端登录,输入s查看结果
             #
    约束条件
                    not null  不能为空
                    default   设置默认值
    
    
                    mysql中存在一种专门的数据结构,叫key,又称为索引,通过该数据结构可以减少io次数,从而加速查询效率
                        index key : 只有加速查询的效果,没有约束的功能
                        unique key:不仅有加速查询的效果,还附加了一种约束的功能
                        primary key:不仅有加速查询的效果,还附加了一种约束的功能,并且innodb存储引擎会按照主键字段的值
                        来组织表中所有的数据,所以一种inndob表中必须有、而且只能有一个主键,通常该表的id字段
    
    
                    unique
                        单从约束角度去看:唯一性约束,不可重复,但可以为null
                    prmary key:
                        单从约束角度去看,primary key = not null unique
                    auto_increment:只能给被约束成key的字段加自增属性,默认起始位置是1,步长也为1
              #新建:
                        use db1;
                        
                        版本0:
                            SQL语句:
                                create table 表名 (
                                    列名1 列类型
                                );
                            
                            例子:
                                create table t1 (
                                    id  int,
                                    name char(32) 
                                );
                            
                            增加
                                指令: 
                                    insert into  表名 (列1, 列2) values (值1, 值2);
                                
                                例子: 
                                    insert into  t1 (id, name) values (1, 'zekai');
                                    insert into  t1 (id, name) values (2, '你好');
                        
                        改进1:
                            create table 表名 (
                                列名1 列类型
                            )engine=Innodb charset=utf8;
                        
                        ps: 
                            引擎: Innodb 和 MyIsam 
                            5.5 版本以上  默认是Innodb
                            
                            create table t2 (
                                id  int,
                                name char(32) 
                            )engine=Innodb charset=utf8;
                            
                            insert into  t2 (id, name) values (1, '你好');
                            insert into  t2 (id, name) values (1, 'xxx');
                        
                        改进2:
                        
                            create table 表名 (
                                列名1 列类型 auto_increment primary key
                            )engine=Innodb charset=utf8;
                            
                            create table t4 (
                                id  int auto_increment primary key, 
                                name char(32)  not null  default ''
                            )engine=Innodb charset=utf8;
                            
                            auto_increment : 自增
                            primary key : 主键索引 (作用: 加快查找的速度)
                            not null : 不能为空
                            default : 默认值
                            
                            注意: 后面一列写完之后, 不能加逗号  (*********)
                            
                            一种:
                                insert into  t3 (id, name) values (1, '你好');
                                insert into  t3 (id, name) values (2, 'xxx');
                            二种:
                                insert into  t3 (name) values ('hello');
                                insert into  t3 (name) values ('xxx');
                            
                        
                        -------------------------------------------------------------
                        
                        #最终的格式:
                            create table 表名 (
                                列1 列属性 [是否为null 默认值],
                                列2 列属性 [是否为null 默认值],
                                .....
                                列n 列属性 [是否为null 默认值]
                            )engine = 存储引擎  charset = 字符集
    
                        最终的例子:
                            create table t4 (
                                id  int auto_increment primary key, 
                                name char(32)  not null  default '',
                                pwd  char(32)  not null  default ''
                            )engine=Innodb charset=utf8;
                        
                        查看: 
                            指令:
                                select 列名 from 表名;
                            例子:
                                select * from t1;
                    
                        
                        #列类型:
                            
                            a. 数值型
                     基本数据类型之整型:作用:id号,各种号码,年龄,等级
                                create table t4 (
                                    id  unsigned mediumint auto_increment primary key, 
                                    name char(32)  not null  default '',
                                    pwd  char(32)  not null  default ''
                                )engine=Innodb charset=utf8;
                                
                                tinyint : 
                                    范围:  
                                        有符号: -128到127
                                        无符号: 0 到 255  unsigned
                                smallint
                                    范围:  
                                        有符号: -32768到32767
                                        无符号: 0 到 65535  unsigned
                                
                                mediumint
                                    范围:  
                                        有符号: -8388608到8388607
                                        无符号: 0 到 16777215  unsigned
                                int
                                bigint
                                
                                #区别: 
                                    a. 取值范围不一样, 根据自己公司的业务来去选择
                                    b. 无符号和有符号的意思
                     #、强调:对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制
                          所以在创建表示,如果字段采用的是整型类型,完全无需指定显示宽度,
                         默认的显示宽度,足够显示完整当初存放的数据
    
                     # 显示时,不够8位用0填充,如果超出8位则正常显示
                         create table t5(x int(8) unsigned zerofill);
                         insert into t5 values(4294967296123);
                          insert into t5 values(1);
                    
    #字符类型:作用:姓名,地址,描述类的信息 float(M,D) 浮点型 decimal(M,D) 定点型 比float更加的精准 例如: 3.1415151519868789789 float: 3.141515000000000000 decimal : 3.1415151519868789789 126.35 M:小数总共多少位 decimal(5, ) D:小数点后面几位 decimal(5, 2) 使用场景: 比如 说存 salary 工资 : 6000.23 decimal(,2) b. 字符串类型:作用:姓名,地址,描述类的信息 char : 定长 char(32) 这一列的值就是32 优点: 速度快 缺点: 浪费 varchar : 变长 varchar(32) 优点: 不浪费, 节省空间 缺点: 速度慢 根据自己公司的业务来去选择: create table userinfo ( id unsigned mediumint auto_increment primary key, name varchar(128) not null default '', pwd char(32) not null default '', create_time datetime not null default '1970-01-01 00:00:00' )engine=Innodb charset=utf8; 一般情况下, 如果没有100%的把握, 都是用varchar() text: 文本 范围比较大, 如果存储大量字符的话, 可以使用这个字段                                               #测试:字符的宽度限制单位是字符个数                     create table t12(x char(4)); # 超出4个字符则报错,不够4个字符则用空格补全成4个字符                     create table t13(y varchar(4));# 超出4个字符则报错,不够4个字符那么字符有几个就存几个                     insert into t12 values('hello');                     insert into t13 values('hello');                     insert into t12 values('a'); #'a '                     insert into t13 values('a'); #'a'                     set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";                     select char_length(x) from t12; #4                     select char_length(y) from t13; #1                   # 注意:                     针对char类型,mysql在存储时会将数据用空格补全存放到硬盘中                     但会在读出结果时自动去掉末尾的空格,因为末尾的空格在以下场景中是无用                     mysql> select * from t14 where name="lxx"; # name字段明确地等于一个值,该值后填充空格是没有用                     mysql> select * from t14 where name like "lxx"; # name字段模糊匹配一个值,该值后填充空格是有用的,即查不出来 因为lxx后面还有两个空格,可以在lxx后面加一个% c. 时间类型 date 2019-6-12 推荐使用datetime               d.枚举与集合                   枚举enum,多选一个                   集合set,多选多   # 指令: drop table 表名; 连带着将数据表中的所有数据都会删掉 ps: 工作中, 线上数据库, 这个命令根本不会让你用到 实例: drop table t1; #查询 show tables; desc 表名; : 查看表的结构 show create table 表名 : 查看表的创建过程 关于主键自增: (不是重点) show session variables like 'auto_inc%'; set session auto_increment_increment = 2; show global variables like 'auto_inc%'; set global auto_increment_increment = 2; #修改 create table t4 ( id int auto_increment primary key, name char(32) not null default '', pwd char(32) not null default '' )engine=Innodb charset=utf8; 修改字段: alter table 表名(t3) change 原列名(name) 新列名(username varchar(32) not null default ''); 新增字段: alter table 表名(t3) add 新列(pwd char(32) not null default ''); 删除字段: alter table 表名(t3) drop 列名(pwd); 3. 数据行: 增 insert into t3 (id, name) values (1, '你好'); 查询 select * from t3; : 将表中的 所有的列全部列出 select 列名, 列名, 列名 from t3 : 将某一列的值查出 删 delete from 表名(t3); 将表中的所有的 数据删除掉, 再次添加的时候, 继续会延续上一个 ID truncate 表名(t3); 将表中的所有的 数据删除掉, 再次添加的时候, ID 会重新开始 truncate 速度快 ps: 工作中, 线上数据库, 这个命令根本不会让你用到 delete from 表名(t3) where name = 'xxxxx'; 修改 update t3 set username='zekai'; update t3 set username='xxxx' where id=3; update t3 set username='xxxx', pwd='xxxxx' where id=3;
  • 相关阅读:
    python-全局变量是否使用global总结
    python-多线程创建以及查看
    python-tcp客户端
    python-udp聊天器
    python-udp接受数据
    python-udp发送数据
    python-正则表达式总结
    JAVA程序员面试必知32个知识点
    计算机专业英语基础篇
    非常经典有深度的电影英文台词
  • 原文地址:https://www.cnblogs.com/liangzhenghong/p/11013966.html
Copyright © 2011-2022 走看看