PHP学习总结(数据库概念、DDL语句、DML语句)
自從做完一個簡單的登陸注冊頁面,發(fā)現(xiàn)數(shù)據(jù)庫知識真的很重要,所以要詳細的學(xué)習(xí)一下數(shù)據(jù)庫的知識。
一、數(shù)據(jù)庫基本概念
數(shù)據(jù)庫可以理解為用來存儲信息的倉庫
表:表是數(shù)據(jù)的矩陣,在一個數(shù)據(jù)庫中的表看起來像一個簡單的電子表格。
列: 一列(數(shù)據(jù)元素) 包含了相同的數(shù)據(jù), 例如郵政編碼的數(shù)據(jù)。
行:一行(=元組,或記錄)是一組相關(guān)的數(shù)據(jù),例如一條用戶訂閱的數(shù)據(jù)。
冗余:存儲兩倍數(shù)據(jù),冗余降低了性能,但提高了數(shù)據(jù)的安全性。
主鍵:主鍵是唯一的。一個數(shù)據(jù)表中只能包含一個主鍵,可以使用主鍵來查詢據(jù)。
表頭(header): 每一列的名稱;
基本概念可以在菜鳥教程中學(xué)習(xí)
菜鳥教程
二、DDL語句
對數(shù)據(jù)庫的操作
1).創(chuàng)建數(shù)據(jù)庫
例如:
mysql> use bss;/使用這個名為bss的數(shù)據(jù)庫 Database changed2)選擇要操作的數(shù)據(jù)庫
use 數(shù)據(jù)庫名;3)查看數(shù)據(jù)庫中所有的數(shù)據(jù)表
show tables;4)刪除數(shù)據(jù)庫
drop database 數(shù)據(jù)庫名稱;例如:
mysql> create database xiao; Query OK, 1 row affected (0.00 sec)/這樣就新建一個數(shù)據(jù)庫,我們也可以在查看一下。 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | bss | | myhtml | | mysql | | performance_schema | | score | | test | | xiao | +--------------------+ 8 rows in set (0.00 sec)/這樣數(shù)據(jù)庫中便有了這個xiao數(shù)據(jù)庫,接下來再刪除它。 mysql> drop database xiao; Query OK, 0 rows affected (1.85 sec) /這樣xiao數(shù)據(jù)庫就被刪除了。對表的操作
1)創(chuàng)建表
例如:
create table Q(id1 int,id2 int); /這樣就創(chuàng)建好一個名為Q的表2)查看表
show tables; //查看表數(shù)據(jù) desc 表名; //查看表結(jié)構(gòu)例如:
mysql> desc user;/查看表結(jié)構(gòu) +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | pass | varchar(30) | YES | | NULL | | | name | varchar(30) | YES | | NULL | | | ttt | varchar(40) | YES | | NULL | | | sss | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 5 rows in set (0.01 sec) mysql> show tables;/查看表數(shù)據(jù) +---------------+ | Tables_in_bss | +---------------+ | user | | zzh | +---------------+ 2 rows in set (0.00 sec)3)查看創(chuàng)建表的SQL語句
show create table 表名 \G show create table 表名; //第一種相較于第二種更直觀一些例如:
mysql> show create table user;//查看建表命令 +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | user | CREATE TABLE `user` (`id` int(11) DEFAULT NULL,`pass` varchar(30) DEFAULT NULL,`name` varchar(30) DEFAULT NULL,`ttt` varchar(40) DEFAULT NULL,`sss` varchar(20) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 | +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)4)刪除表
drop table 表名;例如:
mysql> create table hello(id int,you varchar(30),me varchar(30)); Query OK, 0 rows affected (1.78 sec)/接下來我們查看一下 mysql> show tables; +---------------+ | Tables_in_bss | +---------------+ | hello | | user | | zzh | +---------------+ 3 rows in set (0.00 sec)/這樣bbs數(shù)據(jù)庫中便有這個hello的數(shù)據(jù)表了 mysql> drop table hello; Query OK, 0 rows affected (0.00 sec) mysql> show tables; +---------------+ | Tables_in_bss | +---------------+ | user | | zzh | +---------------+ 2 rows in set (0.00 sec) /這樣就刪除了剛才所創(chuàng)建的數(shù)據(jù)表5)修改表的字段類型
alter table 表名 modify 字段名 字段類型;例如:
alter table Q modify id1 varchar;6)增加表字段
alter table 表名 add 字段名 字段類型;例如:
alter table Q add id3 int;7)刪除表字段
alter table 表名 drop 字段名;例如:
mysql> alter table user drop pass; Query OK, 3 rows affected (1.81 sec) Records: 3 Duplicates: 0 Warnings: 0mysql> desc user;/再次查詢 +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | Id | int(11) | NO | PRI | NULL | auto_increment | | username | varchar(255) | YES | | NULL | | | password | varchar(255) | YES | | NULL | | +----------+--------------+------+-----+---------+----------------+ 3 rows in set (0.01 sec) /這樣的話就將新建的pass字段給刪除了8)字段改名
alter table 表名 change 舊字段名 新字段名 字段類型;例如:
mysql> desc zzh; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | he | varchar(20) | YES | | NULL | | | me | varchar(40) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 3 rows in set (0.01 sec) /這里我們想把字段he改為you mysql> alter table zzh change he you varchar(20); Query OK, 0 rows affected (0.37 sec) Records: 0 Duplicates: 0 Warnings: 0 /再次進行查詢 mysql> desc zzh; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | you | varchar(20) | YES | | NULL | | | me | varchar(40) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 3 rows in set (0.01 sec) /可以看到he已經(jīng)改為了you9)修改字段排列排序
例如:
10)更改表名
alter table 表名 rename 新的表名;例如:
mysql> use bss; Database changed mysql> show tables; +---------------+ | Tables_in_bss | +---------------+ | user | | zzh | +---------------+ 2 rows in set (0.00 sec) /接下來我們把數(shù)據(jù)表user的名字改為username mysql> alter table user rename username; Query OK, 0 rows affected (1.75 sec) /這些便實現(xiàn)了改表名稱 mysql> show tables; +---------------+ | Tables_in_bss | +---------------+ | username | | zzh | +---------------+ 2 rows in set (0.00 sec)DML語句
這里我使用test數(shù)據(jù)庫中的welcome表來進行練習(xí)
1)查詢語句
2)插入記錄
insert into 表名(字段1,字段2,字段3,...,字段n) values(值1,值2,值3,...,值n);注意:values后面的順序應(yīng)該和字段的排序一致
例如:
3)一次插入多條記錄
insert into 表名(字段1,字段2,字段3,...,字段n)values(值1,值2,值3,...,值n),(值1,值2,值3,...,值n),(值1,值2,值3,...,值n);例如:
mysql> insert into welcome(username,password) values-> (1,123),-> (2,123),-> (3,123),-> (4,123);Query OK, 4 rows affected (0.00 sec)Records: 4 Duplicates: 0 Warnings: 0mysql> select * from welcome;+----------+----------+| username | password |+----------+----------+| QTFY | 123 || 2 | 123 || WMM | 123 || 1 | 123 || 2 | 123 || 3 | 123 || 4 | 123 |+----------+----------+7 rows in set (0.00 sec)4)更新記錄
1.更新一個表
例如:
mysql> update welcome set password=1234 where username='QTFY';Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from welcome;+----------+----------+| username | password |+----------+----------+| QTFY | 1234 || 2 | 123 || WMM | 123 || 1 | 123 || 2 | 123 || 3 | 123 || 4 | 123 |+----------+----------+7 rows in set (0.00 sec)/可以看到QTFY的密碼已經(jīng)從123改為12342.更新多個表中數(shù)據(jù)
update 表1,表2,...表n set 表1.字段1=表達式1,表n.字段n=表達式n [where 條件];例如:
/首先再創(chuàng)建一個表Qmysql> create table Q(id int,age int);Query OK, 0 rows affected (0.08 sec)mysql> desc Q;+-------+---------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------+------+-----+---------+-------+| id | int(11) | YES | | NULL | || age | int(11) | YES | | NULL | |+-------+---------+------+-----+---------+-------+2 rows in set (0.02 sec)mysql> insert into Q(id,age) values(1,20);Query OK, 1 row affected (0.00 sec)mysql> select * from Q;+------+------+| id | age |+------+------+| 1 | 20 |+------+------+1 row in set (0.00 sec)/更新語句mysql> update welcome,Q set welcome.password=2000,Q.age=2000 where welcome.username='QTFY' and Q.age=20;Query OK, 2 rows affected (0.00 sec)Rows matched: 2 Changed: 2 Warnings: 0/更新結(jié)果:| QTFY | 20001 | 2000 |5)刪除記錄
1.刪除單表中的數(shù)據(jù)
例如:
mysql> select * from welcome;+----------+----------+| username | password |+----------+----------+| QTFY | 2000 || 2 | 123 || WMM | 123 || 1 | 123 || 2 | 123 || 3 | 123 || 4 | 123 |+----------+----------+7 rows in set (0.00 sec)/這里刪除WMM記錄mysql> delete from welcome where username='WMM';Query OK, 1 row affected (0.00 sec)/刪除成功了mysql> select * from welcome;+----------+----------+| username | password |+----------+----------+| QTFY | 2000 || 2 | 123 || 1 | 123 || 2 | 123 || 3 | 123 || 4 | 123 |+----------+----------+6 rows in set (0.00 sec)2.刪除多個表中的數(shù)據(jù)、
delete 表1,表2,…表n from 表1,表2,…表n [where 條件];
不管是單表還是多表,不加where條件將會把表中的所有記錄刪除,所以操作時一定要小心。
這里的操作和更新多表大致一樣。
6)查詢記錄
select * from 表名; // 查詢所有紀(jì)錄 select 字段名 from 表名;//查詢某個字段的記錄例如:
mysql> desc welcome;+----------+--------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+----------+--------------+------+-----+---------+-------+| username | varchar(255) | YES | | NULL | || password | varchar(255) | YES | | NULL | |+----------+--------------+------+-----+---------+-------+2 rows in set (1.75 sec)/這里查username字段的記錄mysql> select username from welcome;+----------+| username |+----------+| QTFY || 2 || 1 || 2 || 3 || 4 |+----------+6 rows in set (0.00 sec)7)查詢不重復(fù)的記錄
select distinct field1,field2 from 表名; //只要field1,field2任何一個字段有不同就會被選擇! //一般使用distinct,只篩選一個字段!例如:
mysql> select username from welcome;+----------+| username |+----------+| QTFY || 2 || 1 || 2 || 3 || 4 |+----------+6 rows in set (0.00 sec)/采用查詢不重復(fù)記錄語句mysql> select distinct username from welcome;+----------+| username |+----------+| QTFY || 2 || 1 || 3 || 4 |+----------+5 rows in set (1.63 sec)8)條件查詢
= < > >= <= != 比較運算符 //多個條件之間可以使用or and等 //select * from 表名 where 條件例如:
mysql> select * from welcome where username=4;+----------+----------+| username | password |+----------+----------+| 4 | 123 |+----------+----------+1 row in set, 1 warning (0.00 sec)/ or的用法mysql> select * from welcome where username=4 or username=3;+----------+----------+| username | password |+----------+----------+| 3 | 123 || 4 | 123 |+----------+----------+2 rows in set, 2 warnings (0.00 sec)/and的用法mysql> select * from welcome where username>1 and username<4 ;+----------+----------+| username | password |+----------+----------+| 2 | 123 || 2 | 123 || 3 | 123 |+----------+----------+3 rows in set, 1 warning (0.00 sec)mysql> select * from welcome where username>=1 and username<=4 ;+----------+----------+| username | password |+----------+----------+| 2 | 123 || 1 | 123 || 2 | 123 || 3 | 123 || 4 | 123 |+----------+----------+5 rows in set, 1 warning (0.00 sec)9)排序和限制
排序:asc:由低到高select * from 表名 order by 字段名 asc; desc:由高到底select * from 表名 order by 字段名 desc;多個字段排序select * from 表名 order by 字段名 desc,字段名 desc;例如:
/asc:由低到高mysql> select * from welcome order by username asc;+----------+----------+| username | password |+----------+----------+| 1 | 123 || 2 | 123 || 2 | 123 || 3 | 123 || 4 | 123 || QTFY | 2000 |+----------+----------+6 rows in set (1.69 sec)/desc:由高到底mysql> select * from welcome order by username desc;+----------+----------+| username | password |+----------+----------+| QTFY | 2000 || 4 | 123 || 3 | 123 || 2 | 123 || 2 | 123 || 1 | 123 |+----------+----------+6 rows in set (0.00 sec)/多個字段排序mysql> select * from welcome order by username desc,password desc;+----------+----------+| username | password |+----------+----------+| QTFY | 2000 || 4 | 123 || 3 | 123 || 2 | 123 || 2 | 123 || 1 | 123 |+----------+----------+6 rows in set (0.00 sec)限制:
在語句的最后面 加上limit 數(shù)字1,數(shù)字2 來進行查詢數(shù)量的限制。 limit 數(shù)字1,數(shù)字2 數(shù)字1代表從第幾條記錄開啟取(是從0開始的),數(shù)字2代表取幾條!例如:
/從0條開始取一條mysql> select * from welcome order by username desc limit 0,1-> ;+----------+----------+| username | password |+----------+----------+| QTFY | 2000 |+----------+----------+1 row in set (0.00 sec)10)聚合
sum求和
例如;
mysql> select sum(password) from welcome;+---------------+| sum(password) |+---------------+| 2615 |+---------------+1 row in set (1.66 sec)count記錄總數(shù)
select count(*|字段名) from 表名;例如:
mysql> select count(*) from welcome;+----------+| count(*) |+----------+| 6 |+----------+1 row in set (1.56 sec)max最大值
select max(字段名) from 表名;例如:
mysql> select max(password) from welcome;+---------------+| max(password) |+---------------+| 2000 |+---------------+1 row in set (0.00 sec)min最小值
select min(字段名) from 表名;GROUP BY分類聚合
select department,sum(字段名) from 表名 group by 字段名;WITH ROLLUP分類聚合后的結(jié)果進行再匯總
select sum(字段名) from 表名 group by 字段名 with rollup;HAVING
注意:having和where的區(qū)別在于,having是對聚合后的結(jié)果進行條件過濾,而where是在聚合前就對記錄進行過濾 ,應(yīng)該盡可能的對記錄進行先過濾! select sum(字段名) from 表名 group by 字段名 having sum(字段名)>1000;11)表連接
顯示多個表中的字段的時候即可使用表連接
內(nèi)連接:選取兩張表中相互匹配的記錄
例如:
外連接:
僅僅選取兩張相互匹配的記錄,并且會選出其他不匹配的記錄
左連接
概念:包含左邊表中的所有記錄(包括右表中沒有和它匹配的記錄)
例如:
右連接
概念:包含右邊表中的所有記錄(包括左表中沒有和它匹配的記錄)
左連接和右連接是可以相互轉(zhuǎn)換的!
例如:
12)子查詢
一個查詢需要另外一個查詢的結(jié)果參與的時候
用于子查詢的關(guān)鍵字:
in
語法:select * from 表名 where id in(select 字段名 from 表名);
in 在…里面
注意點 in后面的子語句必須只返回一個字段
若查詢結(jié)果唯一(只有一條)可以使用=代替in
not in
與in相反
exists
語法:select語句 where exists(select 語句);
exists:后面那個子語句有沒有查詢出記錄來,如果查詢出記錄來返回true,否則就是false
并且查詢出來的記錄的具體的值是NULL也是沒有關(guān)系,也是返回true.
not exits
與exists相反
1)select * from 表名 where deptno in(select deptno from 表名);
2)若查詢結(jié)果唯一可以使用=代替in
select * from 表名 where deptno=(select deptno from 表名 limit 限制條件);
13)記錄聯(lián)合
需要將兩個表或者多個表的數(shù)據(jù)按照一定的查詢條件查詢出來后,將結(jié)果合并到一起顯示這是就需要用到記錄聯(lián)合
多個select 語句用
UNION或者UNION ALL隔開即可實現(xiàn)
區(qū)別: 前者 會將多個查詢結(jié)果合并后并且進行去除重復(fù)后返回
后者 則直接合并并不去除重復(fù)
聯(lián)合的條件:查詢的列個數(shù)要相等
例如:
mySQL中的DDL語句和DML語句都是常用的語句,總結(jié)下來,多回顧回顧。
總結(jié)
以上是生活随笔為你收集整理的PHP学习总结(数据库概念、DDL语句、DML语句)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: web安全学习—Http协议基础
- 下一篇: web安全-XSS攻击(一)