數據庫進階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、矩形框代表實體,菱形框代表關系,橢圓形代表屬性
數據庫進階3