mysql_004

1、主键(primary key)&&自增长属性(auto_increment)

    1、使用规则
        1、一张表中只能有1个主键字段
        2、约束 :字段值不允许重复,且不能为NULL
        3、KEY标志 :PRI
        4、通常设置记录编号的字段id为主键,能够唯一锁定1条记录
    2、创建表时创建,并指定自增长起始值
        create table 表名(
            id int primary key auto_increment,
            name varchar(20)
        )auto_increment=10000,charset=utf8;
        ## 已有表中重新指定起始值
            alter table 表名 auto_increment=20000;
    3、已有表中添加主键
        alter table 表名 add primary key(id);
    4、删除
        1、删除自增长属性(modify)
            alter table 表名 modify id int;
        2、删除主键
            alter table 表名 drop primary key;

2、外键(foreign key)

    1、定义 :让当前表字段值在另一个表的范围内选择
    2、语法
        foreign key(从表字段名)
        references 主表(主表字段名)
        on delete 级联动作
        on update 级联动作
    3、使用规则
        1、主表、从表字段数据类型要一致
        2、主表被参考字段 :主键
    4、
    表1:缴费信息表(财务)
        id  姓名    班级   缴费金额
        1  唐伯虎  AID10    300
        2  点秋香  AID10    300
        
        create table jftab(
            id int primary key,
            name varchar(20),
            class char(5),
            money int);

        insert into jftab values
        (1,"唐伯虎","AID10",300),
        (2,"点秋香","AID10",300),
        (3,"文征明","AID10",300);

    表2:学生信息表(班主任)
        stuid  姓名    缴费金额
        1    唐伯虎    300
        3    祝枝山    300
        
        create table bjtab(
            stuid int,
            name varchar(20),
            money int,
            foreign key(stuid) references jftab(id)
            on delete cascade
            on update cascade
        );
    5、级联动作
        1、cascade :数据级联删除、更新(参考字段)
        2、set null:主表更新、删除时,从表相关联记录该字段值设置为NULL
        3、restrict:从表有相关联记录,不允许主表操作
    6、删除外键
        show create table 表名;
        alter table 表名 drop foreign key 外键名;
    7、在已有表中添加外键
        alter table 从表 add foreign key(stuid) references 主表(id)
        on delete 级联动作
        on update 级联动作

3、锁 :目的是解决客户端并发访问的冲突问题

    1、锁类型分类
        1、读锁(共享锁)
            select:加读锁后别人不能更改表记录,但可查询
        2、写锁(互斥锁、排他锁)
            update:加写锁后别人不能查询,不能改
    2、锁粒度
        1、行级锁 :Innodb
            可以加读锁、写锁
        2、表级锁 :MyISAM
            可以加读锁、写锁

4、存储引擎(处理表的处理)

    1、基本操作
        1、查看所有的存储引擎
            mysql>show engines;
        2、查看已有表的存储引擎
            mysql>show create table 表名;
        3、创建表时指定存储引擎
            mysql>create table 表名(...)engine=MyISAM
        4、已有表
            mysql>alter table 表名 engine=InnoDB;
    2、InnoDB特点
        1、支持行级锁、外键
        2、支持事务、事务回滚
        3、共享表空间
            表名.frm :表结构和索引信息
            表名.ibd :表记录
    3、MyISAM特点
        1、支持表级锁
        2、独享表空间
            表名.frm :表结构
            表名.myd :表记录
            表名.myi :索引文件
    4、MEMORY特点
        1、表结构在硬盘中,表记录在内存中
        2、服务重启或主机重启后,表记录消失
    5、如何决定使用哪个存储引擎
        1、执行查询操作多的表 :MyISAM(使用InnoDB浪费资源)
        2、执行写操作多的表   :InnoDB

5、数据导入 :把文件系统内容导入到数据库表中

    1、语法格式
        load data infile "文件名绝对路径"
        into table 表名 
        fields terminated by "分隔符"
        lines terminated by "\n"
    2、数据导入步骤
        1、把文件拷贝到数据库搜索路径中
            1、查看搜索路径
                show variables like "secure_file_priv";
            2、拷贝文件
                sudo cp scoreTable.csv /var/lib/mysql-files/
                文件权限问题 :chmod 644 scoreTable.csv
        2、创建对应的表
            库、表都是utf8的
            create table scoretab(
                id int,
                name varchar(20),
                score float(5,2),
                phnum char(11),
                class char(7)
            )charset=utf8;
        3、执行数据导入语句
            load data infile "/var/lib/mysql-files/scoreTable.csv"
            into table scoretab
            fields terminated by ","
            lines terminated by "\n"
            ;
        常见错误:
            db4.scoretab doesn't exist :查看表名
            No database selected    :use db4
            ... secure_file_priv ...:chmod 644 scoreTable.csv
            ....  entry '1'

6、数据导出 :把数据库表中记录保存到系统文件里

    1、语法格式
        select ... from 表名 where 条件
        into outfile "文件名绝对路径"
        fields terminated by "分隔符"
        lines terminated by "分隔符"
    2、把sanguo表中姓名、攻击值、国家导出到sanguo.csv文件中
        select name,gongji,country from MOSHOU.sanguo
        into outfile "/var/lib/mysql-files/sanguo.csv"
        fields terminated by ","
        lines terminated by "\n"
        ;
    3、注意
        1、导出的内容完全由SQL查询语句决定
        2、执行导出命令时路径必须指定在搜索路径中

7、数据备份(mysqldump,在Linux终端操作)

    1、命令格式 
        mysqldump -u用户名 -p 源库名 > XXX.sql
    2、源库名表示方式
        --all-databases     备份所有库
        库名                备份单个库
        -B 库1 库2 库3      备份多个库
        库名 表1 表2 表3    备份多张表
    3、备份所有库,到/home/tarena/mydata/all.sql
        mysqldump -uroot -p --all-databases > all.sql
    4、备份MOSHOU和db4两个库,MOSHOUdb4.sql
        mysqldump -uroot -p -B MOSHOU db4 > MOSHOUdb4.sql

8、数据恢复(Linux终端中操作)

    1、命令格式 
        mysql -u用户名 -p 目标库名 < XXX.sql
    2、从所有库的备份中恢复某一个库
        mysql -u用户名 -p --one-database 目标库名 < XXX.sql
    3、注意 :如果恢复的库不存在,则必须先创建空库
 


1、主键 && 自增长(PRI,不能重复,不能为NULL)
    1、创建
        id int primary key auto_increment,
        alter table 表名 add primary key(id);
        # 已有表中添加自增长属性 ##
        alter table 表名 modify id int auto_increment;
    2、删除
        1、alter table 表名 modify id int;
        2、alter table 表名 drop primary key;
    3、指定起始值
        1、create table (...)auto_increment=1000;
        2、alter table 表名 auto_increment=1000;
2、外键
    1、使用规则
        1、数据类型要一致
        2、主表被参考字段必须为KEY的一种 :PRI
    2、语法格式
        foreign key(从表字段名) references 
        主表(主表字段名)
        on delete 级联动作
        on update 级联动作
    3、级联动作
        1、cascade :删除、更新(被参考字段)同步
        2、set null:删除、更新,从表该字段值为NULL
        3、restrict:不让主表操作
    4、删除
        1、show create table 表名;
        2、alter table 表名 drop foreign key 外键名;
3、锁 :解决客户端并发访问的冲突问题
    1、锁类型 :读锁、写锁
    2、锁粒度 :行级锁(InnoDB)、表级锁(MyISAM)
4、存储引擎 :处理表的处理器
    mysql> show engines;
    mysql> show create table 表名;
    mysql> create table 表名(...)engine=MyISAM;
    mysql> alter table 表名 engine=InnoDB;
5、常见存储引擎
    1、InnoDB :支持外键、行级锁、事务、共享表空间
    2、MyISAM :支持表级锁、独享表空间
    3、MEMORY :表记录存储在内存中
    4、如果选择
        查询操作多 :MyISAM
        更新操作多 :InnoDB
6、数据导入
    1、拷贝文件 :/var/lib/mysql-files
    2、创建对应表
    3、执行导入语句
        load data infile "/var/lib/...."
        into table 表名
        fields terminated by "分隔符"
        lines terminated by "\n"
    4、修改权限
        chmod 644 文件名
        chmod 666 文件名
7、数据导出
    select ... from 表名 where 条件
    into outfile "/var/lib/..."
    fields terminated by "分隔符"
    lines terminated by "\n"
8、数据备份和恢复
    1、备份 :mysqldump -u用户名 -p 源库名 > XXX.sql
        --all-databases
        库名
        -B 库1 库2 库3
        库1 表1 表2 表3
    2、恢复 :mysql -u用户名 -p 目标库名 < XXX.sql
        --one-database
        1、先创建空库再恢复
        2、库中新增表不会删除,新增记录会被覆盖
9、导入/etc/passwd文件到数据库
    1、拷贝文件
        sudo cp /etc/passwd /var/lib/mysql-files/
    2、创建表
        tarena:x:1000:1000:tare:/home/tarena:/bin/bash
        
        create table userinfo(
            username varchar(30),
            password char(1),
            uid int,
            gid int,
            comment varchar(50),
            homedir varchar(50),
            shell varchar(50)
        )charset=utf8;
    3、执行导入语句
        load data infile "/var/lib/mysql-files/passwd"
        into table userinfo
        fields terminated by ":"
        lines terminated by "\n";
    4、添加id字段,主键自增长,显示宽度为3,位数不够用0填充
        alter table userinfo add id int(3) zerofill primary key auto_increment first;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zero_wangdu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值