1. 程式人生 > >資料庫基礎篇之MySQL(一)

資料庫基礎篇之MySQL(一)

--開啟資料庫
mysql -u 使用者名稱 -p
password:使用者名稱密碼

--建立資料庫並設定編碼格式
create database 庫名 charset 編碼格式

--檢視資料庫
show databases;

--開啟資料庫
use 資料庫的名字;

--開啟資料庫後,顯示庫中的資料表
show tables;

--在開啟的資料庫中建立資料表
--欄位名 欄位型別 約束(可加可不加)
create table teacher(
    id integer primary key auto_increment, --主鍵/自增長
    name varchar(10) not null,             --非空
    gender integer not null,               --非空
    courseid integer default 0,            --預設為0
    isMaster integer default 0             --預設為0
);

--查詢表的欄位資訊
desc teacher;

--清空資料表
truncate table 表名稱

--新增表字段
alter table teacher add sex bool not null;

--修改表字段
alter table 表名稱 change 欄位名稱 欄位名稱 欄位型別 約束; --修改全部
alter table 表名稱 modify 欄位名稱 欄位型別 約束;          --修改欄位名以外部分

--刪除表中某一欄位
alter table 表名稱 drop 欄位名;

--基本的增刪改查:
--在建立好的資料表中插入資料(增)
insert into teacher(name,gender) values("張三",1);

--刪除資料表中不要的資料(刪)
delete from teacher where name="張三";

--修改資料表中的資料(改)
update teacher set name ="李四" where name ="張三”;

--查詢資料表中的資料(查)
select * from teacher where name="張三";    --精確查詢
select * from teacher where name like"張%"; --模糊查詢

--詳細的資料庫查詢語法:
--完整語法
select [select選項] 欄位列表[欄位別名]或* from 資料來源 [where 字句] [group by 字句] [having 字句] [order by 字句] [limit 字句];

--1)[select選項]
select選項包含:all --所有,預設
               distinct --去重,針對的是查詢結果的整條記錄而言
select distinct sex,courseid from teacher;

--2)[where字句]
where是唯一一個從磁碟開始拿資料就開始進行判斷的條件,
從磁碟讀取出一條記錄,開始進行where判斷,判斷結果如果成立,
那麼取出結果儲存到記憶體,否則放棄。
select * from teacher where name="張三";

--3)[group by字句]
group by字句主要的作用是分組,從而進行統計操作,而不是為了展示(
展示的時候,只會展示分組記錄的第一條記錄),分組時,一般會結合使用:
count()、max()、min()、avg()、sum()函式

--A:欄位分組
select c_id,count(*),max(height),min(height),avg(height),avg(age) from my_student group by c_id;
sql語句的意思是:my_student表以c_id進行分組,然後顯示分組後的每組的c_id名稱,每組的總數,每組的最高,
最低,平均身高和每組的平均年齡。沒有寫排序規則時預設為升序。

--B:多欄位分組
select c_id,sex,count(*),max(height),min(height),avg(height),sum(age) from my_student group by c_id,sex;
sql語句的意思是:對整個表先按照c_id進行分組,然後在此分組的基礎之上,每組再按照sex進行分組。

--C:多欄位分組(加上顯示每組的某一欄位的所有資料)
select c_id,sex,count(*),max(height),min(height),avg(height),sum(age),GROUP_CONCAT(name) from my_student group by c_id,sex;
sql語句的意思是:GROUP_CONCAT(name),顯示每組name欄位的所有資料

--4)[having 字句]
having的作用類似where,而且having能做幾乎所有where能做的事情,而where卻不能做having能做的
很多事情,主要是因為where只能在磁碟提取資料的時候對資料進行操作;而在記憶體中對資料進行group by
分組之後的結果進行處理,只能通過having
select c_id,count(*),max(height),min(height),avg(height),sum(age) from my_student group by c_id having COUNT(*)>=3;

--5)[order by字句]
對資料進行排序操作,根據某個欄位進行升序或者降序排序.(進行多欄位排序的時候,先根據某一欄位進行排序,
然後在排序好的內部再按照某欄位進行排序)

--A:單個欄位排序
select * from my_student order by c_id;
sql語句的意思是:根據c_id進行排序查詢,預設為升序

--B:多欄位排序
select * from my_student order by c_id,sex;
sql語句的意思是:根據c_id升序排序後(預設的排序方式),再根據sex進行排序

--C:
升序:asc  降序:desc
select * from my_student order by c_id asc;--升序可以不寫
select * from my_student order by c_id desc;

--6)[limit 字句]
限制結果的數量,limit偏移量記錄條數

--A:
select * from my_student limit 2;
sql語句的意思是:查詢後取前兩個

--B:
select * from my_student limit 0,3;
sql語句的意思是:0表示下標,3表示長度