創(chuàng)建表
-- 創(chuàng)建表
create table 表名稱1 (
字段1 字段類型 [default 值] [not null] auto_increment ,
字段2 字段類型 [default 值] [not null] ,
字段n 字段類型 [default 值] [not null]疤孕,
primary KEY (字段1)围橡,
unique(字段2),
foreign key (字段n ) references 表名稱2(表2的主鍵)
)auto_increment =1 --從1開始自增長(zhǎng)
-- 主鍵:primary KEY
-- 唯一:unique
-- 非空:not NULL (只能寫在列后面)
-- 檢查:check(oracle專屬)
-- 外鍵:foreign key 該表的外鍵必須是另外一張表的主鍵
復(fù)制表(備份)
復(fù)制表的結(jié)構(gòu)和數(shù)據(jù)
create table 表名稱 as select * from emp ;
只復(fù)制表的結(jié)構(gòu)
create table 表名稱 as select * from emp where 1=2;
注意:該種方法不能復(fù)制表的鍵
MySQL常用的數(shù)據(jù)類型:bit、int扬霜、bigint粘招、decimal处嫌、varchar栅贴、date 、DATETIME熏迹、longtext檐薯、set、enum
數(shù)據(jù)庫語言
DQL:數(shù)據(jù)庫查詢語言注暗,select
DML:數(shù)據(jù)庫操作語言坛缕,insert 、update友存、 delete
DDL:數(shù)據(jù)庫定義語言祷膳,alter、 create 屡立、drop等等
DQL
基本查詢:
- select * from 表名稱 where 條件 order by 字段直晨;
- select 字段1,字段2膨俐,勇皇。。焚刺。字段n from 表名稱敛摘;
限定查詢:
- select 字段1,字段2乳愉,兄淫。。蔓姚。字段n from 表名稱 where 條件1 and 條件2 or 條件n捕虽;
分組查詢: 常用的分組方法count 、avg 坡脐、sum 泄私、min 、max
- select count(字段1)备闲,字段2晌端,。恬砂。咧纠。字段n
from 表名稱
where 條件1 and 條件2 or 條件n
group by 字段2,泻骤。惧盹。乳幸。字段n;
DML
增
插入所有數(shù)據(jù)
insert into 表名稱 values(值1钧椰,值2.。符欠。值n)嫡霞;
插入部分?jǐn)?shù)據(jù)
INSERT into zpwd SELECT * from emp;
通過子查詢插入多條數(shù)據(jù)(源表結(jié)構(gòu)必須和目標(biāo)表結(jié)構(gòu)一致)
INSERT into zpwd (empno ,ename,deptno)SELECT empno ,ename,deptno from emp;
改
update 表名稱 set 字段名稱 = 值 [where 條件]
刪
delete from 表名 [where ]
DDL
drop table 表名
create table text(
id int(5) auto_increment,
name varchar(50) default '張三',
primary key(id)
)
-- 修改表 alter table
-- ①修改列的長(zhǎng)度
alter table text modify id int(10);
-- ②修改列的數(shù)據(jù)類型(前提:修改列必須全為空值和默認(rèn)值)
-- (整型轉(zhuǎn)字符串,可以直接轉(zhuǎn)希柿,沒有前提)
alter table text modify id varchar(10);
-- ③添加刪除約束
alter table text modify id varchar(10) not null;
alter table text add primary key(id);
-- ④重命名列和表
alter table text rename as text1
alter table text change id newid int(5);
-- ⑤添加或刪除列
alter table text add age int(3) default 0 not null;
alter table text drop column age;
alter table text drop column age1,drop column age2;
面試題
drop诊沪、truncate 和 delete 表名 有什么區(qū)別
drop、truncate 屬于ddl語言曾撤,后者屬于dml語言端姚,ddl語言屬于隱式提交不能row back。drop是刪除表挤悉,語句將表所占用的空間全釋放掉渐裸;truncate截?cái)啾磉\(yùn)行效率快,清除索引占用的表和數(shù)據(jù)装悲,保留結(jié)構(gòu)昏鹃;delete可以刪除表,但是保留該表的索引诀诊。
事務(wù)
概念:一組增刪改洞渤。
關(guān)鍵字:commit、rowback
navicat默認(rèn)是將所有增刪改一次一提交属瓣。
set autocommit =false; 設(shè)置不自動(dòng)提交
事務(wù)四大特性(ACID):
A(原子性):組成事務(wù)的增刪改要么全成功要么全失敗载迄。
C(一致性):一旦事務(wù)結(jié)束,數(shù)據(jù)保持一致狀態(tài)抡蛙。
I(隔離性):事務(wù)之間互不影響护昧。
D(永久性):事務(wù)一旦提交不能回滾。
注意點(diǎn):
and 和 or 的優(yōu)先級(jí):and優(yōu)先級(jí)高溜畅。
not in(無法使用null)捏卓,in(無法使用null)
select 語句執(zhí)行過程
-- 書寫順序:selelct from where group by having order by LIMIT
-- 執(zhí)行順序:from selelct where group by having order by LIMIT
-- ①where不能使用列別名
-- ②where不能使用分組函數(shù)
-- ③order by 可以使用列別名
-- ④不分組不允許單獨(dú)使用having
索引
-- 優(yōu)點(diǎn):加快查詢速度。
-- 缺點(diǎn):降低增刪改的數(shù)獨(dú)慈格。
-- 適用場(chǎng)景:在經(jīng)常被作為查詢條件的字段上建立索引怠晴。
視圖
-- 視圖是一個(gè)虛擬的表,里面沒有任何數(shù)據(jù)浴捆,只是將常使用的查詢存儲(chǔ)起來蒜田,方便重復(fù)使用。
-- 視圖也可以進(jìn)行增刪改选泻,操作的是表3逶痢C滥!
-- 創(chuàng)建視圖時(shí)加入with check option 梯捕,表示只有視圖中查到的數(shù)據(jù)才可以增刪改厢呵。
模糊查詢會(huì)遇到的問題:
-- 通配符盡量不要用在date日期類型中,因?yàn)閙ysql中可以使用傀顾,但是移植到Oracle中就失效襟铭。
分頁
select * from emp
-- where子句
-- order by
LIMIT 0,5 -- [0,5] 從索引位置開始,查詢的個(gè)數(shù)短曾。
創(chuàng)建序列
create table 表名稱1 (
字段1 字段類型 [default 值] [not null] auto_increment寒砖,
字段2 字段類型 [default 值] [not null] ,
字段n 字段類型 [default 值] [not null]嫉拐,
primary KEY (字段1)哩都,
unique(字段2),
foreign key (字段n ) references 表名稱2(表2的主鍵)
)auto_increment =1 --從1開始自增長(zhǎng)
MySQL提供的函數(shù)
-- 函數(shù)
-- 虛表 dual表
-- abs() 絕對(duì)值
select ABS(-18) from dual;
-- ROUND(X,D) D是小數(shù)點(diǎn)后精確的位數(shù)(四舍五入)
select round(115),round(115,-1),ROUND(115.4455,3) from dual;
-- TRUNCATE`(X,D)截取婉徘,不四舍五入
select TRUNCATE(115,0),TRUNCATE(115,-2),TRUNCATE(115.4455,3) from dual;
-- SUBSTR() 截取字符串,索引值從1開始截取漠嵌,[截取幾個(gè)]
select SUBSTR('hello word',6),SUBSTR('hello word',6,3) from dual;
-- length(str) 返回字符串的長(zhǎng)度
-- CONCAT(str1,str2,...) 字符串拼接,同oracle中的||
-- REPLACE(str,from_str,to_str) 替換將一個(gè)字符串中的某些字符用另外的字符替換
-- LPAD(str,len,padstr),RPAD(str,len,padstr) 左右填充
-- LTRIM(str),RTRIM(str) 左右去空格
-- 日期函數(shù)
mysql在5.6以后支持日期作為默認(rèn)值判哥。
CURDATE()
,CURRENT_DATE()
,CURRENT_TIME()
,NOW()
selectCURDATE(),CURRENT_DATE(),CURRENT_TIME(),NOW()
from dual;
--DATE_FORMAT(date,format)
格式化日期
-- %Y --年份
-- %m --月份
-- %M --月份(英文月份)
-- %d --日
-- %D --日(英文日期)
-- %h --時(shí)(12進(jìn)制)
-- %H --時(shí)(24進(jìn)制)
-- %i --分鐘
-- %s --秒
select DATE_FORMAT(NOW(),'%M-%Y-%d ') from dual;
-- DATEDIFF(expr1,expr2) 返回兩個(gè)日期相減相差多少天
select hiredate,DATEDIFF(NOW(),hiredate) from emp;
-- EXTRACT(unit FROM date) 提取時(shí)間
select hiredate,EXTRACT(year from hiredate) from emp;
-- TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2) 按照year或month或day求差
-- 流程控制函數(shù)
-- case 献雅。。塌计。when挺身。。锌仅。then
SELECT ename, sal, deptno, (
CASE deptno WHEN 10 THEN '開發(fā)部' WHEN 20 THEN '實(shí)施部'
WHEN 30 THEN '測(cè)試部' ELSE '小賣部' END ) dname
FROM emp;
--ifnull(相當(dāng)于oracle中nvl)