簡述{
數據庫的使用,需要安裝數據庫服務器,就是裝一個數據庫管理程序,這個管理程序可以管理多個數據庫,一般開發人員會對每一個引用創建一個數據庫。
在保存數據的時候,就需要在數據庫裏創建一個表,來保存程序中的實體數據,
數據庫服務器,數據庫和表的關係:
client(客戶端)---》mysql(數據庫服務器)---》DB(數據庫)---》table(表)}
數據庫{
創建庫: create database db_name(庫的名字) CHARACTER SET utf8(字符集) COLLATE utf8_general_ci(校對規則,查表可知);——創建帶有校對規則的數據庫,指定使用碼錶
顯示庫:show databases;——顯示所有存在的數據庫
show create database db_name(庫名);——顯示指定數據庫的定義語句
\s——顯示當前庫的信息
刪除庫:drop database db_name(庫名);——刪除指定數據庫
修改庫:alter database db_name(庫名) character set gb2312——修改數據庫的碼錶
備份:mysqldump -uroot(用戶名) -proot(密碼) db_name(庫名) >C:\file_name.sql——這是window命令,不能在數據庫程序運行,(新開一個cmd)
恢復:source C:\file_name.sql——(只能恢復數據庫中的數據,不能恢復數據庫)前提:先創建一個新的數據庫,並進入該數據庫,再執行該數據}
進入庫:use db_name——進入指定庫,創建表的前提
表{
創建表:create table table_name(
filed1 datatype,
filed2 datatype
)character set utf8 collate utf8_general_ci;——創建具有兩個某類型的列,使用utf8編碼,帶有校對規則的表
約束:
主鍵:primary key——約束數據不允許重複,不允許——爲空,刪除主鍵:alter table table_name drop primary key;
自動增長:auto_increment——一一般用於修飾主鍵,來防止主鍵重複,插入數據的時候不需要顯示定義主鍵MySQL,表中只能有一個 AUTO_INCREMENT 字段,而且這個字段必須被定義爲鍵。
唯一:unique——約束數據不能重複
非空:not null——約束數據不能爲空
外鍵:constraint ordersid_FK(外鍵名,不可以重複) foreign key(ordersid) references orders(id);——定義一個叫ordersid_FK的外鍵,根據orders的id來約束ordersid這一列的值
表列的屬性:常用 int varchar blob date
分類
數據類型
說明
數值類型
BIT(M)
TINYINT [UNSIGNED] [ZEROFILL]
BOOL,BOOLEAN
SMALLINT [UNSIGNED] [ZEROFILL]
INT [UNSIGNED] [ZEROFILL]
BIGINT [UNSIGNED] [ZEROFILL]
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
位類型。M指定位數,默認值1,範圍1-64
帶符號的範圍是-128到127。無符號0到255。
使用0或1表示真或假
2的16次方
2的32次方
2的64次方
M指定顯示長度,d指定小數位數
表示比float精度更大的小數
文本、二進制類型
CHAR(size) char(20)
VARCHAR(size) varchar(20)
BLOB LONGBLOB
TEXT(clob) LONGTEXT(longclob)
固定長度字符串
可變長度字符串
二進制數據
大文本
時間日期
DATE/DATETIME/TimeStamp
日期類型(YYYY-MM-DD) (YYYY-MM-DD HH:MM:SS),TimeStamp表示時間戳,它可用於自動記錄insert、update操作的時間
對錶的列進行操作:
添加列:alter table table_name add name(列名) datatype (...);
修改列:alter table table_name modify name(列名) datatype (...);
刪除列:alter table table_name drop name(列名);
修改表名:rename table table_name(表名) to new_name(新名);
CRUD:
C:添加數據(insert):insert into table_name(列1,列2,列3) values(值1,值2,值3);——1.可以不指定列名 2.值屬性必須一一對應 3.數據大小要在列規定範圍內4.字符和日期用單引號 5.未賦值的列爲null 6.在命令行插入語句的時候,由於mysql是一個客戶端程序,數據與數據庫交互的時候需要指定碼錶(show variables like 'chara%';存:set charact_set_client=gb2312;取:set charact_set_results=gb2312;)
U:修改數據(update):update table_name set 列1 = 值1,列2 = 值2 【where +條件】;——where用於指定修改哪一行的數據
D:刪除數據(delete):delete from table_name 【where + 條件】;——1.沒有where,刪除所有的數據 2.不能刪除某一列的值,可以用U來賦值 3.只刪除數據,不刪表 4.數據一條一條刪
truncate table table_name;——先摧毀整個表,在重建表,
R:查詢數據(select):{
select * from table_name;——查詢表中的所有數據,全部顯示
select 列1,列2 from table_name;——查詢表中所有數據,顯示指定的列
select distinct * from table_name;——查詢表中所有數據,過濾重複的數據(以列爲整體判斷重複),顯示所有數據
select 列1=列1+100 from table_name;——查詢所有數據,並對列1進行運算。值爲null的不能參與運算,+、-、*、/、=、!=、<>
select 列1 【as】 name from table_name;——查詢所有數據,顯示的時候給列1重命名
select * from table_name where name=‘a’(條件);——查詢出符合條件的數據
where使用的運算符:
比較運算符
> < <= >= = <>
大於、小於、大於(小於)等於、不等於
BETWEEN ...AND...
顯示在某一區間的值
IN(set)
顯示在in列表中的值,例:in(100,200)
LIKE ‘張pattern’
模糊查詢,% 代表零個或多個任意字符,_代表一個字符,[a-f]a到f任意字符,[a,f]a或f字符,[^a-f]不是a到f的任意字符。匹配條件用單引號號括起
IS NULL
判斷是否爲空
邏輯運算符
and
多個條件同時成立
or
多個條件任一成立
not
不成立,例:where not(salary>100);
select * from table_name order by 列1;——查詢之後,用列1進行排序。升序:ase(默認)、降序:desc放在列名後面,
select * from table_name order by 列1 desc,列2;——限用列1降序,相同的用列2 升序排
聚合函數:
單行函數:一行返回一個值,lower(...)
多行函數: max/min(列名)返回查出數據的某列的最大最小值
單行函數和多行函數不可共用:select max(列1),lower(列1) from table_name;count(列名)返回查出數據的某一列有多少行,不包含值爲null的
sum(列名)返回查出數據的某列的行的和,該列必須爲數值型
avg(列名)返回查出數據的某列的平均值
select .... from table_name group by 列1;——查出數據後根據列1進行分組,只能顯示分組後的整體信息,不能出現組內的各行的詳細信息,(聚合函數的多行函數)
select ... from table_name where ... group by 列1 having...;——1.先根據where過濾,再進行分組,最後根據having過濾 2.having可以使用聚合函數 3.having不能出現別名 4.where放在having前面 5.having通常與group by連用,用於組的過濾
多表查詢:
select * from 表1,表2 ;——表1有14行,表2有5行,查出來的結果就是70行數據
select * from 表1 join 表2 on (表1.id = 表2.id);——先將表1和表2連接,在用on的條件進行過濾
select * from 表1 join 表2 on (條件) join 表3 on (條件) where....;——將3個表連接起來
select * from (select * from 表1 group by 列)——臨時表
join 表2 ————通過創建一個臨時表進行連接
on 條件;
}
mysql中文亂碼:lmysql有六處使用了字符集,分別爲:client 、connection、database、results、server 、system。
client:是客戶端使用的字符集。connection:是連接數據庫的字符集設置類型,如果程序沒有指明連接數據庫使用的字符集類型就按照服務器端默認的字符集設置。database:是數據庫服務器中某個庫使用的字符集設定,如果建庫時沒有指明,將使用服務器安裝時指定的字符集設置。results:是數據庫給客戶端返回時使用的字符集設定,如果沒有指明,使用服務器默認的字符集。server:是服務器安裝時指定的默認字符集設定。system:是數據庫系統使用的字符集設定。
}