數據庫操作
在數據庫操作中,基本操作都是圍繞增刪改查來操作。簡稱CRUD
- C Create 創建
- R Read/Retrieve 查詢
- U Update 修改
- D Delete 刪除
在數操作數據庫時,所有的數據庫語句都要以分號結束,數據庫操作不區分大小寫
- 創建數據庫
create database 數據庫名;
create database 數據庫名 charset utf8;
- 顯示數據庫創建信息
show create database 數據庫名;
- 修改數據庫編碼
alter database 數據庫名 charset utf8;
- 顯示所有數據庫
show databases;
- 切換、使用數據庫
use 數據庫名
- 顯示當前數據庫
select database();
- 刪除數據庫
drop database 數據庫名;
數據表操作
和數據庫操作一樣,在數據表在操作中,也是是圍繞增刪改查來操作。
- 關係表中元素構成
MySQL常用字段類型
- 整數類型
浮點數類型
字符串類型
時間類型
枚舉類型(瞭解)
enum(枚舉值1,枚舉值2, ...)
- 查看所在數據庫中所有的表
show tables;
- 創建表
create table 表名(字段1 字段類型,字段2 字段類型, ....);
- 顯示創建表信息
show create table 表名;
- 增加字段
alter table 表名 add 字段名 字段類型;
- 刪除字段
alter table 表名 drop 字段名;
- 修改字段的數據類型
alter table 表名 modify 字段名 字段類型;
- 修改字段的數據類型並且改名
alter table 表名 change 原字段名 新字段名 字段類型;
插入數據
- 插入所有字段數據
insert into 表名 values(值列表,...);
- 插入指定字段
指定字段順序和列中順序可以不同,值順序要和指定字段順序相同。
insert into 表名(字段1,字段2) values(值1,值2);
- 插入多條數據
insert into 表名 values(值列表, ...),(值列表, ...);
修改數據
- 更新指定字段中所有的數據
updata 表名 set 字段名=值;
- 更新指定字段中滿足條件的數據
updata 表名 set 字段名=值 where 條件;
刪除數據
- 刪除全部數據
truncate 表名;
delete from 表名;
- 刪除滿足條件的數據
delete from 表名 where 條件;
添加約束
- 主鍵約束 (一個表中只能存在一個主鍵約束)
字段被設置了主鍵約束,同時也具有了唯一性約束和非空約束。 在字段中插入重複數據時,或不給數據時會報錯。
create table 表名(字段名 字段類型 primary key,字段名 字段類型, ...);
- 自動增長 (讓數字值自動累加)
create table 表名(字段名 字段類型(int) auto_incremment primary key,字段名 字段類型, ...);
- 唯一性約束
create table 表名(字段名 字段類型 unique, ...);
- 非空約束 (添加數據時必須給值)
create table 表名(字段名 字段類型 not null, ...);
- 默認約束
create table 表名(字段名 字段類型 default '默認值', ...)
- 外鍵約束
-- 表1
create table 表1(字段1 字段類型 primary key,字段2 字段類型,...);
-- 表2
create table 表2(字段3 字段類型 primary key auto_increment, 字名4 字段類型, 字名5 字段類型, foreign key(字段5) references 表1(字段1));
想要刪除有設置外鍵的表,必須先刪除外鍵所關聯的表。
- 添加主鍵約束
alter table 表名 add constraint 約束名 primary key(字段名);
- 刪除主鍵約束
因爲一個表中最多只能有一個主鍵約束,所以可以直接刪除
alter table 表名 drop primary key;
- 添加外鍵約束
alter table 表名 add constraint 外鍵約束名 foreign key(外鍵字段名) references 關聯表(關聯字段名);
- 刪除外鍵約束
alter table 表名 drop foreign key 外鍵名;
單表查詢數據
- 查詢數據表中所有數據
select * from 表名;
- 查詢指定字段數據
select 字段1,字段2,... from 表名;
- as 別名 (通過別名來修改顯示的樣式)
在給字段起別名時,可以使用 as ,也可以直接在字段後跟別名,省略 as 。
select 字段1 as 別名1,字段2 別名,... from 表名;
- 去重 (去除重複的數據)
select distinct 字段名 from 表名;
- 帶條件查詢 where 子句
select * from 表名 where 條件;
where條件可以使用運算符操作
- 比較運算符
- 等於: =
- 大於: >
- 大於等於: >=
- 小於: <
- 小於等於: <=
- 不等於: != 或 <>
- 邏輯運算符
- and
- or
- not
- 模糊查詢
- like
- % 表示0或多個任意字符
- _ 表示一個任意字符
範圍查詢
in 表示在一個非連續的範圍內 , 可以使用 or 實現
select * from 表名 where 字段名 in(值...);
between…and… 表示在一個連續的範圍內,可以使用 and 實現
空判斷
is null 判斷空值
select * from 表名 where 字段名 is null;
is not null 判斷非空值
select * from 表名 where 字段名 is not null
查詢結果排序
排序使用 order by 子句 asc(默認) 升序 / desc 降序 語法:select * from 表名 order by 列1 asc|desc [,列2 asc|desc,…]
單字段排序
select * from 表名 order by 字段名; select * from 表名 order by 字段名 asc;
多字段排序
select * from 表名 order by 字段1 desc,字段2 asc;
分頁查詢
select from 表名 limit start=0,count從start開始,獲取count條數據
start默認值爲0
需要獲取數據的前n條的時候可以直接寫 limit n
聚合函數
select sum(字段),avg(字段),min(字段),max(字段),count(字段) from 表名;
- 分組
- select 分組的字段名,聚合函數… from 表名 group by 分組字段名 having 分組後的條件
- 在執行 group by 分組時,select 後只能有被分組的字段,不允許有其它字段,除非這些字段在聚合函數中
- 根據分組結果,使用group_concat()來獲取分組中指定字段的集合
多表查詢數據
- 普通多表數據查詢
select * from 表1,表2;
這種查詢方式沒有任何意義。 在查詢時,數據庫會將表1中的數據逐條和表2中的所有數據連接,組成一條新記錄。 查詢的結果爲 M * N 條,實際就是笛卡爾積結果。
- 加條件
select * from 表1,表2 where 條件;
- 內鏈接查詢
- 數據庫默認的連接方式就是內連接查詢 , inner join 可以不顯示的寫出來
- 連接條件使用 on 進行指定 也可使用where
select * from 表1 inner join 表2 on 條件;
- 左連接查詢
- 查詢的結果爲根據左表中的數據進行連接,如果右表中沒有滿足條件的記錄,則連接空值
select * from 表1 left join 表2 on 條件;
- 右連接
- 查詢的結果爲根據右表中的數據進行連接,如果左表中沒有滿足條件的記錄,則連接空值
select * from 表1 right join 表2 on 條件;
- 子查詢
- 在一個 select 語句中,嵌入了另外一個 select 語句, 那麼被嵌入的 select 語句稱之爲子查詢語句
select * from 表名 where 條件 運算符 (select 查詢);
- 外部那個select語句則稱爲主查詢
主查詢和子查詢的關係
- 子查詢是嵌入到主查詢中
- 子查詢是輔助主查詢的,要麼充當條件,要麼充當數據源
- 子查詢是可以獨立存在的語句,是一條完整的 select 語句
標量子查詢
- 子查詢返回的結果是一個數據(一行一列)
主查詢 where 條件 比較運算符 (列子查詢)
- 列級子查詢
- 子查詢返回的結果是一列(一列多行)
主查詢 where 條件 in (列子查詢)
- 行級子查詢
- 子查詢返回的結果是一行(一行多列)
主查詢 where (字段1,2,...) = (行子查詢)
數據庫導入導出
- 導出數據庫(終端模式下)
mysqldump -uroot -p 要導出的數據庫名 > 目標文件.sql
- 導出庫當中的指定表
mysqldump -uroot -p 要導出的數據庫名 要導出的數據表 > 目標地址 目標文件.sql
- 導入數據庫
導入數據庫前需要先創建一個空數據庫
- 終端模式下
mysql -uroot -p 數據庫名 < 文件地址 要導入的文件.sql
- mysql模式下
source 文件地址 要導入的文件.sql
以上內容僅供參考 -_- …爲作者邊學習,邊摘抄和總計的內容