1.Windows10如何安裝MYSQL
1.安裝MYSQL
2.以管理員身份運行命令提示符
3.如圖找到安裝MYSQL的路徑,精確到bin文件夾下
4.輸入mysqld -install,提示成功
5.輸入mysqld –initialize –console進行初始化,初始化完畢後,MYSQL文件夾中會多出一個名爲’data’的文件夾,同時命令提示符窗口會告訴你一個隨機初始密碼,密碼在在’root’@’localhost’後面
6.然後輸入net start mysql,啓動MYSQL,服務啓動成功後關閉管理員命令提示符窗口
7.按Windows+R鍵進入運行窗口,然後輸入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整數類型
- int -2^31 ~ 2^31-1 四個字節
- tinyint 一個字節
- smallint 兩個字節
- bigint 八個字節
3.2小數類型
3.2.1浮點類型
- FLOAT
- DOUBLE
3.2.2定點類型
小數部分不會丟失精度,佔用空間高
DECIMAL(p, s),其中p爲有效數字長度,s爲小數位數
tips:
//decimal(5, 2)
//123.77 ok
//1234.44 存不下
//123.456 四捨五入小數部分變爲46
3.3字符串類型
- char(最大長度),定長的字符類型
- varchar(最大長度),變長的字符類型
tips:
//name char(5)'abc',存儲後爲'abc ',用空格補齊不足的部分, 在查詢時會去掉, 效率高,但佔用空間多,最大值爲255
//name varchar(5)'abc',存儲後爲'abc',不會用空格補齊,不會佔用額外空間,效率較低,最大值爲65535
3.4日期類型
- datetime:包括年月日時分秒,時間範圍長(1000-1-1 ~ 9999-12-31)
- date:只包括年月日
- time:只包括時分秒
- timestamp:包括年月日時分秒,時間範圍短(1970-1-1 ~ 2038-1-19)
**tips:**now()獲取當前時間
4.約束
- unique(唯一約束,表示該列的取值唯一,一個表中可以有多個列被唯一約束)
- not null(非空約束,表示該列的取值不能爲空)
- primary key(主鍵約束,表示該列的取值唯一且不能爲空,一個表只能有一個主鍵)
- foreign key(外鍵約束,檢查兩表的關係列是否合法,被引用的列必須在被引用的表中是唯一的)
- 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 條件運算符
- = (表示相等)
- != (表示不相等)
- > (表示大於)
- < (表示小於)
- >= (表示大於等於)
- <= (表示小於等於)
5.2 邏輯運算符
- and (並且)
- or (或者)
- not (取反)
- is null (爲空)
- 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; //總目錄;