一劝堪、數(shù)據(jù)庫(kù)系統(tǒng)
數(shù)據(jù)庫(kù)
DataBase【DB】冀自,指的是長(zhǎng)期保存到計(jì)算機(jī)上的數(shù)據(jù),按照一定順序組織秒啦,可以被各種用戶或者應(yīng)用共享的數(shù)據(jù)集合熬粗。【用于存儲(chǔ)數(shù)據(jù)的地方余境,可以視為存儲(chǔ)數(shù)據(jù)的容器】-
數(shù)據(jù)庫(kù)管理系統(tǒng)
DataBase Management System【DBMS】,能夠管理和操作數(shù)據(jù)庫(kù)的大型的軟件驻呐。
用于建立、使用和維護(hù)數(shù)據(jù)庫(kù)芳来,對(duì)數(shù)據(jù)庫(kù)進(jìn)行統(tǒng)一的管理和控制含末,為了保證數(shù)據(jù)庫(kù)的安全性和完整性。用戶可以通過(guò)數(shù)據(jù)庫(kù)管理系統(tǒng)訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)即舌,或?qū)?shù)據(jù)庫(kù)進(jìn)行維護(hù)佣盒。數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)管理系統(tǒng)之間的關(guān)系?
數(shù)據(jù)庫(kù):存儲(chǔ),維護(hù)和管理數(shù)據(jù)的集合;
數(shù)據(jù)庫(kù)管理系統(tǒng): 就是數(shù)據(jù)庫(kù)管理軟件顽聂,通過(guò)它可以進(jìn)行數(shù)據(jù)庫(kù)的管理和維護(hù)工作; -
常見(jiàn)的數(shù)據(jù)庫(kù)管理系統(tǒng)
- Oracle(甲骨文): 目前比較成功的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)肥惭,運(yùn)行穩(wěn)定,功能齊全芜飘,性能超群务豺,技術(shù)領(lǐng)先磨总,主要應(yīng)用在大型的企業(yè)數(shù)據(jù)庫(kù)領(lǐng)域嗦明。
- DB2: IBM(國(guó)際商業(yè)機(jī)器公司)的產(chǎn)品,伸縮性比較強(qiáng)蚪燕。
- SQL Server: Microsoft的產(chǎn)品娶牌,軟件界面友好,易學(xué)易用馆纳,在操作性和交互性方面獨(dú)樹(shù)一幟诗良。
- MySQL: 免費(fèi)的數(shù)據(jù)庫(kù)系統(tǒng),被廣泛引用于中小型應(yīng)用系統(tǒng)鲁驶,體積小鉴裹,速度快,總體擁有成本低,開(kāi)發(fā)源代碼径荔,2008年被SUN收購(gòu)督禽,2009年SUN被Oracle收購(gòu)。
二总处、數(shù)據(jù)庫(kù)的安裝
-
安裝
# 添加 sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu trusty main universe' # 更新 sudo apt-get update # 搜索(從返回的結(jié)果查看有哪些版本可以安裝狈惫,用下邊的命令安裝相應(yīng)的版本) sudo apt-cache search mysql | grep mysql-server # 安裝5.6版本 sudo apt install mysql-server-5.6 # 設(shè)置開(kāi)機(jī)自啟動(dòng) sudo systemctl enable mysql.service
-
服務(wù)開(kāi)啟和停止
// 方式一 sudo service mysql status // 查看狀態(tài) sudo service mysql start // 開(kāi)啟服務(wù) sudo service mysql stop // 停止服務(wù) // 方式二 sudo systemctl stauts mysql.service // 查看狀態(tài) sudo systemctl start mysql.service // 開(kāi)啟服務(wù) sudo systemctl stop mysql.service // 停止服務(wù)器 sudo systemctl restart mysql.service // 重啟服務(wù) sudo systemctl enable mysql.service // 開(kāi)啟服務(wù)開(kāi)機(jī)自啟動(dòng) sudo systemctl disable mysql.service // 關(guān)閉服務(wù)開(kāi)機(jī)自啟動(dòng)
-
數(shù)據(jù)庫(kù)連接
語(yǔ)法: mysql -u 用戶名 -p 例如: // 默認(rèn)用戶名root, 密碼123456 mysql -u root -p mysql -uroot -p mysql -uroot -p123456
退出數(shù)據(jù)庫(kù): quit
MySQL端口號(hào)是3306!!! -
遠(yuǎn)程服務(wù)器中的數(shù)據(jù)庫(kù)
建立遠(yuǎn)程連接用戶: $ mysql –uroot –p123456 // 連接數(shù)據(jù)庫(kù)鹦马,-u用戶名 -p密碼 mysql> use mysql; mysql> select * from user; // 第一個(gè)admin表示用戶名胧谈,%表示所有的電腦都可以連接,也可以設(shè)置某個(gè)ip地址運(yùn)行連接荸频,第二個(gè)admin123表示密碼 // 為了方便其實(shí)也可以設(shè)置為root mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY 'admin123' WITH GRANT OPTION; mysql> select * from user; // 查看遠(yuǎn)程連接用戶admin是否新增成功菱肖,若存在則成功 mysql> exit; // 退出
默認(rèn)mysql的root用戶只能是本地連接。如果遠(yuǎn)程服務(wù)器的數(shù)據(jù)试溯,需要建立遠(yuǎn)程連接用戶蔑滓,否則連接不了!!!
三、SQL概述
概述
Structure Query Language遇绞,結(jié)構(gòu)化查詢語(yǔ)言键袱。是一種特殊目的的編程語(yǔ)言,是一種數(shù)據(jù)庫(kù)查詢和程序設(shè)計(jì)語(yǔ)言摹闽,用于存取數(shù)據(jù)以及查詢蹄咖、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。-
數(shù)據(jù)庫(kù)服務(wù)器付鹿、數(shù)據(jù)庫(kù)澜汤、表單之間的關(guān)系
[圖片上傳失敗...(image-79ddfa-1540208361462)]
-
分類(lèi)
- DDL【Data Definition Language】數(shù)據(jù)定義語(yǔ)言,用戶創(chuàng)建舵匾、修改俊抵、刪除表結(jié)構(gòu)
- DML【Data Manipulation Language】數(shù)據(jù)操作語(yǔ)言,用于對(duì)數(shù)據(jù)表進(jìn)行增刪改的操作
- DQL【Data Query Language】數(shù)據(jù)查詢語(yǔ)言坐梯,用于負(fù)責(zé)數(shù)據(jù)表的查詢工作
- DCL【Data Control Language】數(shù)據(jù)控制語(yǔ)言徽诲,用來(lái)定義訪問(wèn)權(quán)限和安全級(jí)別
四、數(shù)據(jù)庫(kù)之DDL
一般情況下吵血,mysql關(guān)鍵字是大寫(xiě)的谎替,但是為了方便就小寫(xiě)。
-
顯示所有數(shù)據(jù)庫(kù)(當(dāng)前數(shù)據(jù)庫(kù)服務(wù)器中)
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.01 sec)
-
選擇數(shù)據(jù)庫(kù)
格式: use 數(shù)據(jù)庫(kù)名稱; 例如: use zyz;
注意: 在創(chuàng)建表單蹋辅、添加數(shù)據(jù)钱贯、刪除數(shù)據(jù)、修改數(shù)據(jù)...操作的前提是要進(jìn)入到對(duì)應(yīng)的數(shù)據(jù)中侦另,否則是操作不了的秩命。
-
創(chuàng)建數(shù)據(jù)庫(kù)
格式: create database 數(shù)據(jù)庫(kù)名字; 例如: create database zyz; // 創(chuàng)建時(shí)指定編碼類(lèi)型 create database pythondb charset=utf8;
注意: 命令行操作尉共,要注意中英文狀態(tài),都是要使用英文的標(biāo)點(diǎn)符號(hào)F瘛0中稀!
-
刪除數(shù)據(jù)庫(kù)
格式: drop database 數(shù)據(jù)庫(kù)名字; 例如: drop database zyz;
-
查看數(shù)據(jù)庫(kù)中的表
show tables;
-
創(chuàng)建表
格式: create table 表名( 字段1 字段類(lèi)型[列級(jí)別約束條件][默認(rèn)值]拿愧, 字段2 字段類(lèi)型[列級(jí)別約束條件][默認(rèn)值]杠河, …. 字段n 字段類(lèi)型[列級(jí)別約束條件][默認(rèn)值] [表級(jí)別約束條件] ) 例如: create table students(id int(4),name char(20),age int(4)); create table students(id int(4) primary key,name char(20),age int(4));
創(chuàng)建表之前,一定要先進(jìn)入對(duì)應(yīng)的數(shù)據(jù)庫(kù)中=焦肌H小!
顯示創(chuàng)建表的詳細(xì)信息: show create table student; -
刪除表
格式: drop table 表名; 例如: drop table students;
-
修改表名
格式: alter table 老表名 rename 新表名; 例如: alter table students_base rename students;
-
查看表的結(jié)構(gòu)
格式: desc 表名; 例如: desc students; Field:域/字段/列 Type:類(lèi)型 Null:是否為空 Key:主鍵 Default:默認(rèn)值 Extra:額外屬性
[圖片上傳失敗...(image-486433-1540208361462)]
-
增加一個(gè)字段
格式: alter table 表名 add 新字段的名字 字段屬性 例如: alter table students add sex char(10);
如果要添加的某個(gè)字段不能為空柳洋,就是not null;
例如: alter table students add sex char(10) not null; -
刪除一個(gè)字段
格式: alter table 表名 drop 字段名; 例如: alter table students drop sex;
-
修改某個(gè)字段 --- 添加屬性
格式: alter table 表名 change 老字段名 新字段名 字段屬性; 例如: alter table students change id id int(4) auto_increment; //給id添加自動(dòng)增長(zhǎng)的屬性
-
修改某個(gè)字段 --- 修改屬性
//修改id的屬性待诅,去除auto_increment屬性 alter table students change id id int(4);
-
修改某個(gè)字段 --- 刪除主鍵
alter table students drop primary key;
-
修改某個(gè)字段 --- 添加主鍵
alter table students add primary key(id); alter table students change id id int(4) primary key;
一張表中只能有一個(gè)字段是自動(dòng)增長(zhǎng)的,并且被設(shè)定為自動(dòng)增長(zhǎng)的這個(gè)字段一定要設(shè)置為主鍵;
如果一個(gè)主鍵字段有自增長(zhǎng)屬性熊镣,如果想要直接刪除主鍵卑雁,這是操作不了的;必須是先將自增長(zhǎng)屬性去除绪囱,然后才能刪除主鍵测蹲; -
常用數(shù)據(jù)類(lèi)型
1.數(shù)字?jǐn)?shù)據(jù)類(lèi)型 - INT - 正常大小的整數(shù),可以帶符號(hào)鬼吵。如果是有符號(hào)的扣甲,它允許的范圍是從-2147483648到2147483647。如果是無(wú)符號(hào)齿椅,允許的范圍是從0到4294967295琉挖。 可以指定多達(dá)11位的寬度。 - TINYINT - 一個(gè)非常小的整數(shù)涣脚,可以帶符號(hào)示辈。如果是有符號(hào),它允許的范圍是從-128到127遣蚀。如果是無(wú)符號(hào)矾麻,允許的范圍是從0到255,可以指定多達(dá)4位數(shù)的寬度妙同。 - SMALLINT - 一個(gè)小的整數(shù)射富,可以帶符號(hào)膝迎。如果有符號(hào)粥帚,允許范圍為-32768至32767。如果無(wú)符號(hào)限次,允許的范圍是從0到65535芒涡,可以指定最多5位的寬度柴灯。 - MEDIUMINT - 一個(gè)中等大小的整數(shù),可以帶符號(hào)费尽。如果有符號(hào)赠群,允許范圍為-8388608至8388607。 如果無(wú)符號(hào)旱幼,允許的范圍是從0到16777215查描,可以指定最多9位的寬度。 - BIGINT - 一個(gè)大的整數(shù)柏卤,可以帶符號(hào)冬三。如果有符號(hào),允許范圍為-9223372036854775808到9223372036854775807缘缚。如果無(wú)符號(hào)勾笆,允許的范圍是從0到18446744073709551615\. 可以指定最多20位的寬度。 - FLOAT(M,D) - 不能使用無(wú)符號(hào)的浮點(diǎn)數(shù)字桥滨∥炎Γ可以定義顯示長(zhǎng)度(M)和小數(shù)位數(shù)(D)。這不是必需的齐媒,并且默認(rèn)為10,2蒲每。其中2是小數(shù)的位數(shù),10是數(shù)字(包括小數(shù))的總數(shù)喻括。小數(shù)精度可以到24個(gè)浮點(diǎn)啃勉。 - DOUBLE(M,D) - 不能使用無(wú)符號(hào)的雙精度浮點(diǎn)數(shù)∷粒可以定義顯示長(zhǎng)度(M)和小數(shù)位數(shù)(D)淮阐。 這不是必需的,默認(rèn)為16,4刁品,其中4是小數(shù)的位數(shù)泣特。小數(shù)精度可以達(dá)到53位的DOUBLE。 REAL是DOUBLE同義詞挑随。 - DECIMAL(M,D) - 非壓縮浮點(diǎn)數(shù)不能是無(wú)符號(hào)的状您。在解包小數(shù),每個(gè)小數(shù)對(duì)應(yīng)于一個(gè)字節(jié)兜挨。定義顯示長(zhǎng)度(M)和小數(shù)(D)的數(shù)量是必需的膏孟。 NUMERIC是DECIMAL的同義詞。[decimal] 2.日期和時(shí)間類(lèi)型 - DATE - 以YYYY-MM-DD格式的日期拌汇,在1000-01-01和9999-12-31之間柒桑。 例如,1973年12月30日將被存儲(chǔ)為1973-12-30噪舀。 - DATETIME - 日期和時(shí)間組合以YYYY-MM-DD HH:MM:SS格式魁淳,在1000-01-01 00:00:00 到9999-12-31 23:59:59之間飘诗。例如,1973年12月30日下午3:30界逛,會(huì)被存儲(chǔ)為1973-12-30 15:30:00昆稿。 - TIMESTAMP - 1970年1月1日午夜之間的時(shí)間戳,到2037的某個(gè)時(shí)候息拜。這看起來(lái)像前面的DATETIME格式溉潭,無(wú)需只是數(shù)字之間的連字符; 1973年12月30日下午3點(diǎn)30分將被存儲(chǔ)為19731230153000(YYYYMMDDHHMMSS)。 - TIME - 存儲(chǔ)時(shí)間在HH:MM:SS格式少欺。 - YEAR(M) - 以2位或4位數(shù)字格式來(lái)存儲(chǔ)年份岛抄。如果長(zhǎng)度指定為2(例如YEAR(2)),年份就可以為1970至2069(70?69)狈茉。如果長(zhǎng)度指定為4夫椭,年份范圍是1901-2155,默認(rèn)長(zhǎng)度為4氯庆。 3.字符串類(lèi)型 雖然數(shù)字和日期類(lèi)型比較有意思蹭秋,但存儲(chǔ)大多數(shù)數(shù)據(jù)都可能是字符串格式。 下面列出了在MySQL中常見(jiàn)的字符串?dāng)?shù)據(jù)類(lèi)型堤撵。 - CHAR(M) - 固定長(zhǎng)度的字符串是以長(zhǎng)度為1到255之間個(gè)字符長(zhǎng)度(例如:CHAR(5))仁讨,存儲(chǔ)右空格填充到指定的長(zhǎng)度。 限定長(zhǎng)度不是必需的实昨,它會(huì)默認(rèn)為1洞豁。 - VARCHAR(M) - 可變長(zhǎng)度的字符串是以長(zhǎng)度為1到255之間字符數(shù)(高版本的MySQL超過(guò)255); 例如: VARCHAR(25). 創(chuàng)建VARCHAR類(lèi)型字段時(shí),必須定義長(zhǎng)度荒给。 [varchar] - BLOB or TEXT - 字段的最大長(zhǎng)度是65535個(gè)字符丈挟。 BLOB是“二進(jìn)制大對(duì)象”,并用來(lái)存儲(chǔ)大的二進(jìn)制數(shù)據(jù)志电,如圖像或其他類(lèi)型的文件曙咽。定義為T(mén)EXT文本字段還持有大量的數(shù)據(jù); 兩者之間的區(qū)別是,排序和比較上存儲(chǔ)的數(shù)據(jù)挑辆,BLOB大小寫(xiě)敏感例朱,而TEXT字段不區(qū)分大小寫(xiě)。不用指定BLOB或TEXT的長(zhǎng)度鱼蝉。 - TINYBLOB 或 TINYTEXT - BLOB或TEXT列用255個(gè)字符的最大長(zhǎng)度洒嗤。不指定TINYBLOB或TINYTEXT的長(zhǎng)度。 - MEDIUMBLOB or MEDIUMTEXT - BLOB或TEXT列具有16777215字符的最大長(zhǎng)度魁亦。不指定MEDIUMBLOB或MEDIUMTEXT的長(zhǎng)度渔隶。 - LONGBLOB 或 LONGTEXT - BLOB或TEXT列具有4294967295字符的最大長(zhǎng)度。不指定LONGBLOB或LONGTEXT的長(zhǎng)度吉挣。 - ENUM - 枚舉派撕,這是一個(gè)奇特的術(shù)語(yǔ)列表轧葛。當(dāng)定義一個(gè)ENUM帜慢,要?jiǎng)?chuàng)建它的值的列表痊夭,這些是必須用于選擇的項(xiàng)(也可以是NULL)葵陵。例如婿滓,如果想要字段包含“A”或“B”或“C”脂凶,那么可以定義為ENUM為 ENUM(“A”怜姿,“B”闷愤,“C”)也只有這些值(或NULL)才能用來(lái)填充這個(gè)字段喉钢。 主要使用的數(shù)據(jù)類(lèi)型: 數(shù)字型數(shù)據(jù)類(lèi)型: int float double 日期類(lèi): date 字符串: char varchar
char 和 varchar 的區(qū)別
char(M)是固定長(zhǎng)度的字符串姆打, 在定義時(shí)指定字符串列長(zhǎng)。當(dāng)保存數(shù)據(jù)時(shí)如果長(zhǎng)度不夠在右側(cè)填充空格以達(dá)到指定的長(zhǎng)度肠虽。M 表示列的長(zhǎng)度幔戏,M 的取值范圍是0-255個(gè)字符;
varchar(M)是長(zhǎng)度可變的字符串,M 表示最大的列長(zhǎng)度税课。M 的取值范圍是0-65535闲延。varchar的最大實(shí)際長(zhǎng)度是由最長(zhǎng)的行的大小和使用的字符集確定的,而實(shí)際占用的空間為字符串的實(shí)際長(zhǎng)度+1
五韩玩、數(shù)據(jù)庫(kù)之DML
-
增加數(shù)據(jù)
格式:insert into 表名(字段1,字段2,.....) values(值1,值2.....); 例如: insert into students(id,name,age) values(1001,"張三",20); insert into students(name,age) values("王六",22); insert into students(name,age,sex) values("八妹",25,"女"); insert into students(name,sex) values("九妹","女"); // 注意值必須是和默認(rèn)結(jié)構(gòu)與之對(duì)應(yīng) insert into students values(1006,"老七",18,'男');
一次性寫(xiě)入多條數(shù)據(jù) 格式: insert into 表名(屬性1垒玲,屬性2..) values(值1.1,值2.1...),(值1.2找颓,值2.2,....); 例如: insert into students(id,name,sex,age) values('1001','張三','男',20),('1002','李四','男',21);
插入的是日期合愈,和字符串一樣,使用引號(hào)括起來(lái)击狮。
-
更新數(shù)據(jù)
格式: update 表名 set 字段=值 where 條件; 例如: update students set address="江西" where name="王老五"; update students set math=98,chinese=93 where id=1002;
如果where子句沒(méi)有指定佛析,則默認(rèn)將表中的數(shù)據(jù)全部更新。
-
刪除數(shù)據(jù)
格式:delete from 表名 where 條件 例如: // 刪除整個(gè)表單數(shù)據(jù) delete from students; // 刪除名字為李四的學(xué)生信息 delete from students where name="李四"; // 刪除id為1003的學(xué)生信息 delete from students where id=1003;
如果where子句沒(méi)有指定彪蓬,則默認(rèn)將表中的數(shù)據(jù)全部刪除说莫。
六、數(shù)據(jù)庫(kù)之DQL
數(shù)據(jù)庫(kù)執(zhí)行DQL語(yǔ)言不會(huì)對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)發(fā)生任何改變寞焙,而是讓數(shù)據(jù)庫(kù)發(fā)送查詢結(jié)果到客戶端储狭,查詢返回的結(jié)果其實(shí)是一張?zhí)摂M表。
基本語(yǔ)法: SELECT 列名 FROM 表名 [WHERE --> GROUP BY -->HAVING--> ORDER BY]
-
基礎(chǔ)查詢
// 查詢所有字段(列) select * from students; // 查詢指定字段(列) select id,name,age from student; // as添加別名 【后續(xù)用于子查詢】 select name as "姓名" from studnets;
as不是給表里的字段取別名捣郊,而是給查詢的結(jié)果字段取別名辽狈。其目的是讓查詢的結(jié)果展現(xiàn)更符合人們觀看習(xí)慣,在多張表查詢的時(shí)候可以直接的區(qū)別多張表的同名的字段呛牲。
-
條件查詢
1刮萌、模糊查詢數(shù)據(jù) %: 表示任意個(gè)或多個(gè)字符,可匹配任意類(lèi)型和長(zhǎng)度的字符 _: 匹配任意一個(gè)字符 例如: 查詢出學(xué)生姓王的學(xué)生信息娘扩; select * from students where name like "王%"; 2着茸、and并且 例如: 顯示math和chinese成績(jī)大于90的學(xué)生信息; select * from students_test where math>=90 and chinese>=90; 3壮锻、or或者 例如: 顯示math或chinese成績(jī)大于90的學(xué)生信息; select * from students_test where math>=90 or chinese>=90; 4、between x and y //在x與y之間的 例如: 顯示math成績(jī)?cè)?0~100之間的學(xué)生信息; select * from students_test where math between 90 and 100; 5涮阔、in在..里面猜绣,允許規(guī)定多個(gè)值 例如: 顯示1703和1704兩個(gè)班級(jí)學(xué)生信息; select * from students where class="1704" or class="1703"; select * from students_test where class in ("1703","1704‘’); 6、limit指定顯示多少行敬特,limit后面2個(gè)數(shù)字掰邢,用逗號(hào)隔開(kāi),第一個(gè)表示數(shù)字后伟阔。第二數(shù)字表示顯示幾行 例如: 顯示前面10行數(shù)據(jù): select * from students limit 10; 顯示4到7行的數(shù)據(jù): select * from students limit 3,4; 按chinese排序辣之,顯示4,5行數(shù)據(jù): select * from students limit 3,2; 顯示english成績(jī)?cè)?0~90之間的學(xué)生信息,顯示開(kāi)頭2行: select * from students where english between 70 and 90 limit 0,2; 7皱炉、邏輯運(yùn)算符 > 大于 < 小于 >= 大于等于 <= 小于等于 = 等于 != 不等于 8怀估、算術(shù)運(yùn)算符 + 加法 - 減法 * 乘法 / 除法 % 取余
-
其他(聚合函數(shù))
1、count() 統(tǒng)計(jì)數(shù)量 select class,count(class) from students group by class; 2合搅、avg() 求平均分 select avg(math) from students; 3奏夫、sum() 求和 select sum(math) from students; 4、max()最大值 select max(math) from students; 5历筝、min()最小值 select min(math) from students; 6酗昼、distinct() 去重復(fù) select distinct(goods_number) from students ; 7、order by 排序 select * from students order by id; // 默認(rèn)是升序 select * from students order by id desc; // 降序 8梳猪、group by 分組 select class,count(class) from students group by class; 9麻削、having 表示條件(類(lèi)似where) 虛擬字段是不可以放在where后面的,例如where avg(math)其中math是實(shí)際字段春弥,但avg(math)是求出來(lái)的平均分是虛擬字段呛哟; 需要進(jìn)行條件處理的虛擬字段,可以放在having后面匿沛;