zoukankan      html  css  js  c++  java
  • python全栈开发day54-mysql库操作、表操作、数据类型、完整性约束

    一.昨日内容回顾

      1、mysql的安装

      1).解压文件 添加环境变量bin

      2).初始化mysql生成数据data文件夹:

       mysqld --initialize-insecure

      3).mysqld 启动服务

           4).mysql -u root -p 客户端连接

    //将mysql服务制作成windows服务

        1)mysqld --install  

        2) mysqld --remove 

           net start mysql # 启动服务

      net stop mysql # 停止服务

        2、 mysql的基本管理

          1) 查看当前用户

            select user();

          2)  设置密码(现在已不用这种方式)

            mysqladmin -u root -p'123' password "456"

          3) 忘记密码的登录方式

           (1) 以管理员身份运行终端,停止net stop mysql服务

              (2) 执行跳过授权命令 启动mysql服务

              mysqld --skip-grant-tables

           (3) 更改密码

             update mysql.user set authentication_string = password('') where User='root';

             (4) 刷新权限,执行命令

             flush privileges;

            (5) 退出mysql  exit

                              (6) 服务端kill  mysql进程

              tasklist|findstr mysql

                                        taskkill /F /PID 进程号

                               (7) 启动服务进行mysql新密码登录即可。

                         4) 统一字符编码    mysql> s 查看编码信息  

              在C:mysql-5.6.40-winx64文件下创建my.ini文件   
    #mysql5.5以上:修改方式为
        [mysqld]
        character-set-server=utf8
        collation-server=utf8_general_ci
        [client]
        default-character-set=utf8
        [mysql]
        default-character-set=utf8
    my.ini

    二.今天内容总结

    1、mysql库操作crud

        1) 增

          create database db1 charset utf8;

        2)  查

         show create database db1; # 查看数据库

                      show databases;  # 查看当前库

         select database(); # 查看所在的库。

        3)  改

         alter database db1 charset gbk

        4) 删

         drop database db1;

        5) 数据库的命名规则:     

    可以由字母、数字、下划线、@、#、$
    区分大小写
    唯一性
    不能使用关键字如 create select
    不能单独使用数字
    最长128位
    # 基本上跟python或者js的命名规则一样
    数据库的命名规则

         6) 了解DDL、DML、DCL    

    SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型:
    1、DDL语句    数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
    
    2、DML语句    数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
    
    3、DCL语句    数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
    DDL、DML、DCL

    2、mysql表操作

         1 ) 操作表

          # 增

                                use db1

            create table t1(id int,name char);

          # 查

            show create table t1; # 查看当前的这张t1表

                                 show tables;   # 查看所有的表

            desc t1; # 查看表的详细信息

          # 改

           alter table t1 modify name char(6)  # 改name的数据类型显示宽度,更改字段属性

           alter table t1 change name Name char(7) # 改字段name为Name 后边也要加属性

           alter table t1 add 新列名 int 

             alter table t1 drop 列名;

                             alter table t1 add i int after c;

             alter table t1 add i int first; # 插入在第一列处

           alter table t1 alter i set default 1000; # 设置默认值

           alter table t1 alter i drop default; # 删除列默认值

           alter table t1 rename to t2; # 修改表名

           alter table t7 add primary key(id);   # 修改主键

           alter table t7 change id id int auto_increment; # 增加auto_increment 属性

                             alter table user add constraint fk foreign key(idept_d) references dept(id) on delete cascade on update cascade;  # 增加外键、

           alter table user drop foreign key  fk;

           # 删

          drop table tb1  # 删除表tb1

         # 复制表

          方式一:create table b1 select * from db2.a1; # 复制结构和数据;

          方式二:create table b1 select * from db2.a1 where 1>2; # 仅复制表结构;

           方式三:create table b1 like db2.a1; # 仅复制表结构。

          2) 操作表内容

            # 增 插入内容

              insert into tb1 values(1,'kack'),(2,'merry');

            # 查

              select id,name from tb1;

              select * from db1.tb1;

            # 改

              update db1.t1 set name ='alex' where id =2;

            # 删

                                       delete  from t1;

                                       delete from t1 where id =2;

              

    3、mysql数据类型

        1) 数值类型

    整型:tinyinit  int  bigint
        小数:
            float :在位数比较短的情况下不精准
            double :在位数比较长的情况下不精准
                0.000001230123123123
                存成:0.000001230000
    
            decimal:(如果用小数,则用推荐使用decimal)
                精准
                内部原理是以字符串形式去存
    数值型

       单精度:float(M,D) 255 30   四字节 32  1 8 23 7

       双精度:double(M,D) 255 30   八字节 64  1 11 52  16

          dec: DEC(M,D) 65,30

       2) 日期类型

    #2. 字符串:
        char10):简单粗暴,浪费空间,存取速度快
                root存成root000000
        varchar:精准,节省空间,存取速度慢
    
        sql优化:创建表时,定长的类型往前放,变长的往后放
                        比如性别           比如地址或描述信息
    
        >255个字符,超了就把文件路径存放到数据库中。
                比如图片,视频等找一个文件服务器,数据库中只存路径或url。
    View Code
    语法:
            YEAR
                YYYY(1901/2155)
    
            DATE
                YYYY-MM-DD(1000-01-01/9999-12-31)
    
            TIME
                HH:MM:SS('-838:59:59'/'838:59:59'DATETIME
    
                YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)
    
            TIMESTAMP
    
                YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)
    日期

        3) 字符类型

      length() 查字节长度、char_length() 查字符长度

      char 和varvhar的区别:

      char:

           字符长度范围:0-255(一个中文是一个字符,是utf8编码的3个字节)

        存储:定义多长个字符存多长字符,不足补空格,超出报错

        查询:默认去掉尾部空格,除非设置SQL模式:SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';  查询sql的默认模式:select @@sql_mode;

      varchar:

         字符长度范围:0-65535(如果大于21845会提示用其他类型 。mysql行最大限制为65535字节,字符编码为utf-8:https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html)

        存储:有多少字符存多少字符,空格也算

                 查询:有多少查多少,空格也算。

        4) 枚举和集合类型

          enum 单选 只能在给定的范围内选一个值,如性别sex male/female

          set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2.。。。。)

           

    mysql> create table consumer(
        -> id int,
        -> name varchar(50),
        -> sex enum('male','female','other'),
        -> level enum('vip1','vip2','vip3','vip4'),#在指定范围内,多选一
        -> fav set('play','music','read','study') #在指定范围内,多选多
        -> );
    Query OK, 0 rows affected (0.03 sec)
    
    
    mysql> insert into consumer values
        -> (1,'赵云','male','vip2','read,study'),
        -> (2,'赵云2','other','vip4','play');
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> select * from consumer;
    +------+---------+-------+-------+------------+
    | id   | name    | sex   | level | fav        |
    +------+---------+-------+-------+------------+
    |    1 | 赵云    | male  | vip2  | read,study |
    |    2 | 赵云2   | other | vip4  | play       |
    +------+---------+-------+-------+------------+
    rows in set (0.00 sec)
    View Code

    4、mysql完整性约束

        用于保证数据的完整性和一致性。

        PRIMARY KEY # 标识改字段为该表的主键,可以唯一的标识记录

        FOREIGN KEY # 标识该字段为该表的外键

        NOT NULL #标识该字段不能为空

        UNIQUE KEY # 标识该字段值为唯一的

        AUTO_INCREMENT # 标识该字段的值自动增长(整数类型,而且为主键)

        DEFAULT  # 为该字段设置默认值

        UNSIGNED # 无符号

        ZEROFILL # 使用0填充

        1) not null与default

            not null 不能为空,但是设置了default后可以不设置。

        2) unique单列唯一和联合唯一

          create table t1(

            id int unique,

            name char(10) unique);

          create table t2(

            id int ,

            name char(10),

            unique(id),

            unique(name));    

    mysql> create table services(
        -> id int,
        -> ip char(15),
        -> port int,
        -> unique(id),
        -> unique(ip,port)
        -> );

        3) primary key

         单列主键、多列主键。相当于 not null 和unique 

         4) auto_increment

          delete from t1; #如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。

          truncate table t1;数据量大,删除速度比上一条快,且直接从零开始。

        5)    foreign key

          

    create table user(
     id int primary key,
     name char(10) not null,
     dpt_id int not null,
     constraint fk_dep foreign key(dpt_id) references dep(id)
     on delete cascade
     on update cascade
    );
    
    create table dep(
    id int primary key,
    name char(10) not null);
    关联外键

    三.预习和扩展

     

  • 相关阅读:
    中国首届React开发者大会 8月18日 广州举行
    事件循环:Flutter 中代码是如何执行和运行的
    大前端趋势所向:这么多跨端技术,为什么选择 Flutter?
    通往大前端的一把关键钥匙 Flutter
    如何选一部好的手机?性价比高的智能手机推荐,2020智能手机排行榜!
    智能手机边充电边玩对电池有什么损害吗?
    你的智能手机究竟能用多久?
    新型添加技术
    智能手机
    姐姐不愧是姐姐,快看《乘风破浪的姐姐》
  • 原文地址:https://www.cnblogs.com/wuchenggong/p/9318183.html
Copyright © 2011-2022 走看看