MYSQL數據庫

1.Windows10如何安裝MYSQL

1.安裝MYSQL
2.以管理員身份運行命令提示符
右鍵命令提示符,以管理員身份運行
3.如圖找到安裝MYSQL的路徑,精確到bin文件夾下MYSQL的路徑
4.輸入mysqld -install,提示成功
5.輸入mysqld –initialize –console進行初始化,初始化完畢後,MYSQL文件夾中會多出一個名爲’data’的文件夾,同時命令提示符窗口會告訴你一個隨機初始密碼,密碼在在’root’@’localhost’後面data文件夾
6.然後輸入net start mysql,啓動MYSQL,服務啓動成功後關閉管理員命令提示符窗口
7.按Windows+R鍵進入運行窗口,然後輸入cmd進入命令提示符輸入cmd
8.輸入mysql -u root -p進入MYSQL,然後輸入密碼輸入密碼
9.然後通過ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘new_password’;更改密碼,其中new_password就是新密碼,可以自行修改。

2.MYSQL的常見命令

使用數據庫:

use 數據庫名;  //使用數據庫

顯示所有數據庫:

show databases;  //顯示所有數據庫

顯示所有表:

show tables;  //顯示所有表

查看錶的結構:

desc 表名;  //查看錶的結構

自增列:
主要用來給主鍵一個唯一值

create table 表名(
    列名 數據類型 約束 auto_increment, //產生一個自動增長的值
);
//由初始值開始自增
create table 表名(
    列名 數據類型 約束 auto_increment, //產生一個自動增長的值
) auto_increment=初始值;
//插入數據時可以省略該列
insert into 表名(列名) values('信息');

表中數據的默認值(default):

create table 表名(
    列名1 數據類型 約束 auto_increment,
    列名2 數據類型,
    列名3 數據類型 default '信息',    //默認值爲'信息';
    lastmodify timestamp default current_timestamp on update current_timestamp        
);

2.1 DDL(數據定義語言):

2.1.1 create(創建數據庫、表、視圖、索引…):

create database 數據庫名;    //創建數據庫;
create table 表名{          //創建表;
    列名1 數據類型 約束語句,
    列名2 數據類型 約束語句,
    列名3 數據類型 約束語句,
    ...
    約束
};                          

2.1.2 drop(刪除數據庫、表、視圖、索引…):

drop database 數據庫名;    //刪除數據庫,包含內部信息;
drop table 表名;          //刪除表,包含內部信息;

2.1.3 alter(修改表):

alter table 表名 add 新列名 數據類型;           //給表新添加一列;
alter table 表名 modify 列名 數據類型;   //給表的一列更改數據類型或參數;

2.1.4 truncate(截斷):

truncate table 表名;    //保留表的定義,僅刪除表內信息,效率高,但無法與事務結合,刪除的表無法恢復;

2.2 DML(數據操控語言):

2.2.1 insert(插入數據):

2.2.1.1 向表中插入數據:

標準語法:

insert into 表名(列1,列2,…列n)values(值1,值2,…值n);//向表中插入一行數據;
insert into 表名(列1,列2,…列n)values(值1,值2,…值n);//向表中插入多行數據;
insert into 表名(列1,列2,…列n)values(值1,值2,…值n);
insert into 表名(列1,列2,…列n)values(值1,值2,…值n);

mysql語法:

insert into 表名(列1,列2,…列n)values(值1,值2,…值n);//向表中插入一行數據;
insert into 表(列1,列2,…列n) values 
                (值1,值2,…值n),(值1,值2,…值n),(值1,值2,…值n)...;//向表中插入多行數據;

2.2.1.2 向表中插入另一張表的數據:

insert into 表1(列1,列2...) select 列1,列2... from 表2//向表1插入表2的數據;

2.2.2 update(修改數據):

update 表名 set 列1=新值1,列2=新值2,…; //修改表中列的信息;

2.2.3 delete(刪除數據):

2.2.3.1 刪除表中全部信息:

delete from 表名;//刪除表中的信息,可以恢復;

2.2.3.2 級聯刪除:

foreign key(列名) references 表名(列名) on delete cascade;//刪除與表中該列有關的所有數據;

2.2.4 select(查找數據):

select 列名 from 表名; //查找表中該列的信息;
select * from 表名;   //查找表中所有列的信息;

2.3 DCL(數據控制語言):

2.3.1 grant(授權)

2.3.2 revoke(回收授權)

2.4 TCL(事務控制語言):

2.4.1 start transaction(開始事務)

2.4.2 commit

2.4.3 rollback

3.MYSQL的數據類型

3.1整數類型

  1. int -2^31 ~ 2^31-1 四個字節
  2. tinyint 一個字節
  3. smallint 兩個字節
  4. bigint 八個字節

3.2小數類型

3.2.1浮點類型

  1. FLOAT
  2. DOUBLE

3.2.2定點類型

小數部分不會丟失精度,佔用空間高
DECIMAL(p, s),其中p爲有效數字長度,s爲小數位數
tips:

        //decimal(5, 2)
        //123.77  ok
        //1234.44  存不下
        //123.456  四捨五入小數部分變爲46

3.3字符串類型

  1. char(最大長度),定長的字符類型
  2. varchar(最大長度),變長的字符類型
    tips:
//name char(5)'abc',存儲後爲'abc  ',用空格補齊不足的部分, 在查詢時會去掉, 效率高,但佔用空間多,最大值爲255

//name varchar(5)'abc',存儲後爲'abc',不會用空格補齊,不會佔用額外空間,效率較低,最大值爲65535

3.4日期類型

  1. datetime:包括年月日時分秒,時間範圍長(1000-1-1 ~ 9999-12-31)
  2. date:只包括年月日
  3. time:只包括時分秒
  4. timestamp:包括年月日時分秒,時間範圍短(1970-1-1 ~ 2038-1-19)

**tips:**now()獲取當前時間

4.約束

  1. unique(唯一約束,表示該列的取值唯一,一個表中可以有多個列被唯一約束)
  2. not null(非空約束,表示該列的取值不能爲空)
  3. primary key(主鍵約束,表示該列的取值唯一且不能爲空,一個表只能有一個主鍵)
  4. foreign key(外鍵約束,檢查兩表的關係列是否合法,被引用的列必須在被引用的表中是唯一的)
  5. primary key(列名1,列名2,…)(聯合主鍵約束,表示用多個列作爲主鍵,多個列各自都不是唯一的,但是聯合起來是唯一且不爲空的)

tips:其他約束可以在類型後聲明,也可以單起一行聲明:

create table student(
sid int primary key,
sname varchar(20),
not null(sname)
);

但外鍵必須單起一行聲明:

create table sc(
sid int,
foreign key(sid)references student(sid),
cid int,
foreign key(cid)references course(cid),
score int
);

創建聯合主鍵:

create table 表名{
    列名1 數據類型 約束,
    列名2 數據類型 約束,
    primary key(列名1,列名2)   //聯合主鍵
};

刪除聯合主鍵:

alter table 表名 drop primary key,add primary key(`列名`); //刪除聯合主鍵,創建一個新的主鍵;

5.特殊語法

5.1 條件運算符

  1. = (表示相等)
  2. != (表示不相等)
  3. > (表示大於)
  4. < (表示小於)
  5. >= (表示大於等於)
  6. <= (表示小於等於)

5.2 邏輯運算符

  1. and (並且)
  2. or (或者)
  3. not (取反)
  4. is null (爲空)
  5. is not null (不爲空)

5.3 條件查詢

where:

select * from 表名 where 條件;//查找表中所有滿足條件的數據;

5.4 模糊查詢

like:

select * from 表名 where 列名 like 'S%';//查找表中以S開頭的數據;
//通配符'%': 表示可以匹配零個或多個任意字符;
//通配符'_': 表示匹配一個任意字符;

5.5 範圍查詢

between:

select * from 表名 where 列名>=1000 and 列名<=2000;
//等價於
select * from 表名 where 列名 between 1000 and 2000;//查找表中該列在1000到2000之間的數據;
//必須按由小到大的順序;
//包括等於;

in:

select * from 表名 where 列名='數據1' or 列名='數據2';//查找表中數據爲'數據1'或'數據2'的列;
//等價於
select * from 表名 where 列名 in ('數據1', '數據2');

5.6 排序

order by:

order by 列名1 asc, 列名2 desc, ...;//按列名1的asc(升序)排列,若數據相等則按列名2的desc(降序)排列;

5.7 分組

group by:

select 列名1,組函數 from 表名 group by 列名1 having 條件;//以列名1分組,查找表中符合條件的列名1的數據和組函數;
//select,order by中的列必須和group by中的列相同;
//沒有包含在group by語句中的列,必須和組函數一起使用;

多列分組:

select 列名1,列名2,組函數 from 表名 group by 列名1,列名2;//列名1和列名2的數據都相同時分爲一組; 

5.8 限制返回的結果數

limit:

limit m,n;  //從索引m開始,限制最多返回n行數據;

5.9 語法順序

//where先進行一遍條件過濾,再執行group by進行分組,再執行having中的條件, 再執行select,再執行order by,最後執行limit

5.10 別名

列別名:

select 列名 別名 ...;
//或者
select 列名 as 別名 ...;

表別名:

select ... from 表名 別名;

6. 函數

常用的函數:

6.1 時間加減

date_add:

select date_add(原始時間,interval 數字 時間單位);//時間加減;

6.2 提取時間

extract:

extract(時間單位 from 原始時間)//從原始時間提取某個部分,返回一個整型數據;

6.3 類型轉換

cast:

select cast('數據' as 數據類型);//將其他類型數據轉換成目標類型數據;

6.4 拼接字符串

concat:

select concat('字符數據1', 整型數據, '字符數據2'); //可以把其它類型當做字符串拼接

6.5 求長度

char_length: 以字符爲單位統計長度
length:以字節爲單位統計長度

//不管漢字還是數字或者是字母都算是一個字符
char_length(str);
//utf8mb4編碼下,一個漢字算三個字節,一個數字或字母算一個字節
//其他編碼下,一個漢字算兩個字節, 一個數字或字母算一個字節
length(str);

6.6 判斷

case … end:

case
    when 條件1 then 值1  //滿足條件1則返回值1;
    when 條件2 then 值2  //滿足條件2則返回值2;      
    ...
    else 值n            //都不滿足則返回值n;
end from 表名;

6.7 去重

distinct:

select distinct 列名 from 表名; //去掉表中列的重複數據後列中有哪些數據;

6.8 組函數

max:最大值
min:最小值
avg:平均值
sum:求和
count:個數

max(列名);//查詢該列的最大值
min(列名);//查詢該列的最小值
avg(列名);//查詢該列的平均值
sum(列名);//查詢該列的和
count(列名);//去掉null,查詢該列中行的個數
count(*);//查詢表中行的個數

6.9 查詢幫助

? contents;   //總目錄;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章