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);
关联外键

三.预习和扩展