mysql在cmd下啟動/導出操作
開啟
1.設置環境變量
將mysql安裝位置對應下的bin文件夾的位置復制到path之中
2.開啟服務
net start mysql57(服務名)
1
3.進入mysql
mysql -hlocalhost -uroot -p 回車
1
其中-h代表的是服務器,-u代表用戶,-p代表密碼
操作
1.查看MySql的導入與導出的目錄
show variables like '%secure%';
2.mysql數據導出為csv文件
導出到哪里;怎么導,從哪里導出
1.導出順序
SELECT INTO OUTFILE FROM
#1---需要導出什么(其實已經在括號設置好了,因為全部數據導出是在對表已經操作的情況下實行的)
SELECT *
#2---從哪里導出(實際上先對舊表movie進行操作,采用交操作,實現屬性名的重新設置(也可以不用更新)新舊屬性名要一一對應,之后命名為新表movie_,實際上就是復制了一份,對原先的表沒有修改)
FROM (select 'mid','title','introduction','rating','releasedate' union select*from movie) movie_ #movie_就是代表要輸出的表(只不過以屬性的形式輸出)
#3---導出到哪里,導出到movie.csv文件中,舊表不能直接導入到movie.csv文件,因為會直接破壞舊表,不利於mysql的數據庫的維護.
#注意輸出的地址斜杠是/,不是windows下的\,千萬注意
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/movie.csv'
#4---設置字符編碼--防止亂碼一般就是GBK或者utf8
character set utf-8
#5----導入規則,下面就是新表中字段導入csv表格當中的規則.
# FIELDS之間分隔的標志就是",",遇到這個前面的就為一個字段.例如
#"我愛你","20","相貌平常,經常耍流氓!哈哈" mysql數據格式
#| id | name | age | description |
#+----+----------變為----------------------------+
#| 1 | 我愛你 | 20 | 相貌平常,經常耍流氓!哈哈 | csv數據格式
FIELDS TERMINATED BY ','
#代有雙引號的詞組,要先將""去除,之后放入csv文件中如上面的:
#"我愛你"--->| 我愛你 |
OPTIONALLY ENCLOSED BY '"' #意思就是雙引號可選擇關閉
#例如電影當中的簡介,一般比較長,遇到換行\r,那就說明簡介完成了,就可以把它設置為一個屬性.
? as的用法,起別名,給已知的列起別名
引出一個代碼:
SELECT * INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/person.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
FROM (
select 'pid','birth','death','name','biography','birthplace'
union
select person_id,person_birth_day,person_death_day,
case
when person_name is then person_english_name
else person_name end
as name,person_biography,person_birth_place
from person
) person_;
涉及到兩個知識點
2.SELECT 屬性名 ,case when then else end as 屬性名 FROM 表名
上面當中:
select person_id,person_birth_day,person_death_day, #特別注意這個逗號,
case
when person_name is then person_english_name
else person_name end
as name,person_biography,person_birth_place
from person
舊的屬性名(舊表person的)
person_id,person_birth_day,person_death_day,#直接選出的
name ,person_biography,person_birth_place #其中name是經過case when then else end這個條件選出的屬性(用as生成的),其他的屬性person_biography,person_birth_place則是直接選出,這點尤其要注意
#兩部分的屬性都是在舊表person中選擇的
新表(person_)的屬性
select 'pid','birth','death','name','biography','birthplace'
並且他們一一對應,–>所以我們一開始的select不是重點所以只需要select *就可以,主要是為了規范
3.union與union all
? 兩者都是集合操作,這就要求操作的兩個表的結構相同,但union是小並操作(消除重復),union all是大並操作(不消除重復),但兩者都是對這兩張表的結合(為了便於說明,對如下代碼進行了刪減進),
SELECT * INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/person.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
FROM (select 'pid','birth','death'
union
select person_id,person_birth_day,person_death_day from person
) person_;
其數據導出的主要過程如下:
先從舊表person當中選取各種屬性,之后在新表(person_)之中建立對應的屬性,
然后進行一個小並操作(個人自定義,便於描述),因為新建的表是屬性值都為空,加上與舊表的小並操作,,其實就相當於把舊表復制給了新表,
然后新表根據導入規則,將表中的數據進行導入到csv文件當中,這樣就實現了mysql數據的導出到csv文件當中的過程
4.case函數
case可以嵌套
主要是解決不同情況的的不同輸出.減少代碼量.
? 選修多門課程的學生,要選擇一門課程作為主修,主修flag里面寫入 Y。只選擇一門課程的學生,主修flag為N(實際上要是寫入Y的話,就沒有下面的麻煩事了,為了舉例子,還請多多包含)。
只選修一門課程的人,返回那門課程的ID
選修多門課程的人,返回所選的主課程ID
SELECT std_id,
CASE WHEN COUNT(*) = 1 --只選擇一門課程的學生的情況
THEN MAX(class_id)
ELSE MAX(CASE WHEN main_class_flg = 'Y'
THEN class_id
ELSE NULL END
)
END AS main_class
FROM Studentclass
運行結果
STD_ID MAIN_class
—— ———-
100 1
200 3
300 4
400 5
500 6
case函數注意事項
先看一段代碼:(兩個易錯點)
CASE col_1
WHEN 1 THEN 'Right'
WHEN NULL THEN 'Wrong'
END
其中’Wrong’是錯誤的,所以永遠不會出現Wrong的情況,正確格式為
WHEN NULL THEN 'Unknown'
也可以寫成
#WHEN col_1=NULL THEN 'Unknown' 是錯誤的
WHEN col_1 IS NULL THEN 'Unknown' #才是正確的
沒有”=”千萬要注意,一般col_1 IS就代表不為空
5.select as的用法
as的用法,起別名,給已知的列起別名
select id,column1 * column2 as column from table1
select count(*) as total from table1
另外注意:select Product as Description, Price, Image from test
as的作用范圍為“as到它后面的第一個逗號為止”。其后面的“price,image”是select 選取的表中的其他字段。
完整的語句:
select Product as Description, Price, Image from test
查詢結果為:
| product | Price | image |
| aa | 1.00 | :) |
完整編碼
use movie;
#導出電影類型信息
select *
from(
select 'gid','gname' #帶''是為了創建新表的屬性.用字符串代表
union
select * from genre
)genre_
#輸出地址包括具體的存儲文件,不要寫錯了是csv,不是cvs,即使寫錯了,改下后綴名同時可以.
into outfile 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/genre.csv'
character set utf8 #設置好編碼格式,否則默認是gbk
fields terminated by ','
optionally enclosed by '"';#去掉雙引號在存儲到csv中
#導出電影信息
select *
from(
select 'mid','title','introduction','rating','releasedate'
union
select * from movie
)movie_
into outfile 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/movie.csv'
character set utf8
fields terminated by ','
optionally enclosed by '"'
lines terminated by '\r';
#導出電影所屬類型信息
select *
from(
select 'mid','gid'
union
select * from movie_to_genre
)movie_to_genre_
into outfile 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/movie_to_genre.csv'
character set utf8
fields terminated by ','
optionally enclosed by '"';
#導出演員信息
select *
from(
select 'pid','birth','death','name','biography','birthplace'
union
select person_id,person_birth_day,person_death_day,
case
when person_name then person_english_name #記住這里千萬沒有單獨 is,只有is null
else person_name
end
as name, #case函數作為選取person_name的條件,其函數結果用name屬性表示,實現形式主要是采用as方法
person_biography,person_birth_place from person
)person_ #新表person_
into outfile 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/person.csv'
character set utf8
fields terminated by ','
optionally enclosed by '"'
lines terminated by '\r'; #
#導出演員與所演電影關系表
select *
from(
select 'pid','mid'
union
select * from person_to_movie
)person_to_movie_
into outfile 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/person_to_movie.csv'
character set utf8
fields terminated by ','
optionally enclosed by '"';