--sql語言的四大分類
--數(shù)據(jù)定義語言(DDL)
create alter drop
--數(shù)據(jù)查詢語言(DQL)
select
--數(shù)據(jù)操作語言(DML)
insert update delete
--數(shù)據(jù)控制語言(DCL)
revoke grant
--數(shù)據(jù)庫(kù)的相關(guān)操作
--創(chuàng)建數(shù)據(jù)庫(kù)
create database 數(shù)據(jù)庫(kù)名稱;
--查詢指定的數(shù)據(jù)庫(kù)
show create database mydb;
--查詢所有數(shù)據(jù)庫(kù)
show databases;
--數(shù)據(jù)庫(kù)名稱的相關(guān)規(guī)則:
1、數(shù)據(jù)庫(kù)名稱不能相同(唯一)
2、數(shù)據(jù)庫(kù)名稱不能超過65個(gè)字符,數(shù)據(jù)庫(kù)名稱的別名不能超過255個(gè)字符。
3、數(shù)據(jù)庫(kù)名稱由阿拉伯?dāng)?shù)字、字母、下劃線(_)美元符號(hào)($)組成,但是不能以數(shù)字開頭。
4、數(shù)據(jù)庫(kù)在windows中不區(qū)分大小寫,但是在linux中區(qū)分大小寫。所以推薦全部小寫(方便后期移植到linux中)。
--刪除數(shù)據(jù)庫(kù)
drop database 數(shù)據(jù)庫(kù)名稱;
drop database if exists mydb; --判斷數(shù)據(jù)庫(kù)是否存在,如果存在就刪除,不存在就算了。
--修改數(shù)據(jù)庫(kù)的編碼集
alter database 數(shù)據(jù)庫(kù)名稱 default character set 編碼集; -- 了解
例如:
alter database gxa default character set gb2312;
--指定使用具體的數(shù)據(jù)庫(kù)
use 數(shù)據(jù)庫(kù)名稱;
--數(shù)據(jù)表的相關(guān)操作
--創(chuàng)建數(shù)據(jù)表
create table 表名(表字段1 表字段的類型1(字段的大小),表字段2 表字段的類型2(字段的大小));
create table t_user(uId int(3),uName varchar(10));
--查詢當(dāng)前數(shù)據(jù)庫(kù)中有那些表
show tables;
--查詢指定表創(chuàng)建的信息
show create table t_user;
--查詢表結(jié)構(gòu)
desc t_user;
describe t_user;
--刪除表
drop table 表名;
--字段類型
--整型
tinyint 極小整型
smallint 小整型
mediumint 中整型
int 整型 -- 最常用
bigint 大整型
--浮點(diǎn)型
float 單精度浮點(diǎn)型
double 雙精度浮點(diǎn)型
-- 金錢常用、對(duì)精度要求比較高的 100.25 -- 最常用
decimal(M,D) 總共有M位,保留小數(shù)點(diǎn)D位 -- 最常用
--字符串型
char(3) 固定長(zhǎng)度字符型
varchar(3) 可變長(zhǎng)度字符型 -- 最常用
--日期時(shí)間型
date 日期 yyyy-MM-dd -- 最常用的
datetime 日期時(shí)間型 yyyy-MM-dd hh:mm:ss 2019-07-01 15:34:34
timestamp (支持國(guó)際化)日期時(shí)間型 yyyy-MM-dd hh:mm:ss 2019-07-01 23:34:34 --最常用
--文本型
text 文本類型
blob 它支持存儲(chǔ)視頻、音頻等二進(jìn)制的數(shù)據(jù) -- 很少用
--特殊類型 -- 了解
set 存儲(chǔ)多列數(shù)據(jù) set('籃球','足球')
enum 存儲(chǔ)單列數(shù)據(jù) enum('男','女')
--創(chuàng)建學(xué)生表
create table t_student(
stuNo int(10) primary key auto_increment,
stuName varchar(20) not null,
stuSex char(2) default '男',
stuIdCard varchar(18) unique not null,
stuLifeMoney double(10,2),
stuStartDay date,
stuUrl text,
stuHobby varchar(50)
);
--字段約束
--主鍵約束 -- 主鍵默認(rèn)不能為null,而且唯一。一張表一個(gè)主鍵
primary key
--自動(dòng)增漲 -- 一般配合主鍵使用,默認(rèn)從1開始
auto_increment
--唯一約束 -- 可以設(shè)置值為null,也可以一個(gè)表中多列設(shè)置唯一約束
unique
--非空約束
not null
--唯一非空約束
unique not null
--默認(rèn)約束
default
--外鍵約束
foreign key
學(xué)生班級(jí)表sql代碼示例
create table t_student(
stuNo int(10) primary key auto_increment,
stuName varchar(20) not null,
stuSex char(2) default '男',
stuIdCard varchar(18) unique not null,
stuLifeMoney double(10,2),
stuStartDay date,
stuUrl text,
stuHobby varchar(50),
classId int(10),
constraint for_class foreign key (classId) references t_class(classId)
);
create table t_class(
classId int(10) primary key auto_increment,
className varchar(20)
);
--刪除外鍵
alter table t_student drop foreign key for_class;
--MySQL命令窗口編碼格式和mysql數(shù)據(jù)庫(kù)中不一致,修改一下編碼方法-------了解
--查看當(dāng)前數(shù)據(jù)庫(kù)的編碼格式
show variables like '%char%';
set character_set_client=gb2312;
set character_set_server=gb2312;
--針對(duì)表字段操作
--添加一個(gè)字段
alter table t_user add money decimal(5,2);
--修改字段
alter table t_user change money price decimal(7,2);
--刪除字段
alter table t_user drop price;
--插入數(shù)據(jù) insert
--語法
insert into 表名(字段名1,字段名2......) values(字段1的值,字段2的值);
insert into t_class(classId,className) values(1,'XXX部');
注意:into后的表不指定任何字段,那么values中就必須填寫所有字段的值并且按照順序來
insert into t_class(classId,className) values(5,'xxx01班'),(6,'xxx02班'),(7,'xxx03班');
-- 實(shí)際開發(fā)中不常用
--修改數(shù)據(jù) update
update 表名 set 字段名=更新的值 where 條件
例子:
update t_class set className = 'xxx班' where classId = 5;
update t_class set classId=10,className = 'xxxxxx班' where classId = 7;
update t_class set classMoney=classMoney+100 --修改全部
--將xxx01班的班費(fèi)+100
update t_class set classMoney=classMoney+100 where className = 'xxx01班';
--刪除數(shù)據(jù) delete
delete from 表名 where 條件
例子:
delete from t_class where classId = 200;
delete from t_class --刪除全部數(shù)據(jù)
--備份表
create table newt_class select * from t_class; --結(jié)構(gòu)和數(shù)據(jù)都有
create table newt_class select * from t_class where 1 = 2; --只有結(jié)構(gòu),沒有數(shù)據(jù)。
--從另一個(gè)表中恢復(fù)數(shù)據(jù)
insert into t_class select * from newt_class;
--truncate清空數(shù)據(jù)
truncate table t_class;
--delete 與 truncate 的區(qū)別
1、執(zhí)行效率truncate比delete更高
2、delete可以添加where條件,但是truncate不行。
3、當(dāng)表中出現(xiàn)自動(dòng)增漲auto_increment的字段時(shí),delete刪除所有數(shù)據(jù)后,再添加數(shù)據(jù)。自動(dòng)增漲的值=最后一次+1,但是truncate就從新開始。
4、delete它有日志記錄,truncate沒有。所以delete刪除的數(shù)據(jù)可以恢復(fù),truncate不能。
5、delete它支持事務(wù)處理,truncate不支持事務(wù)處理。
mysql中默認(rèn)事務(wù)是自動(dòng)提交的autocommit = 1
set autocommit = 0; --設(shè)置手動(dòng)提交
commit; --提交