Mysql
是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)慧起,由瑞典MySQL AB 公司開(kāi)發(fā)惩淳,目前屬于 Oracle 旗下產(chǎn)品疹吃。它是一款免費(fèi)開(kāi)源蹦疑、小型、關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)萨驶。
為什么要用MySQL數(shù)據(jù)庫(kù)歉摧?
MySQL是目前最受歡迎開(kāi)源的SQL數(shù)據(jù)庫(kù)管理系統(tǒng),與其他的大型數(shù)據(jù)庫(kù)Oracle腔呜、DB2叁温、SQL Server等相比,MySQL雖然有它的不足之處核畴,對(duì)于個(gè)人或中小型企業(yè)來(lái)說(shuō)膝但,MySQL的功能已經(jīng)夠用了,在性能與標(biāo)準(zhǔn)的取舍上谤草,一直堅(jiān)持性能優(yōu)先的原則锰镀,成為了互聯(lián)網(wǎng)行業(yè)非常流行的數(shù)據(jù)庫(kù)軟件之一。 MySQL又是開(kāi)源軟件咖刃,因此沒(méi)有必要花大精力和大價(jià)錢(qián)去使用大型付費(fèi)數(shù)據(jù)庫(kù)管理系統(tǒng)了泳炉。
1.MySQL是開(kāi)放源代碼的數(shù)據(jù)庫(kù)
2.MySQL的跨平臺(tái)性
3.價(jià)格優(yōu)勢(shì),MySQL的社區(qū)版本都是免費(fèi)的嚎杨,即使需要付費(fèi)的附加功能價(jià)格也比其它數(shù)據(jù)庫(kù)便宜花鹅。
登錄流程
mysql -u root -p passwd:
use databases;( 使用數(shù)據(jù)庫(kù))
help
show databases;( 顯示所有的數(shù)據(jù)庫(kù))
show tables;( 顯示表)
1064 錯(cuò)誤代碼,語(yǔ)法錯(cuò)誤
1045 登錄錯(cuò)誤 1007 創(chuàng)建同名的數(shù)據(jù)庫(kù)時(shí)報(bào)錯(cuò) 1008 數(shù)據(jù)庫(kù)不存在枫浙,刪除數(shù)據(jù)庫(kù)失敗
show grants;( 顯示用戶(hù)可以對(duì)服務(wù)器有哪些權(quán)限)
show stataus;( 用于顯示廣泛的服務(wù)器狀態(tài)信息)
庫(kù):保存有組織的數(shù)據(jù)的容器
表:某種特定類(lèi)型數(shù)據(jù)的結(jié)構(gòu)化清單刨肃,包含數(shù)據(jù)庫(kù)中所存數(shù)據(jù)的數(shù)據(jù)庫(kù)對(duì)象,有行和列組成箩帚。
注:同一個(gè)數(shù)據(jù)庫(kù)中不能有兩個(gè)同名的表真友,在不同的數(shù)據(jù)庫(kù)中可以存在名字相同的表。
列:表中每列成為一個(gè)字段紧帕。
數(shù)據(jù)類(lèi)型:所允許的數(shù)據(jù)的類(lèi)型盔然。每個(gè)表列都有相應(yīng)的數(shù)據(jù)類(lèi)型,它限制該列表中存儲(chǔ)的數(shù)據(jù)是嗜。
行:表中的一個(gè)記錄愈案。
主鍵:唯一標(biāo)識(shí)表中每行的這個(gè)列。(辨別某一東西的唯一標(biāo)識(shí)) 表中主鍵滿(mǎn)足的條件: * 任意兩行都不具有相同的主鍵值; * 每個(gè)行都必須有一個(gè)主鍵值鹅搪,主鍵值不允許null值站绪。 主鍵最好的習(xí)慣: * 不更新主鍵列中的值; * 不重用主鍵列的值丽柿; * 不在主鍵列中使用可能會(huì)更改的值恢准。
創(chuàng)建數(shù)據(jù)庫(kù) | |
---|---|
創(chuàng)建: | CREATE DATABASE XXXX charset =(等號(hào)可以省) ‘utf8’魂挂; |
查看創(chuàng)建過(guò)的數(shù)據(jù)庫(kù) : | SHOW CREATE DATABASE XXXX; |
刪除數(shù)據(jù)庫(kù) | DROP DATABASE XXXX馁筐; |
創(chuàng)建已經(jīng)存在的數(shù)據(jù)庫(kù) | CREATE DATBASE IF NOT EXISTS XXXX涂召;(不會(huì)報(bào)錯(cuò), 會(huì)給一個(gè)警示) DROP DATABASE IF EXISTS XXXX眯漩; |
創(chuàng)建一個(gè)學(xué)生信息表
CREATE table students(
id int auto_increment comment '主鍵',
name varchar(50) not null comment '姓名',
age int not null comment '年齡',
sex char(2) not null comment '性別',
primary key (id)
) comment '學(xué)生信息';
查看創(chuàng)建的表信息 | SHOW CREATE TABLE students; |
---|---|
插入單條 | insert into 表名(屬性芹扭,,) values('','',''); INSERT INTO students values(1504000,'小米',23,'女'); |
插入單條 | insert into 表名(屬性赦抖,舱卡,) values(" "," "," "), (' ',' ',' '), (' ',' ',' ') |
添加完查看 | SELECT * FROM students; |
查看表結(jié)構(gòu) | DESC students; |
刪除表 | DELETE FROM 表名;& TRUNCATE 表名队萤; |
修改表名
rename table 表名1 to 表名2;
增加/刪除列
alter table 表名 add 屬性 類(lèi)型 約束條件;
alter table custmers add phone int(11) not null first;
alter table custmers add phone int(11) not null after phone;
alter table 表名 drop column 屬性;
修改字段信息:
alter table 表名 modify 屬性 類(lèi)型 約束條件;(修改某一列)
alter table students change name new_name varchar(5) not null;
alter table students modify sex char(2) firt;
update 表名 set email = 'abdc123@163.com' where id = 5;(修改某一行)
刪除列/行
delete from 表名 where id = '5';(行)
alter table 表名 drop column phone;(列)
查找:
select * from students;
select name from 表名 where place like '北京%';
select count(*) from 表名;
select count(*) from 表名 where place like '北京%';
修改引擎
alter table 表名 engine = MyISAM;
MySQL數(shù)據(jù)類(lèi)型
數(shù)據(jù)類(lèi)型是數(shù)據(jù)的一種屬性轮锥,其中包括整數(shù)型、浮點(diǎn)型要尔、日期和時(shí)間類(lèi)型舍杜、字符串類(lèi)型和二進(jìn)制數(shù)據(jù)類(lèi)型。
整數(shù)類(lèi)型
整數(shù)類(lèi)型 | 取值范圍 |
---|---|
INYINT | -128~127 |
SMALLINT | -32768~32767 |
MEDIUMINT | -8388608~8388607 |
INT | -2147483648~2147483647 |
INTEGRE | -2147483648~2147483647 |
BIGINT | ~ |
日期時(shí)間
類(lèi)型 | 范圍 |
---|---|
YEAR | 1901~2155 |
DATE | 1000-01~9999-12-31 |
TIME | -839:59:59~839:59:59 |
DATETIME | 1000-01 00:00:00~9999-12-31 23:59:59 |
字符串 字符串類(lèi)型是在數(shù)據(jù)庫(kù)中存儲(chǔ)字符串的字符類(lèi)型赵辕。
char類(lèi)型的長(zhǎng)度是固定的既绩,長(zhǎng)度可以在0~255的任意值。
varchar類(lèi)型的長(zhǎng)度是可變的还惠。
注意:如果char和varchar的長(zhǎng)度是5饲握,插入的值的長(zhǎng)度超過(guò)5系統(tǒng)就會(huì)報(bào)錯(cuò)(1406)。
檢索單個(gè)列
例:select name from badboy;
結(jié)束SQL語(yǔ)句蚕键,多條SQL語(yǔ)句必須以分號(hào)(;)分隔 關(guān)鍵字大寫(xiě)救欧,所有列和表名使用小寫(xiě)
檢索多個(gè)列
例:select name,age,id from badboy;
select concat (name,id) from badboy;兩個(gè)字符段在一格中出現(xiàn) concat相當(dāng)于join
檢索所有列
select * from 表名;
檢索不同的行
select distinct age from badboy;(去重)
分頁(yè)
select name from badboy limit 5;顯示表中的5行
select name from students limit10,10;
limit 4 offset 3 (從行3開(kāi)始取4行) = limit 3,4
使用完全限定的表名
select [badboy.name](http://badboy.name) from stu_220.badboy;
排序(order by)
select name, age from students order by age asc;
select name,age from students order by age desc;
select id, name from students order by age,name;
selcet name,age from students order by age desc, name;
select name,age birthday from students where sex='女' and age >25 order by birthday desc;
where 字句
selcet name from students where age > 20;
selcet name from students where age > 20 order by age;(order字句應(yīng)放在where字句后)
不等于: <>/!= selcet name from students where age<>20;
between語(yǔ)句
select name,upname from students where upname regexp '^[a-f]';
select name,age from students where age between 18 and 20;
and操作符
select name,age,place from students where age < 20 and place like '山西%';
or操作符
select name, age from students where age=19 or age=20;
IN select name,age form students where age in (19,20);
select name,age form students where age between 18 and 19;
select name,age form students where age>=18 and age <=19;
in操作符一般比or操作符清單執(zhí)行更快 in的做大優(yōu)點(diǎn)是可以包含其他select語(yǔ)句锣光,使得能夠更動(dòng)態(tài)地建立where語(yǔ)句
三范式:
1NF, 第一范式
字段不能再分笆怠,就滿(mǎn)足第一范式。
-- 2NF, 第二范式
每個(gè)表要有主鍵約束
滿(mǎn)足第一范式的前提下誊爹,不能出現(xiàn)部分依賴(lài)蹬刷。
消除符合主鍵就可以避免部分依賴(lài)。增加單列關(guān)鍵字替废。
-- 3NF, 第三范式
滿(mǎn)足第二范式的前提下箍铭,不能出現(xiàn)傳遞依賴(lài)。
某個(gè)字段依賴(lài)于主鍵椎镣,而有其他字段依賴(lài)于該字段。這就是傳遞依賴(lài)兽赁。
將一個(gè)實(shí)體信息的數(shù)據(jù)放在一個(gè)表內(nèi)實(shí)現(xiàn)状答。
TRUNCATE
TRUNCATE [TABLE] tbl_name
清空數(shù)據(jù)
刪除重建表
區(qū)別:
1冷守,truncate 是刪除表再創(chuàng)建,delete 是逐條刪除
2惊科,truncate 重置auto_increment的值拍摇。而delete不會(huì)
3,truncate 不知道刪除了幾條馆截,而delete知道充活。
mysql函數(shù)與條件判斷函數(shù)
數(shù)學(xué)函數(shù)
name desc
ABS(X) 返回X的絕對(duì)值
MOD(X,Y) 返回X被Y除后的余數(shù)。
FLOOR(X) 返回不大于X的最大整數(shù)值蜡娶。
CEILING(X) 返回不小于X的最小整數(shù)值
ROUND(X) 返回參數(shù)X的四舍五入的一個(gè)整數(shù)混卵。
TRUNCATE(X,Y) 返回X中小數(shù)點(diǎn)Y位后面的數(shù)
字符串函數(shù)
name desc
LENGTH(str) 返回字符串str的長(zhǎng)度。
CONCAT(str1,str2,...) 返回來(lái)自于參數(shù)連結(jié)的字符串窖张。如果任何參數(shù)是NULL幕随,返回NULL∷藿樱可以有超過(guò)2個(gè)的參數(shù)赘淮。一個(gè)數(shù)字參數(shù)被變換為等價(jià)的字符串形式。
TRIM(str) 刪除字符串兩側(cè)的空格睦霎。
REPLACE(str,s1,s2) 字符串str中所有出的s1字符串由s2代替梢卸。
SUBSTRING(str,pos,len) 從字符串str的起始位置pos返回一個(gè)長(zhǎng)度未len的子串。
REVERSE(str) 返回字符串反轉(zhuǎn)順序后的結(jié)果副女。
LOCATE(substr,str) 返回子串substr在字符串str第一個(gè)出現(xiàn)的位置(起始位置)
--#### 時(shí)間日期函數(shù)
now(), current_timestamp(); -- 當(dāng)前日期時(shí)間
current_date(); -- 當(dāng)前日期
current_time(); -- 當(dāng)前時(shí)間
date('yyyy-mm-dd hh:ii:ss'); -- 獲取日期部分
time('yyyy-mm-dd hh:ii:ss'); -- 獲取時(shí)間部分
date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j'); -- 格式化時(shí)間
unix_timestamp(); -- 獲得unix時(shí)間戳
from_unixtime(); -- 從時(shí)間戳獲得時(shí)間
條件判斷函數(shù)
name desc exprote
IF(expr1,expr2,expr3) 如果 expr1 是TRUE 則返回 expr2蛤高,否則返回expr3 SELECT IF(age>30,1,0) FROM studentinfo;
IFNULL(v1,v2) 如果v1不為NULL則返回v1,否則返回v2 select IFNULL(phonenum,'123') as phone FROM studentinfo;
CASE value WHEN 條件 THEN 結(jié)果END 如果value的值滿(mǎn)足WHERE后面的條件,則返回THEN后面的結(jié)果肮塞,否則返回ELSE后面的結(jié)果 SELECT student_name,CASE WHEN age>50 THEN age ELSE 0 END FROM studentinfo;
加密函數(shù)
name desc exprote
PASSWORD(str) 函數(shù)可以對(duì)字符串str進(jìn)行加密襟齿。一般情況下,PASSWORD(str)函數(shù)主要是用來(lái)給用戶(hù)的密碼加密的枕赵。 SELECT PASSWORD('abcd');
MD5(str) MD5(str)函數(shù)可以對(duì)字符串str進(jìn)行加密猜欺。MD5(str)函數(shù)主要對(duì)普通的數(shù)據(jù)進(jìn)行加密。 SELECT MD5('abc')