1. 程式人生 > >數據庫進階3

數據庫進階3

35424644 數據庫 進階

索引
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、矩形框代表實體,菱形框代表關系,橢圓形代表屬性

數據庫進階3