一.資料庫的基本操作 資料庫的安裝以後更新 在Linux系統下: 1.啟動資料庫服務:sudo service mysql start 2.停止資料庫服務:sudo service mysql stop 3.重啟資料庫服務:sudo service mysql restart 4.進入MySQL數據 ...
一.資料庫的基本操作
--------------------------------------------------------------資料庫的安裝以後更新----------------------------------------------------------------------------------
在Linux系統下:
1.啟動資料庫服務:sudo service mysql start
2.停止資料庫服務:sudo service mysql stop
3.重啟資料庫服務:sudo service mysql restart
4.進入MySQL資料庫:mysql -u用戶名 -p密碼
5.創建一個資料庫:create database 資料庫名 charset='utf8'; 註意:一定要寫上資料庫編碼方式。否則會出現一系列的麻煩。
6.查看創建資料庫的語句:show create database 資料庫名;
7.查看當前所有資料庫:show databases; 註意:這裡沒有小括弧
8.進入一個資料庫:use 資料庫名;
9.查看當前正在用的資料庫:select database(); 註意:這裡有小括弧
10.查看當前時間:select now();
11.刪除資料庫:drop database 資料庫名;
二.數據的完整性
數據類型:
1.整數:int、bit
2.小數:decimal 說明:decimal(5,2)表示該小數一共有五位數,其中小數占兩位。
3.字元串:varchar、char 說明:varchar(3)輸入'ab',實際存儲為'ab',輸入'abcd',實際存儲為'abc'。char(3)輸入'ab',實際存儲為'ab ',輸入'abcd',實際存儲為'abc'
4.時間:date(2017-12-12)、time(12:30:54)、datetime(2017-12-12 12:30:54)
5.枚舉:enum
數據的約束:
1.主鍵:primary key 說明:primary key 相當於 not null 和 unique
2.外鍵:foreign key
3.非空:not null
4. 唯一性:unique
5.預設值:default
6.取正數:unsigned
7.主鍵自增:auto_increment
三.表結構的基本操作
1.創建一個student學生表:
create table student( id int unsigned primary key auto_increment, unsigned只能放在數據類型(int)的後面,放在約束後面直接報錯,不要問我為什麼,記住就行了。 name varchar(10) not null, age int unsigned not null, height decimal(5,2) default 0, 寫了預設值就不需要再寫not null。 gender enum("男","女") default "男", 這裡預設值只能寫enum中的漢字,不能寫索引。 birth date, is_delete bit default 0 bit只有兩個取值0和1。這裡不要再寫逗號 ); 最後必須分號結束
2.查看表格的創建語句:show create table student;
3.查看表結構:desc student;
4.查看所有的表格:show tables;
5.刪除表格:drop table student;
6.添加一個addr欄位,varchar(20),非空:alter table student add addr varchar(20) not null ;
7.將addr改為address:alter table student change addr address varchar(20) not null;
8.將address的varchar(20)改為varchar(50):alter table student modify address varchar(50) not null;
9.刪除address欄位:alter table student drop address;
四.數據的CRUD(create增加、retrieve檢索、update更新、delete刪除 )
-------------------------------------------------------------------------待更新-----------------------------------------------------------------------------------
五.SQL語句的強化
準備數據:
-- 創建 "京東" 資料庫 create database jing_dong charset=utf8; -- 使用 "京東" 資料庫 use jing_dong; -- 創建一個商品goods數據表 create table goods( id int unsigned primary key auto_increment not null, name varchar(150) not null, cate_name varchar(40) not null, brand_name varchar(40) not null, price decimal(10,3) not null default 0, is_show bit not null default 1, is_saleoff bit not null default 0 ); -- 向goods表中插入數據 insert into goods values(0,'r510vc 15.6英寸筆記本','筆記本','華碩','3399',default,default); insert into goods values(0,'y400n 14.0英寸筆記本電腦','筆記本','聯想','4999',default,default); insert into goods values(0,'g150th 15.6英寸游戲本','游戲本','雷神','8499',default,default); insert into goods values(0,'x550cc 15.6英寸筆記本','筆記本','華碩','2799',default,default); insert into goods values(0,'x240 超極本','超級本','聯想','4880',default,default); insert into goods values(0,'u330p 13.3英寸超極本','超級本','聯想','4299',default,default); insert into goods values(0,'svp13226scb 觸控超極本','超級本','索尼','7999',default,default); insert into goods values(0,'ipad mini 7.9英寸平板電腦','平板電腦','蘋果','1998',default,default); insert into goods values(0,'ipad air 9.7英寸平板電腦','平板電腦','蘋果','3388',default,default); insert into goods values(0,'ipad mini 配備 retina 顯示屏','平板電腦','蘋果','2788',default,default); insert into goods values(0,'ideacentre c340 20英寸一體電腦 ','台式機','聯想','3499',default,default); insert into goods values(0,'vostro 3800-r1206 台式電腦','台式機','戴爾','2899',default,default); insert into goods values(0,'imac me086ch/a 21.5英寸一體電腦','台式機','蘋果','9188',default,default); insert into goods values(0,'at7-7414lp 台式電腦 linux )','台式機','巨集碁','3699',default,default); insert into goods values(0,'z220sff f4f06pa工作站','伺服器/工作站','惠普','4288',default,default); insert into goods values(0,'poweredge ii伺服器','伺服器/工作站','戴爾','5388',default,default); insert into goods values(0,'mac pro專業級台式電腦','伺服器/工作站','蘋果','28888',default,default); insert into goods values(0,'hmz-t3w 頭戴顯示設備','筆記本配件','索尼','6999',default,default); insert into goods values(0,'商務雙肩背包','筆記本配件','索尼','99',default,default); insert into goods values(0,'x3250 m4機架式伺服器','伺服器/工作站','ibm','6888',default,default); insert into goods values(0,'商務雙肩背包','筆記本配件','索尼','99',default,default);
+----+---------------------------------------+---------------------+------------+-----------+---------+------------+ | id | name | cate_name | brand_name | price | is_show | is_saleoff | +----+---------------------------------------+---------------------+------------+-----------+---------+------------+ | 1 | r510vc 15.6英寸筆記本 | 筆記本 | 華碩 | 3399.000 | | | | 2 | y400n 14.0英寸筆記本電腦 | 筆記本 | 聯想 | 4999.000 | | | | 3 | g150th 15.6英寸游戲本 | 游戲本 | 雷神 | 8499.000 | | | | 4 | x550cc 15.6英寸筆記本 | 筆記本 | 華碩 | 2799.000 | | | | 5 | x240 超極本 | 超級本 | 聯想 | 4880.000 | | | | 6 | u330p 13.3英寸超極本 | 超級本 | 聯想 | 4299.000 | | | | 7 | svp13226scb 觸控超極本 | 超級本 | 索尼 | 7999.000 | | | | 8 | ipad mini 7.9英寸平板電腦 | 平板電腦 | 蘋果 | 1998.000 | | | | 9 | ipad air 9.7英寸平板電腦 | 平板電腦 | 蘋果 | 3388.000 | | | | 10 | ipad mini 配備 retina 顯示屏 | 平板電腦 | 蘋果 | 2788.000 | | | | 11 | ideacentre c340 20英寸一體電腦 | 台式機 | 聯想 | 3499.000 | | | | 12 | vostro 3800-r1206 台式電腦 | 台式機 | 戴爾 | 2899.000 | | | | 13 | imac me086ch/a 21.5英寸一體電腦 | 台式機 | 蘋果 | 9188.000 | | | | 14 | at7-7414lp 台式電腦 linux ) | 台式機 | 巨集碁 | 3699.000 | | | | 15 | z220sff f4f06pa工作站 | 伺服器/工作站 | 惠普 | 4288.000 | | | | 16 | poweredge ii伺服器 | 伺服器/工作站 | 戴爾 | 5388.000 | | | | 17 | mac pro專業級台式電腦 | 伺服器/工作站 | 蘋果 | 28888.000 | | | | 18 | hmz-t3w 頭戴顯示設備 | 筆記本配件 | 索尼 | 6999.000 | | | | 19 | 商務雙肩背包 | 筆記本配件 | 索尼 | 99.000 | | | | 20 | x3250 m4機架式伺服器 | 伺服器/工作站 | ibm | 6888.000 | | | | 21 | 商務雙肩背包 | 筆記本配件 | 索尼 | 99.000 | | | +----+---------------------------------------+---------------------+------------+-----------+---------+------------+
我們發現該資料庫設計的有一些問題,是什麼呢?
電腦的每種類型(cate_name)對應好多種款式的電腦,每種品牌(brand_name)也對應好多種款式,顯然不符合資料庫設計的三範式。
下麵將goods表再拆分出兩個表,分別是goods_cates商品類型表和goods_brands品牌表。
------------------------------------------------資料庫的三範式以後更新----------------------------------------------------------------------------
商品類型表的創建:
1.創建goods_cates表:
-- 創建商品分類表 create table if not exists goods_cates( id int unsigned primary key auto_increment, name varchar(40) not null );
2.將goods表中的cate_name同步到goods_cates表中的name:
insert goods_cates(name) select cate_name from goods group by cate_name;(第一種插入方式)
解釋:先將goods表中的cate_name查詢出來分好組,然後插入到goods_cates表中欄位為name下。
註意:必須指定good_cates中的欄位,否則程式不知道把查詢出來的cate_name插入到什麼欄位中。
3.將goods_cates中的id同步到goods中:
update goods join goods_cates on goods.cate_name = goods_cates.name set goods.cate_name = goods_cates.id;
解釋:可以將goods join goods_cates on goods.cate_name = goods_cates.name 這段代碼看作一個整體,就是說先將goods表和goods_cates通過內連接建立一個虛表,然後更改goods.cate_name為goods_cates.id。
商品品牌表的創建:
1.創建goods_brands表同時插入數據:
-- 在創建數據表的時候一起插入數據 -- 註意: 需要對brand_name 用as起別名,否則name欄位就沒有值 create table goods_brands ( id int unsigned primary key auto_increment, name varchar(40) not null) select brand_name as name from goods group by brand_name;(第二種插入方式)
2.同步goods中的數據(原理同上):
update goods join goods_brands on goods.brand_name = goods_brands.name set goods.brand_name = goods_brands.id;
最後的最後修改表結構,將cate_name改為cate_id,brand_name改為brand_id,這是一波新操作,瞧好:
alter table goods change cate_name cate_id int unsigned not null,change brand_name brand_id int unsigned not null;
最後goods表結果:
----+---------------------------------------+---------+----------+-----------+---------+------------+ | id | name | cate_id | brand_id | price | is_show | is_saleoff | +----+---------------------------------------+---------+----------+-----------+---------+------------+ | 1 | r510vc 15.6英寸筆記本 | 5 | 2 | 3399.000 | | | | 2 | y400n 14.0英寸筆記本電腦 | 5 | 7 | 4999.000 | | | | 3 | g150th 15.6英寸游戲本 | 4 | 9 | 8499.000 | | | | 4 | x550cc 15.6英寸筆記本 | 5 | 2 | 2799.000 | | | | 5 | x240 超極本 | 7 | 7 | 4880.000 | | | | 6 | u330p 13.3英寸超極本 | 7 | 7 | 4299.000 | | | | 7 | svp13226scb 觸控超極本 | 7 | 6 | 7999.000 | | | | 8 | ipad mini 7.9英寸平板電腦 | 2 | 8 | 1998.000 | | | | 9 | ipad air 9.7英寸平板電腦 | 2 | 8 | 3388.000 | | | | 10 | ipad mini 配備 retina 顯示屏 | 2 | 8 | 2788.000 | | | | 11 | ideacentre c340 20英寸一體電腦 | 1 | 7 | 3499.000 | | | | 12 | vostro 3800-r1206 台式電腦 | 1 | 5 | 2899.000 | | | | 13 | imac me086ch/a 21.5英寸一體電腦 | 1 | 8 | 9188.000 | | | | 14 | at7-7414lp 台式電腦 linux ) | 1 | 3 | 3699.000 | | | | 15 | z220sff f4f06pa工作站 | 3 | 4 | 4288.000 | | | | 16 | poweredge ii伺服器 | 3 | 5 | 5388.000 | | | | 17 | mac pro專業級台式電腦 | 3 | 8 | 28888.000 | | | | 18 | hmz-t3w 頭戴顯示設備 | 6 | 6 | 6999.000 | | | | 19 | 商務雙肩背包 | 6 | 6 | 99.000 | | | | 20 | x3250 m4機架式伺服器 | 3 | 1 | 6888.000 | | | | 21 | 商務雙肩背包 | 6 | 6 | 99.000 | | | +----+---------------------------------------+---------+----------+-----------+---------+------------+
六.MySQL高級
-----------------------------------------------------------------------待更新-------------------------------------------------------------------------------------------------------------