篇幅簡介 篇幅簡介 一、Msql數據類型 1、整型 tinyint, 占 1位元組 ,有符號: -128~127,無符號位 :0~255 smallint, 占 2位元組 ,有符號: -32768~32767無符號位 :0~65535 mediumint 占 3位元組 ,有符號: -8388608~838 ...
篇幅簡介
一、Msql數據類型
1、整型
tinyint, 占 1位元組 ,有符號: -128~127,無符號位 :0~255
smallint, 占 2位元組 ,有符號: -32768~32767無符號位 :0~65535
mediumint 占 3位元組 ,有符號: -8388608~8388607,無符號位:0~16777215:
int, 占 4位元組 ,有符號: -2147483648~2147483647,,無符號位 無符號位 :0~4 284967295
bigint, bigint,bigint, 占 8位元組
bool 等價於 tinyint
2、浮點型
float([m[,d]]) 占 4位元組 ,1.17E-38~3.4E+3838~3.4E
double([m[,d]]) 占 8位元組
decimal([m[,d]]) 以字元串形式表示的浮點數
3、字元型
char([m]): :定長的字元 ,占用 m位元組
varchar[(m)]::變長的字元 ,占用 m+1m+1 位元組,大於 255 個字元:占用 m+2m+2
tinytext,255 個字元 (2 的 8次方 )
text,65535 個字元 (2 的 16 次方 )
mediumtext,16777215字元 (2 的 24 次方 )
longtext (2的 32 次方 )
enum(value,value,...)占 1/2個位元組 最多可以有 65535 個成員 個成員
set(value,value,...) 占 1/2/3/4/8個位元組,最多可以 有 64個成員
二、Mysql數據運算
1、邏輯運算 and or not
for example:
選擇出 書籍價格 為(30,60,40,50)的記錄
sql> select bName,publishing,price from books where price=30 or price=40 or price=50 or price=60;
1
2、in 運算符
in 運算符用於 WHERE 表達式,以列表的形式支持多個選擇,語法如下
where colunmm in (value1,value2,.......)
where colunmm not in (value1,value2,..........)
當in前面加上not時,表示與in相反,既不在結果中
sql> select bName,publishing,price from books where price in (30,40,50,60)order by price asc;
2
3、算術運算符 >= | <=| <> |=
for example
找出價格小於70的記錄
mysql> select bName,price from books where price <= 70;
3
4、模糊查詢 like '%...%'
欄位名 [not] like '%......%' 通配符 任意多個字元
查詢書中包含程式字樣的記錄
mysql> select bName,price from books where bName like '%程式%'
4
5、範圍運算 [not] between .......and
查找價格不在30和60之間的書名和價格
mysql> select bName,price from books where price not between 30 and 60 order by price desc;
5
6、Mysql 子查詢
select where條件中又出現select
查詢類型為網路技術的圖書
mysql> select bName,bTypeId from books where bTypeId=(select bTypeId from category where bTypeName='網路技術');
6
7、limit 限定顯示的條目
LIMIT子句可以被用於強制 SELECT語句返回指定的記錄數。 LIMIT 接受一個或兩數字參。必 須是一個整數常量。如果給定兩 個數,第一指定返 回記錄行的偏移量,第二個參數返回記錄行的最大數目。初始偏移量是 0( 而不是 1)。
語法 : select * from limit m,n
其中 m是指記錄開始的 index indexindex,從 0開始,表示第一條記錄,n是指從第 m+1 條開始,取 n。
查詢books表中第2條到六行的記錄
mysql>select * from books limit 1,6;
7
8、連接查詢
以一個共同的欄位,求兩張表當中符合條件並集。 通過 共同欄位把這兩張表的共同欄位把這兩張表連 接起來。
常用的連接:
內連接:根據表中的共同欄位進行匹配
外連接:現實某數據表的 全部記錄和另外數據表中符合連接條件的記錄。
外連接:左連接、右連接
內連接:for exmaple
create table student(sit int(4) primary key auto_increment,name varchar(40));
insert into student values(1,‘張三’),(2,‘李四’),(3,‘王五’),(4,‘mikel’);
create table teachers(sit int(4),id int(4) primary key auto_increment,score varchar(40));
insert into teachers values(1,1,‘1234’),(1,2,‘2345’),(3,3,‘2467’),(4,4,‘2134’);
select s.* ,t.* from student as s,teachers as t where s.sid=t.sid;
8
左連接: select 語句 a表 left[outer] join b 表 on 連接條件 ,a表是主,都顯示。
b表是從,主表內容全都有,主表多出來的欄位,從表沒有的就顯示 null,從表多出主表的欄位不顯示。
select * from student as s left join teachers as t on s.sit=t.sit;
9
右連接:select 語句 a表 right[outer] join b 表 on 連接條件 ,b表是主,都顯示。
a表是從,主表內容全都有,主表多出來的欄位,從表沒有的就顯示 null,從表多出主表的欄位不顯示。
select * from student as sright join teachers as t on s.sit=t.sit;
10
三、聚合函數
1、sam() 求和
select sum (id+score) as g from teachers;
2、avg() 求平均值
select avg (id+score) as g from teachers;
3、max() 最大值
select max (id) as g from teachers;
4、min() 最小值
select min(id) as g from teachers;
5、substr(string,start,len) 截取
select substr(soucr,1,2) as g from teachers;
從start開始,截取len長度,start從1開始
concat(str1,str2,str3......................)字元串拼接,將多個字元串拼接在一起
select concat(id,score,sit) as g from teachers;
6、count() 統計計數 記錄欄位數據條數
select count(id) as g from teachers;
7、upper() 大寫
select upper(name) as g from student; #將欄位name中英文全部變為大寫,但不改變原值
8、lower() 小寫
select lower(name) as g from student; #將欄位name中英文全部變為小寫,但不改變原值
四、索引
mysql中索引是以文件形式存放的,對錶進行增刪改,會同步到索引,索引和表保持一致,常用在where 後欄位查詢就加索引。
優點:加快查詢速度,減少查詢時間
缺點:索引占據一定磁碟空間,會影響insert,delete,update執行時間
1、索引類型
普通索引:最基本索引,不具備唯一性
唯一索引:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一
主鍵索引:記錄值唯一,主鍵欄位很少被改動,不能為空,不能修改,可用於一個欄位或者多個欄位
全文索引:檢索文本信息的, 針對較大的數據,生成全文索引查詢速度快,但也很浪費時間和空間
組合索引:一個索引包含多個列
2、創建索引
普通索引:
# 創建普通索引
create table demo(id int(4),uName varchar(20),uPwd varchar(20),index (uPwd));
# 查看建表過程
show create table demo;
demo | CREATE TABLE `demo` (
`id` int(4) DEFAULT NULL,
`uName` varchar(20) DEFAULT NULL,
`uPwd` varchar(20) DEFAULT NULL,
KEY `uPwd` (`uPwd`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
唯一索引:欄位值只允許出現一次,可以有空值
# 創建唯一索引
create table demo1(id int(4),uName varchar(20),uPwd varchar(20),unique index (uName));
# 查看建表過程
show create table demo1;
demo1 | CREATE TABLE `demo1` (
`id` int(4) DEFAULT NULL,
`uName` varchar(20) DEFAULT NULL,
`uPwd` varchar(20) DEFAULT NULL,
UNIQUE KEY `uName` (`uName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
主鍵索引:欄位記錄值唯一,欄位很少被修改,一般主鍵約束為auto_increment或者not null unique,不能為空,不能重覆。
# 創建主鍵索引
create table demo2(id int(4) auto_increment primary key,uName varchar(20),uPwd varchar(20));
# 查看建表語句
demo2 | CREATE TABLE `demo2` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`uName` varchar(20) DEFAULT NULL,
`uPwd` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
全文索引:提高全文檢索效率,解決模糊查詢
# 創建全文索引
create table demo3(id int(4),uName varchar(20),uPwd varchar(20),fulltext(uName,uPwd));
# 查看建表語句
| demo3 | CREATE TABLE `demo3` (
`id` int(4) DEFAULT NULL,
`uName` varchar(20) DEFAULT NULL,
`uPwd` varchar(20) DEFAULT NULL,
FULLTEXT KEY `uName` (`uName`,`uPwd`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
五、外鍵約束
外鍵約束:foreign key 表與表之間的一種約定關係,由於這種關係存在,讓表與表之間的數據更加具有完整性,更加具有關聯性。
創建外鍵約束
創建user主表
create table user1(id int(11)auto_increment primary key,name varchar(50),sex int(1));
插入數據
insert into user1(name,sex)values("mikel",4),("plyx",6);
創建order外鍵表
create table `order`(order_id int(11)auto_increment primary key,u_id int(11),username varchar(50),monery int(11),foreign key(u_id) references user1(id) on delete cascade on update cascade )engine=innodb);
插入數據
INSERT INTO `order` (order_id,u_id,username,monery)values(1,1,'mikel',2345),(2,2,'plyx',3456)
測試級聯刪除
delete from user1 where id=1
查看order表記錄
12
測試級聯更新
update user1 set id=5 where id=2
13
測試數據完整性
在order表中插入一條u_id為6的記錄
insert into `orser` (u_id)values(6);
Cannot add or update a child row: a foreign key constraint fails (`school`.`order`, CONSTRAINT `order_ibfk_1` FOREIGN KEY (`u_id`) REFERENCES `user1` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
user1中不存在id為6的記錄,現在添加一條id為6的記錄
insert into user1(id)values(6);
14
可以看到數據已經插入進去了
視圖
是一張虛擬表,由 select select select語句指定的數據結構和數據,不生成真實文件
create view mikel as select * from school.books;
select * from mikel;
15
六、存儲過程
存儲過程用來封裝mysql代碼,相當於函數,一次編譯,生成二進位文件,永久有效,提高效率。
1、定義存儲過程
create procedure 過程名(參數1,參數2,.............)
begin
sql語句
end
2、調用存儲過程
call 過程名(參數1,參數2,...................)
example:定義一個存儲過程查看books表中所有數據
1. 修改sql預設執行符號
delimiter //
create procedure seebooks();
begin
select * from sctudent.books;
end //
call seebooks() //
16
3、存儲過程參數傳遞
in 傳入參數 int 賦值
IN輸入參數:表示調用者向過程傳入值(傳入值可以是字面量或變數)
OUT輸出參數:表示過程向調用者傳出值(可以返回多個值)(傳出值只能是變數)
INOUT輸入輸出參數:既表示調用者向過程傳入值,又表示過程向調用者傳出值(值只能是變數)
create procedure seebook(in b int)
begin
select * from school.books where bId=b;
end //
call seebook(4)
16
out --------------傳出參數
select into 在過程中賦值傳給變數,並查看變數值
create procedure seebook2(out b varchar(100))
begin
select bName into b from school.books where bId=4;
end //
17
過程內的變數使用方法
聲明變數名稱,類型,declare 過程內的變數沒有@
賦值 set 變數名=(select 語句)
create procedure seebook3()
begin
declare str varchar(100);
set str=(select bName from school.books where bId=20);
select str;
end//
call seebook3() //
18
1、觸發器
與數據表有關,當表出現(增,刪,改,查)時,自動執行其特定的操作
語法:create trigger 觸發器名稱 觸發器時機 觸發器動作 on 表名 for each row
觸發器名稱:自定義
觸發器時機:after/before 之後/之前
觸發器動作:insert update delete
創建觸發器:
create trigger delstudent after delete on grade for each now
delete from student where sid='4';
delete from grade where sid=4;
mysql> select sid from student where sid=4;
Empty set
查看是否還有sid=4的值,可以發現已經被刪除
2、事務
單個邏輯單元執行的一系列操作,通過將一組操作組成一個,執行的時要麼全部成功,要麼全部失敗,使程式更可靠,簡化錯誤恢復。
MySQL 事務主要用於處理操作量大,複雜度高的數據。比如說,在人員管理系統中,你刪除一個人員,你即需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣,這些資料庫操作語句就構成一個事務!
在 MySQL 中只有使用了 Innodb 資料庫引擎的資料庫或表才支持事務。
事務處理可以用來維護資料庫的完整性,保證成批的 SQL 語句要麼全部執行,要麼全部不執行。事務用來管理 insert,update,delete 語句。
MYSQL 事務處理主要有兩種方法:
1、用 BEGIN, ROLLBACK, COMMIT來實現
BEGIN 開始一個事務
ROLLBACK 事務回滾
COMMIT 事務確認
2、直接用 SET 來改變 MySQL 的自動提交模式:
SET AUTOCOMMIT=0 禁止自動提交
SET AUTOCOMMIT=1 開啟自動提交
創建事務
begin;
update books set bName="plyx" where bId=1;
update books set bName="plyx" where bId=2;
commit//
查看記錄,已經修改了
select * from books;
19
七、mysql數據結構
主配置文件 my.cnf
數據目錄:/var/lib/mysql
進程通信sock文件 :/var/lib/mysql/mysql.sock
錯誤日誌文件
[mysqld_safe]
log-error=/var/log/mysqld.log
進程PID文件:pid-file=/var/run/mysqld/mysqld.pid
二進位文件:log-bin=mysql-bin.log
八.常見的存儲引擎介紹
myisam :
特性: 1、不支持事務,不支持外鍵,宕機時會破壞表
2、使用較小的記憶體和磁碟空間,訪問速度快
3、基於表的鎖,表級鎖
4、mysql 只緩存index索引, 數據由OS緩存
適用場景:日誌系統,門戶網站,低併發。
Innodb:
特性:1、具有提交,回滾,崩潰恢復能力的事務安全存儲引擎
2、支持自動增長列,支持外鍵約束
3、占用更多的磁碟空間以保留數據和索引
4、不支持全文索引
適用場景:需要事務應用,高併發,自動恢復,輕快基於主鍵操作
MEMORY:
特性:1、Memory存儲引擎使用存在於記憶體中的內容來創建表。
2、每個memory表只實際對應一個磁碟文件,格式是.frm。memory類型的表訪問非常的快,因為它的數據是放在記憶體中的,並且預設使用HASH索引,但是一旦服務關閉,表中的數據就會丟失掉。
3、MEMORY存儲引擎的表可以選擇使用BTREE索引或者HASH索引。
九、思考與總結
到此主要介紹,mysql一些使用技巧,包括數據類型,查詢方法,存儲過程,外鍵約束,索引。觸發器,事務,還包含一些存儲引擎介紹,到此基礎部分結束,還有後面的分享將會陸續推出,敬請期待!
總結
我是MIkel Pan,雲計算愛好者,定期更新生活感悟,心靈進化者就在MIkel Pan,喜歡我就來找我吧!
博客園地址:http://www.cnblogs.com/plyx/
簡書地址:https://www.jianshu.com/u/5986765934f4