数据库进阶3

索引

1、普通索引(index)
2、唯一索引(unique)
    1、使用规则
        1、一个表中可以有多个unique字段
        2、unique字段的值不允许重复,但可以为空值
        3、unique的key标志是UNI
    2、创建唯一索引
        1、创建表时创建
            1、方式一
                create table t1(
                id int(3) zerofill,
                name char(20) unique
                );
            2、方式二
                create table t2(
                id int,
                name char(20),
                age tinyint,
                unique(name),
                unique(age)
                );
        2、在已有表中创建
            create unique index 索引名 on 表名(字段名);
    3、删除唯一索引(unique)
        drop index 索引名 on 表名;
        删除普通索引、唯一索引只能一个一个删

主键(primary key)

    1、使用规则
        1、一个表中只能有一个主键(primary)字段
        2、对应字段的值不允许重复,且不能为空值
        3、主键字段的KEY标志为PRI
        4、把表中能够唯一标识一条记录的字段设置为主键字段
    2、创建主键(primary key)
        1、在创建表时创建
            1、方式一:字段名 数据类型 primary key,
                create table t3(
                id int primary key,
                name char(20)
                );
            2、方式二:
                create table t4(
                id int,
                name char(20),
                primary key(id)
                );
        2、在已有表中创建主键
            alter table 表名 add primary key(字段名);
        3、删除主键
            如果主键带自增长属性,则先要删除自增长属性,再删除主键
            alter table 表名 modify 字段名 数据类型;
            alter table 表名 drop primary key;
    3、自增长属性(auto_increment)
        1、作用:通常和主键一起配合使用
        2、创建表时添加自增长属性
            字段名 数据类型 primary key auto_increment
            create table t5(
            id int primary key auto_increment,
            name char(15)
            );
        3、在已有表中添加自增长属性
            alter table 表名 modify 字段名 数据类型 primary key auto_increment;

2、数据导入
1、作用
把文件系统的内容导入到数据库中
2、语法
load data infile "文件名"
into table 表名
fields terminated by "分隔符"
lines terminated by "\n"
3、练习
把/etc/passwd文件中的内容导入到库day03下的userinfo表中

    tarena : x  :  1000  :  1000  :  tarena,,,
    用户名  密码   UID      GID           用户描述
    :/home/tarena  :  /bin/bash
     主目录                        登录权限
4、操作步骤
    1、在数据中创建对应的表
    2、将要导入的文件拷贝到数据库的默认搜索路径中
    3、将系统文件导入到创建的表中

    1、创建表
        create table userinfo(
        username char(20),
        password char(1),
        uid int,
        gid int,
        comment varchar(50),
        homedir varchar(50),
        shell varchar(50)
        );
    2、将要导入的文件拷贝到数据库的默认搜索路径中
        1、如何查看数据库的默认搜索路径
            show variables like "secure_file_priv";
        2、sudo cp /etc/passwd /var/lib/mysql-files/
    3、执行数据导入语句
    load data infile "/var/lib/mysql-files/passwd"
    into table userinfo
    fields terminated by ":"
    lines terminated by "\n"

    4、在userinfo表中第一列添加一个id字段,类型为int,设置为主键带自增长属性
        alter table userinfo add id int primary key auto_increment first
5、练习2
    导入AID1709.csv成绩表
    1、创建对应的表
        create table AID1709(
        id int,
        name varchar(15),
        score float(5,2),
        phone char(11),
        class char(7)
        )default charset=utf8;
    2、拷贝到数据库目录下
        sudo cp /home/tarena/AID1709.csv /var/lib/mysql-files/
    3、执行数据导入语句
        load data infile "/var/lib/mysql-files/AID1709.csv"
        into table AID1709
        fields terminated by ","
        lines terminated by "\n"
6、注意Ubuntu中文件的权限问题
    1、sudo -i
    2、cd /var/lib/mysql-files
    3、ls -l AID1709.csv
    4、chmod 644 AID1709.csv
    5、ls -l AID1709.csv ## 有了r权限
    6、执行导入语句
        load data infile "/var/lib/mysql-files/AID1709.csv"
        into table AID1709
        fields terminated by ","
        lines terminated by "\n";

4、数据导出
1、作用
将数据库表中的记录保存到系统文件里
2、语法格式
select ... from 表名
into outfile "文件名"
fields terminated by "分隔符"
lines terminated by "\n"
3、练习
1、把userinfo表中的用户名、密码和uid三个字段导出来,文件名为user.txt
select username,password,uid from userinfo
into outfile "/var/lib/mysql-files/user.txt"
fields terminated by " "
lines terminated by "\n"
2、把mysql库下user表中的 user、host两个字段的值导出到user2.txt,将其存放在数据库搜索路径下
select user,host from mysql.user
into outfile "/var/lib/mysql-files/user2.txt"
fields terminated by " "
lines terminated by "\n";
4、注意
1、导出的内容完全由SQL查询语句决定
2、执行导出命令时路径必须指定在对应的数据库搜索路径中
show variables like "secure_file_priv";

表的复制

1、表的复制
    1、语法
        create table 表名 select 查询语句;
    2、练习
        1、复制userinfo表中全部记录和字段,userinfo2
            create table userinfo2 select * from userinfo;
        2、复制userinfo表的前10条记录,userinfo3
            create table userinfo3 select * from userinfo limit 10;
        3、复制userinfo表的username,password,uid三个字段的第2-10条记录,userinfo4
            create table userinfo4 select username,password,uid from userinfo limit 1,9;
2、复制表结构
    1、语法格式
        create table 表名 select 查询语句 where false;
    2、注意
        复制表的时候不会把原表的 key 属性复制过来
3、练习
    1、创建user1表,包含userinfo表中username,uid两个字段的前2条记录
        create table user1 select username,uid from userinfo limit 2;
    2、创建user2表,包含userinfo表中gid,homedir两个字段的前3条记录
        create table user2 select gid,homedir from userinfo limit 3;

6、嵌套查询
1、定义
把内层的查询结果作为外层的查询条件
2、语法格式
select 查询语句 where 条件(select查询语句);
3、练习(利用userinfo表操作)
1、把uid的值小于这个字段的平均值的用户名和uid显示出来
select username,uid from userinfo where uid < (select avg(uid) from userinfo);
7、多表查询
1、两种方式
1、select 字段名列表 from 表名列表; 笛卡尔积
select * from user1,user2;
2、select 字段名列表 from 表名列表 where 条件;
3、练习
1、显示省市详细信息
select sheng.s_name,city.c_name from sheng,city where sheng.s_id=city.cfather_id;
2、显示省市县详细信息
-> select sheng.s_name,city.c_name,xian.x_name
-> from sheng,city,xian
-> where
-> sheng.s_id=city.cfather_id and
-> city.c_id=xian.xfather_id;
8、连接查询
1、内连接
1、定义
从表中删除与其他被连接表中没有匹配的所有行
2、语法格式
select 字段名列表 from 表1
inner join 表2 on 条件;
3、显示省市详细信息,没有匹配到的不显示
-> select sheng.s_name,city.c_name,xian.x_name
-> from sheng
-> inner join city on sheng.s_id=city.cfather_id
-> inner join xian on city.c_id=xian.xfather_id;

外连接

    1、左连接
        1、定义
            以左表为主显示查询结果
        2、语法
            select 字段名列表 from 表1
            left join 表2 on 条件;
        3、练习
            1、显示省市详细信息,以省表为主显示
                select sheng.s_name,city.c_name from sheng left join city on sheng.s_id=city.cfather_id;
            2、显示省市县详细信息,要求市全部显示
                -> select sheng.s_name,city.c_name,xian.x_name
                -> from sheng right join city
                -> on sheng.s_id=city.cfather_id
                -> left join xian on city.c_id=xian.xfather_id;
    2、右连接
        以右表为准显示查询结果,用法同左连接

ER模型&ER图

1、定义
    ER模型即实体-关系模型,ER图即实体-关系图
2、三个概念
    1、实体
        1、定义:现实世界中任何可以被认知、区分的事物
        2、示例
            1、学校 :学生、教师、课程、班主任
            2、企业 :职工、产品
    2、属性
        1、定义:实体所具有的特性
        2、示例
            1、学生属性:学号、姓名、年龄、性别
            2、产品属性:产睥睨编号、名称、规格
    3、关系
        1、定义:实体之间的联系
        2、分类
            一对一关系(1:1) 班级和班长
            一对多关系(1:n) 公司和职工
            多对多关系(m:n) 学生和课程
    4、ER图的绘制
        1、矩形框代表实体,菱形框代表关系,椭圆形代表属性

原文地址:http://blog.51cto.com/12348050/2104554

时间: 2024-10-17 16:31:17

数据库进阶3的相关文章

关系型数据库进阶(二)全局概览

上篇文章 关系型数据库进阶(一)数据库基础,我们已经了解了数据库基础,现在我们需要回来看看数据库的全貌了. 数据库是一个易于访问和修改的信息集合.不过简单的一堆文件也能达到这个效果.事实上,像SQLite这样最简单的数据库也只是一堆文件而已,但SQLite是精心设计的一堆文件,因为它允许你: 1  使用事务来确保数据的安全和一致性 2  快速处理百万条以上的数据 3  数据库一般可以用如下图形来理解: 本篇文章,我不会特别关注如何组织数据库或者如何命名各种进程,因为我选择了自己的方式来描述这些概

SQL Server数据库进阶之表分区实战演练

一.课程介绍 1.1.需求背景 假设,你有一个销售记录表,记录着每个销售情况,那么你就可以把这个销售记录表按时间分成几个小表,例如说5个小表吧.2009年以前的记录使用一个表,2010年的记录使用一个表,2011年的记录使用一个表,2012年的记录使用一个表,2012年以后的记录使用一个表.那么,你想查询哪个年份的记录,就可以去相对应的表里查询,由于每个表中的记录数少了,查询起来时间自然也会减少.但将一个大表分成几个小表的处理方式,会给程序员增加编程上的难度.以添加记录为例,以上5个表是独立的5

python 全栈 数据库(二)MySQL数据库进阶

MySQL 进阶 左右连表: join 上下连表: union #自动去重 (当两张表里的数据,有重复的才会自动去重) union all #不去重 例如: select sid,sname from sname union select tid,tname from teacher select sid,sname from student UNION ALL select sid,sname from student 1.视图 (不常用,开发过程中不长用,在开发语句中写,不要在数据库中写)

MongoDB数据库进阶 --- 增删查改...

在之前的文章中,我已经介绍了什么事MongoDB以及怎么在windows下安装MongoDB等等基本知识. 所以这篇进阶的博客就主要介绍以下如何进行数据库的基本操作 --- 增删查改. 数据库相关 显示所有数据库: show dbs 其中admin和local都是默认存在的数据库. 查看当前数据库: db 即当前默认就是test数据库,但是为什么在 show dbs 的时候没有呢?  这是因为test数据库中没有任何数据,所以不会显示,后面会介绍插入数据,插入数据后就会显示了. 创建数据库: u

数据库进阶之路(五) - MySQL行锁深入研究

由于业务逻辑的需要,必须对数据表的一行或多行加入行锁,举个最简单的例子,图书借阅系统:假设id=1的这本书库存为1,但是有2个人同时来借这本书,此处的逻辑为: SELECT restnum FROM book WHERE id =1 ; --如果restnum大于0,执行update UPDATE book SET restnum=restnum-1 WHERE id=1; 问题来了,当2个人同时借的时候,有可能第一个人执行select语句的时候,第二个人插了进来,在第一个人没来得及更新book

MySQL数据库进阶操作

视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 临时表搜索: SELECT * FROM ( SELECT nid, NAME FROM tb1 WHERE nid > 2 ) AS A WHERE A. NAME > 'alex'; 1.创建视图 --格式:CREATE VIEW 视图名称 AS SQL语句 CREATE VIEW v1 AS SELET nid, name FR

关系型数据库进阶(三)连接运算及查询实例

上篇文字,我们知道如何获取数据了,那现在就把它们联接起来! 我要展现的是3个个常用联接运算符:合并联接(Merge join),哈希联接(Hash Join)和嵌套循环联接(Nested Loop Join).但是在此之前,我需要引入新词汇了:内关系和外关系(inner relation and outer relation). 一个关系可以是: 一个表 一个索引 上一个运算的中间结果(比如上一个联接运算的结果). 当你联接两个关系时,联接算法对两个关系的处理是不同的.在本文剩余部分,我将假定:

python数据库进阶

第1节 MySQL基础 一,说明 1,认识MySQL与创建用户 MySQL是最流行的关系型数据库管理系统之一,由瑞典MySQL AB公司开发,目前属于Oracle公司.MySQL是一种关联数据管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.?- 关系型数据库:采用关系模型来组织数据的数据库- 关系:一张二维表,每个关系都有一个关系名,就是表名- 模型:行和列(二维),具体指字段跟字段信息 2,关系型数据库和非关系型数据库的区别 关系型

数据库进阶了解

一.数据库的备份 1.物理备份:直接复制数据库文件 2.逻辑备份:备份所有执行的sql语句 备份语法: mysqldump -h 服务器 -u 用户名 -p密码  数据库名 > 备份文件.sql 关键参数: 1.-B指定多个库,增加建库语句和use 语句,恢复的时候自动建库. 2.-A或者--all-databases 例如:C:\WINDOWS\system32>mysqldump -u root -p密码 -B -A> f:\数据库备份练习\all.sql 恢复语法:mysql -h