Mysql學習總結(41)——MySql資料庫基本語句再體會
1、資料定義語言(DDL):定義和管理資料物件,比如建立資料庫、資料表
資料操作語言(DML):用於操作資料庫物件中的包含的資料。
資料查詢語言(DQL):用於查詢資料庫物件中包含的資料,能夠對錶進行查詢。
資料控制語言(DCL):管理資料庫的語言。
2、進入資料庫的方式
開始-》執行-》cmd-》mysql -u root -p
Mysql -h 主機地址 -u 使用者名稱 -p
Mysql -h localhost -u root -p
3、資料庫的操作:
a.建立資料庫 create database 資料庫名;
b.檢視所有的資料庫 show databases;
c.選擇資料庫 use 資料庫名;
d.檢視自己選擇的資料庫 select database();
e.刪除資料庫 drop database 資料庫名;
如果不存在則建立:create database if not exists 庫名
如果不存在則建立並設定字符集:
Create database if not exists 資料庫名 default charset utf8
4、資料表的操作:
a.檢視資料庫中的資料表: show tables;
b.建立資料表::create table 資料表名;
c.檢視資料表的結構: desc 資料表名;
describe stu 描述表結構
【DESCRIBE TABLE 用於列出指定表或檢視中的所有列
DESCRIBE INDEXFOR TABLE 用於列出指定表的所有索引。
所以 DESCRIBE是用來顯示資料結構資訊的
而desc是descend ,是用於查詢出結果時候對結果進行排序,是降序排序】
d.檢視建立資料表的語句:show create table 資料表名;
e.刪除資料表:drop table 資料表名;
F.如果存在則刪除drop database if exists lamp
5、資料的操作:
1)、插入資料:
方法1:插入指定的欄位:
insert into 資料表名(欄位名1,欄位名2....) values(值1,值2....);
方法2:插入所有欄位:
insert into 資料表名 values(值1,值2,值3....)
方法3:插入多條語句:
insert into 資料表名 (欄位名1,欄位名2....) values (值1,值2),(值3,值4),........;
方法4:插入單條語句:
insert into 資料表名 set 欄位名1 = 值1,欄位名2 = 值2....
方法5:插入某些查詢的結果:
insert into 資料表名(欄位名1,欄位名2....) select 欄位名1, 欄位名2.....from 資料表名;
2)、檢視資料:
方法1:select 欄位名1,欄位名2,欄位名3.... from 資料表名
方法2:select * from 資料表名
A. select主句
查詢當前的資料庫 select database();
查詢版本 select version();
select 1 + 2;
B. from子句--從指定的資料表裡面查詢資料
select 欄位名1,欄位名2,欄位名3.... from 資料表名
select * from 資料表名
C. where子句--查詢資料的條件(可選)
select語句裡面使用where子句指定過濾條件。 where條件中可以用:
1. 算數運算子(+ - * / %)
2 比較運算子( < >= > <= != =)
3. 邏輯運算子(not and or )
4. in操作符,指定條件範圍,範圍中的每個條件都可以進行匹配;
格式:in(值1,值2.....)
5. between操作符,在指定的兩個值之間;
格式:between 起始值 and 結束值
6. not,否定後面的操作
7. like或 not like 兩個操作符要使用包含萬用字元的字串
萬用字元:
%:表示任意字元出現任意次數,可以放在任意位置
_:下劃線,使用者和%一樣,但是表示任意字元出現一次
格式:欄位名 like '字串'
%值% :包含值 %值:以值結尾的 值%:以值開頭的
D. order by子句----對欄位進行排序
格式1:order by 欄位名[asc | desc]
注意:asc(預設排列順序)是升序排序,desc降序排序
格式2:order by 欄位名1[asc | desc],欄位名2[asc | desc]
注意:指的是欄位名1完全相同的情況下按照欄位名2進行排序
E. limit 子句---限制結果集
格式1:limit m(返回多少行資料)
格式2:limit n,m
注意:1、n表示從多少行開始取值(第一條資料結果是從0開始 的),m表示返回的行數。
2、如果沒有足夠的行數,有多少行就顯示多少行。
E. group by 子句--用於分組
格式1: group by 欄位名(按照欄位名進行分組)
格式2:group by 欄位名 having 條件(按照分組完成之後的結果 再次進行過濾)
注意順序:select=>from=>where=>group by =>having=>order by =>limit
3)、修改資料:
update 資料表名 set 欄位名1=值1,欄位名2=值2.... where 欄位名=值;
所有的班級是null的學員的班級設定為天庭 is null 是null的值會被選中
mysql> update stu set class = '天庭' where class is null;
4)、刪除資料:
delete from 資料表名 where 欄位名=值
注意:1、一定要加上條件。2、在做大量的刪除之前,一般會將條件先進行測試,使用select先測試出要刪除的東西,然後再刪除。3、要刪除所有資料的時候不要使用delete而是使用 truncate table表名(他比delete要快,將表刪除,然後再重新建立)
6、對欄位的操作
1)、更改欄位
方法1: alter table 資料表名 change 原欄位名 新欄位名 型別 約束條件
方法2: alter table 資料表名 modify 欄位名 型別 約束條件
注意:change可以修改欄位名,modify不可以修改欄位名
2)、新增欄位
方法1:alter table 資料表名 add 欄位名 型別 約束條件
方法2:alter table 資料表名 add 欄位名 型別 約束條件 first 放在最前面
方法3:alter table 資料表名 add 欄位名 型別 約束條件 after 放在哪個欄位名後面
3)、刪除欄位
alter table 資料表名 drop 欄位名
4)、修改資料表名
alter table 資料表名 rename as 新表資料名
7、索引的分類:
顯示所有的索引
mysql> show indexes from test\G
1)、常規索引(index),最基本的索引,沒有任何限制
A. 1-建立索引:
create table 表名(
欄位.....,
index 索引名 (要索引的欄位)
);
2--資料表已經建立的情況下:
create index 索引名 on 資料表名(要加索引的欄位);
B. 刪除索引:
drop index 索引名 on 資料表名
alter table test(表名) drop index username;(索引名)
C.刪除主鍵索引時,該欄位不能是自增
mysql> alter table demo drop primary key;
2)、唯一索引(unique)--索引列裡面的值必須是唯一的,允許有空值
A .1--建立索引:
create table 表名(
欄位....,
unique 索引名(要索引的欄位)
);
2--資料表已經建立的情況下:
create unique index 索引名 on 資料表名(要索引的欄位)
B. 刪除索引:
drop index 索引名 on 資料表名
3)、主鍵索引(primary key) 一個表只能有一個主鍵
A. 1--建立索引:
create table 表名(
id int unsigned auto_increment primary key,
name char(32)
);
B. 刪除索引:
alter table 表名 drop primary key
注意:如果主鍵的欄位上面有自增(auto_increment)需要先將auto_increment去掉,再刪除。
alter table 表名 change 自增的列 自增的列 型別
8、1) 預設情況下,建立表的時候不指定表的儲存引擎,將使用預設的儲存引擎。
show variables like 'default_storage_engine';
2)檢視當前資料庫支援的儲存引擎
show engines;
3) 資料表定義儲存引擎
mysql> create table t2(
-> id int unsigned auto_increment primary key,
-> name char(32)
-> )engine=myisam;
9、資料型別
整型-- int tinyint 浮點型-- float(M,D) double(M,D) 定點型-- decimal(M,D)
字串-- char(M) varchar(M) text blod 日期--時間戳 列舉型--enum 集合型別--set
10、約束條件(通用)
1)、null---欄位中沒有插入值時,預設為null。
not null--必須在插入值時,在該欄位中插入一個值。如果不插入值那麼為”空“
2)、default 值 在不插入該欄位時預設插入的值。
11、 整型的約束條件:
1)、zerofill表示0填充。一般和整型後面設定的寬度一起使用,如果數值長度小於指定的長度那麼將會在前面補充相對應的0進行填充。
2)、unsigned(無符號)如果要在欄位裡面儲存非負數,或者較大上限的值時可使用該約束條件,將從0開始,需要在欄位型別後面緊跟著定義unsigned。
3)、auto_increment,自增,在產生一個唯一的標識或順序值的時候,可以利用這個約束條件。這個約束條件只能用於整數型別,值一般從1開始。每行加1,插入一個null到一個auto_increment列時,MySQL將插入一個比出現過的最大值+1的值。一個表中只能有一個auto_increment列,並且必須定義為primary key或unique才能夠使用。
12、統計查詢
1)、count()用來進行計數。
獲取該表中一共有多少條資料
mysql> select count(*) from test
count(*)資料行的條數。
count(欄位名) 來進行統計,但是它只會統計全體非null值的個數。
2)、min()最小值
3)、max()最大值
4)、sum()和
5)、avg()平均數 計算的時候不會將null的列計算在內
13、完全限定
select 表名.欄位名 from 庫名. 表名
14、起別名
欄位名和表名都可以起別名 as
select count(*) as 別名 from 表名;
15、 拼接欄位
concat(欄位,欄位)
16、關聯查詢
1、找關係
2、就先寫出 select * from 表1,表2
3、 寫where 條件
4、將*替換成你想要的資料
17、子查詢----在查詢裡面再包含一個查詢
注意:子查詢總是從內向外進行處理.實際上他執行了2個SQL語句
1)、select name,(select name from level where user.level=level.id) from user;
2)、後置用法:當作條件來用
現在我要找出所有翠紅樓裡面管理層人員。
mysql> select name from user where level in (select id from level where name in( '翠紅樓老鴇','翠紅樓龜公','翠紅樓老闆'));
18、匯出mysql資料庫
1)、匯出資料庫及裡面的結構和資料:C:\Documents and Settings\admin>mysqldump -u root -p lamp > C:\xampp\htdocs\test.sql
2)、匯出指定庫裡面的表 C:\Documents and Settings\admin>mysqldump -uroot -p lamp test> C:\xampp\ht docs\test1.sql
3)、匯出資料庫的結構的:mysqldump -u 使用者名稱 -p -d 資料庫名 > 匯出的檔名
4)、匯出指定庫的指定表的結構:mysqldump -u 使用者名稱 -p -d 資料庫名 表名 > 匯出的檔名
19、匯入資料庫
1)、在退出資料庫的情況下 mysql -u 使用者名稱 -p 資料庫名 < 資料庫檔案
2)、在進入到資料庫並且選中的情況下 source 資料庫檔案
20、修改密碼
1、C:\Documents and Settings\admin>mysqladmin -u root -p password 要設定的密碼
2、set password for '使用者名稱'@'登入主機'=password('新密碼');
21、mysql忘記密碼
步驟:
1、關閉正在執行的MySQL
2、開啟dos跳轉到mysql的bin目錄下
C:\Documents and Settings\lgzhyan>cd C:\xampp\mysql\bin
3、輸入C:\xampp\mysql\bin>mysqld --skip-grant-tables
4、再開啟一個視窗進入到mysql的bin目錄下
5、輸入mysql回車,這個時候可以使用root的身份強行進去。
6、進入到mysql這個庫 use mysql
7、update user set password=password('新密碼') where user='root'
8、重新整理許可權 flush privileges
22、刪掉匿名使用者
drop user ''@'localhost';
23、退出MySQL 1)、quit 2)、exit 3)、\q
24、常見的一些操作
\g 可以代替分號。
\c 取消未完成的操作。
-b 關閉蜂鳴器
-P 埠號
’回車
\G 讓資料豎起來
25、進入資料庫伺服器在不選擇資料庫的情況下選擇lamp庫中的goods表中的所有資料
mysql> select * from lamp.goods;
26、PHP連線資料庫步驟:
1)、連線資料庫
mysql_connect('主機','賬號','