MySQL

Mysql

是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),目前屬于 Oracle 旗下產(chǎn)品。它是一款免費開源、小型、關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。


為什么要用MySQL數(shù)據(jù)庫?

MySQL是目前最受歡迎開源的SQL數(shù)據(jù)庫管理系統(tǒng),與其他的大型數(shù)據(jù)庫Oracle、DB2、SQL Server等相比,MySQL雖然有它的不足之處,對于個人或中小型企業(yè)來說,MySQL的功能已經(jīng)夠用了,在性能與標(biāo)準(zhǔn)的取舍上,一直堅持性能優(yōu)先的原則,成為了互聯(lián)網(wǎng)行業(yè)非常流行的數(shù)據(jù)庫軟件之一。 MySQL又是開源軟件,因此沒有必要花大精力和大價錢去使用大型付費數(shù)據(jù)庫管理系統(tǒng)了。
1.MySQL是開放源代碼的數(shù)據(jù)庫
2.MySQL的跨平臺性
3.價格優(yōu)勢,MySQL的社區(qū)版本都是免費的,即使需要付費的附加功能價格也比其它數(shù)據(jù)庫便宜。

登錄流程

    mysql -u root -p passwd:

use databases;( 使用數(shù)據(jù)庫)
help
show databases;( 顯示所有的數(shù)據(jù)庫)
show tables;(  顯示表)
1064 錯誤代碼,語法錯誤
1045 登錄錯誤 1007 創(chuàng)建同名的數(shù)據(jù)庫時報錯 1008 數(shù)據(jù)庫不存在,刪除數(shù)據(jù)庫失敗
show grants;(  顯示用戶可以對服務(wù)器有哪些權(quán)限)
show stataus;( 用于顯示廣泛的服務(wù)器狀態(tài)信息)


庫:保存有組織的數(shù)據(jù)的容器
表:某種特定類型數(shù)據(jù)的結(jié)構(gòu)化清單,包含數(shù)據(jù)庫中所存數(shù)據(jù)的數(shù)據(jù)庫對象,有行和列組成。
注:同一個數(shù)據(jù)庫中不能有兩個同名的表,在不同的數(shù)據(jù)庫中可以存在名字相同的表。
列:表中每列成為一個字段。
數(shù)據(jù)類型:所允許的數(shù)據(jù)的類型。每個表列都有相應(yīng)的數(shù)據(jù)類型,它限制該列表中存儲的數(shù)據(jù)。
行:表中的一個記錄。
主鍵:唯一標(biāo)識表中每行的這個列。(辨別某一東西的唯一標(biāo)識) 表中主鍵滿足的條件: * 任意兩行都不具有相同的主鍵值; * 每個行都必須有一個主鍵值,主鍵值不允許null值。 主鍵最好的習(xí)慣: * 不更新主鍵列中的值; * 不重用主鍵列的值; * 不在主鍵列中使用可能會更改的值。
創(chuàng)建數(shù)據(jù)庫
創(chuàng)建: CREATE DATABASE XXXX charset =(等號可以省) ‘utf8’;
查看創(chuàng)建過的數(shù)據(jù)庫 : SHOW CREATE DATABASE XXXX;
刪除數(shù)據(jù)庫 DROP DATABASE XXXX;
創(chuàng)建已經(jīng)存在的數(shù)據(jù)庫 CREATE DATBASE IF NOT EXISTS XXXX;(不會報錯, 會給一個警示) DROP DATABASE IF EXISTS XXXX;
創(chuàng)建一個學(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 屬性 類型 約束條件;
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 屬性 類型 約束條件;(修改某一列)
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ù)類型

數(shù)據(jù)類型是數(shù)據(jù)的一種屬性,其中包括整數(shù)型、浮點型、日期和時間類型、字符串類型和二進制數(shù)據(jù)類型。

整數(shù)類型

整數(shù)類型 取值范圍
INYINT -128~127
SMALLINT -32768~32767
MEDIUMINT -8388608~8388607
INT -2147483648~2147483647
INTEGRE -2147483648~2147483647
BIGINT

日期時間

類型 范圍
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
字符串 字符串類型是在數(shù)據(jù)庫中存儲字符串的字符類型。
char類型的長度是固定的,長度可以在0~255的任意值。
varchar類型的長度是可變的。 
注意:如果char和varchar的長度是5,插入的值的長度超過5系統(tǒng)就會報錯(1406)。

檢索單個列

      例:select name from badboy;
      結(jié)束SQL語句,多條SQL語句必須以分號(;)分隔 關(guān)鍵字大寫,所有列和表名使用小寫

檢索多個列

    例:select name,age,id from badboy;

select concat (name,id) from badboy;兩個字符段在一格中出現(xiàn) concat相當(dāng)于join

檢索所有列

select * from 表名;

檢索不同的行

select distinct age from badboy;(去重)

分頁

    select name from badboy limit 5;顯示表中的5行

    select name from students limit10,10;

    limit 4 offset 3 (從行3開始取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語句

    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)點是可以包含其他select語句,使得能夠更動態(tài)地建立where語句

三范式:

1NF, 第一范式
字段不能再分,就滿足第一范式。
-- 2NF, 第二范式
每個表要有主鍵約束
滿足第一范式的前提下,不能出現(xiàn)部分依賴。
消除符合主鍵就可以避免部分依賴。增加單列關(guān)鍵字。
-- 3NF, 第三范式
滿足第二范式的前提下,不能出現(xiàn)傳遞依賴。
某個字段依賴于主鍵,而有其他字段依賴于該字段。這就是傳遞依賴。
將一個實體信息的數(shù)據(jù)放在一個表內(nèi)實現(xiàn)。

TRUNCATE

TRUNCATE [TABLE] tbl_name
清空數(shù)據(jù)
刪除重建表
區(qū)別:
1,truncate 是刪除表再創(chuàng)建,delete 是逐條刪除
2,truncate 重置auto_increment的值。而delete不會
3,truncate 不知道刪除了幾條,而delete知道。

mysql函數(shù)與條件判斷函數(shù)

數(shù)學(xué)函數(shù)

name desc
ABS(X) 返回X的絕對值
MOD(X,Y) 返回X被Y除后的余數(shù)。
FLOOR(X) 返回不大于X的最大整數(shù)值。
CEILING(X) 返回不小于X的最小整數(shù)值
ROUND(X) 返回參數(shù)X的四舍五入的一個整數(shù)。

TRUNCATE(X,Y) 返回X中小數(shù)點Y位后面的數(shù)

字符串函數(shù)

name desc
LENGTH(str) 返回字符串str的長度。
CONCAT(str1,str2,...) 返回來自于參數(shù)連結(jié)的字符串。如果任何參數(shù)是NULL,返回NULL??梢杂谐^2個的參數(shù)。一個數(shù)字參數(shù)被變換為等價的字符串形式。
TRIM(str) 刪除字符串兩側(cè)的空格。
REPLACE(str,s1,s2) 字符串str中所有出的s1字符串由s2代替。
SUBSTRING(str,pos,len) 從字符串str的起始位置pos返回一個長度未len的子串。
REVERSE(str) 返回字符串反轉(zhuǎn)順序后的結(jié)果。
LOCATE(substr,str) 返回子串substr在字符串str第一個出現(xiàn)的位置(起始位置)

--#### 時間日期函數(shù)

now(), current_timestamp(); -- 當(dāng)前日期時間
current_date(); -- 當(dāng)前日期
current_time(); -- 當(dāng)前時間
date('yyyy-mm-dd hh:ii:ss'); -- 獲取日期部分
time('yyyy-mm-dd hh:ii:ss'); -- 獲取時間部分
date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j'); -- 格式化時間
unix_timestamp(); -- 獲得unix時間戳
from_unixtime(); -- 從時間戳獲得時間

條件判斷函數(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的值滿足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ù)可以對字符串str進行加密。一般情況下,PASSWORD(str)函數(shù)主要是用來給用戶的密碼加密的。 SELECT PASSWORD('abcd');
MD5(str) MD5(str)函數(shù)可以對字符串str進行加密。MD5(str)函數(shù)主要對普通的數(shù)據(jù)進行加密。 SELECT MD5('abc')

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容