過(guò)完年回來(lái)已經(jīng)一個(gè)月了,也過(guò)完了第一個(gè)教學(xué)月度押赊,前段學(xué)完了缎罢,開(kāi)始學(xué)數(shù)據(jù)庫(kù)了,等完全學(xué)完數(shù)據(jù)庫(kù)就開(kāi)始能自己運(yùn)營(yíng)網(wǎng)頁(yè)了考杉,感覺(jué)賊帥氣策精,賊牛逼,賊屌崇棠,廢話不多說(shuō)了咽袜,把這周學(xué)習(xí)的數(shù)據(jù)庫(kù)操作上來(lái)吧
啟動(dòng)終端
service mysql start
停止終端
service mysql stop
重啟
service mysql restart
登錄mysql
mysql -hlocalhost -uroot -p
連接終端
mysql -uroot -p
select version();? 查看版本
select now();? ? ? ?顯示當(dāng)前時(shí)間
數(shù)據(jù)庫(kù)
創(chuàng)建數(shù)據(jù)庫(kù)
create database?數(shù)據(jù)庫(kù)名 charset=utf8;
刪除數(shù)據(jù)庫(kù)
drop? database? 數(shù)據(jù)庫(kù)名;
切換數(shù)據(jù)庫(kù)
use? 數(shù)據(jù)庫(kù)名;
查看當(dāng)前選擇的數(shù)據(jù)庫(kù)
select database();
數(shù)據(jù)類型
數(shù)字類型
tinyint? 很小的整數(shù)
int? ? ? ? 普通大小的整數(shù)
decimal? 壓縮的嚴(yán)格定點(diǎn)數(shù)
字符串
char? ?固定長(zhǎng)度非二進(jìn)制字符串
varchar? 變長(zhǎng)非二進(jìn)制字符串
text? ? 小的非二進(jìn)制字符串
datetime? 日期
bit? ? ? ? ? ? 布爾
約束
primary? key? 主鍵
not? null? ? ? ? 不能為空
unique? ? ? ? ? ?要求該列唯一,允許為空枕稀,但只能出現(xiàn)一個(gè)
default? ? ? ? ? ?默認(rèn)約束某列的默認(rèn)值
auto_increment? 自增長(zhǎng)询刹,輸入0谜嫉,自動(dòng)加1
表操作
查看當(dāng)前數(shù)據(jù)庫(kù)中的所有表
show tables;
創(chuàng)建表
create table?表名(列+類型+約束,每一列用逗號(hào)分隔)
例如: create table zr1(id int auto_increment primary key,name varchar(10) not null)
創(chuàng)建一個(gè)叫zr1,有兩個(gè)列的表格,id列為數(shù)字類型,自動(dòng)增長(zhǎng),主鍵,名字列為字符串類型,限制為10個(gè)字符串,不能為空
修改表
alter table?表名 add(添加)或者change(修改)或者刪除? 列名?類型;? ?例如
alter table students add birthday datatime;? ?往students里添加時(shí)間類型凹联,名字為生日的表頭
刪除表
drop table?表名;
查看表結(jié)構(gòu)
desc?表名;
更改表名稱
rename table?原表名 to?新表明;
查看表的創(chuàng)建語(yǔ)句
show create table 表名;
增加?修改?刪除
全列插入
insert into?表名 values()
缺省插入
insert into?表名(列1)values(值,...)
同時(shí)插入多條數(shù)據(jù)
insert into?表名 values(),(),();
insert into?表名(列1,..) values(值1沐兰,...),(值1,....);
修改數(shù)據(jù)
update?表名 set?列名=修改的值 where?條件 id=1?或者 名字=?
刪除數(shù)據(jù)
delete from?表名 where?條件(就是想要?jiǎng)h除的行,比如說(shuō)id=1)
表格數(shù)據(jù)查詢操作
查詢
select * from?表名? ? 查詢?nèi)?/p>
select * from?表名 where id=1,或者name="哈哈"(條件);??
select distinct?想要查詢的東西 from?表名;?消除重復(fù)行
比較查詢
select * from?表名 where id<=4;? 查詢id小于等于4的
select * from?表名 where name!="黃蓉"?查詢不等于黃蓉的
select * from?表名 where isdelete=0;? 查詢沒(méi)被刪除的
運(yùn)算符
or或者?and并且? not不蔽挠,沒(méi)有
select * from?表名 where id>3 and name="哈"? 查詢編號(hào)大于三叫哈的同學(xué)
模糊查詢
select * from?表名 where name like '%黃%';? 查詢帶黃字的數(shù)據(jù)住闯,_代表一個(gè)字符,%代表多個(gè)字符
范圍查詢
select * from?表名?where id in(1,3,8); in表示在一個(gè)非連續(xù)的范圍內(nèi)查詢1或3或8的學(xué)生
select * from?表名 where id between 3 and 8;?查詢3到8的學(xué)生
空判斷
select * from?表名 where?表頭名 is null;?查詢表頭名為空的學(xué)生
is?not?null?就是不為空
聚合
select?count(*) from?表名;?計(jì)算總行數(shù)
count計(jì)算總行數(shù) ?max?最大值? min?最小值?sum?求和 avg?平均值
分組
select?列1?列2?或者聚合 from?表名 group? by?列1?列2? having(加條件)
前后兩個(gè)列必須相等
having?運(yùn)算跟where相同? 但是原理不同
where?是對(duì)原始數(shù)據(jù)篩選??
having?是對(duì)group?by?的結(jié)果篩選
排序
order by name(列1) asc/desc, age(列2) asc/desc...
默認(rèn)排序是升序,從小到大
asc? 從小到大
desc?從大到小
分行
limit? 開(kāi)始索引澳淑,分幾行
一般都是在最后寫
一張表中有一個(gè)非主鍵的字段指向了另一張表中的主鍵比原,就叫該字段叫外鍵
非主鍵指向主鍵的是子表
被指向主鍵的是父表
外鍵的列類型必須一致
創(chuàng)建外鍵實(shí)例
在表里創(chuàng)建
先創(chuàng)建父表
create table zr1(
id int auto_increment primary key,
name varchar(10));
在創(chuàng)建子表,連接子類id
create table zr2(
id int auto_increment primary key,
zr2name int,
foreign key(zr2name) references zr1(id));? ? 這行就是創(chuàng)建外鍵約束
這就連接上了? ?一個(gè)更改就會(huì)都更改
外邊創(chuàng)建
表已經(jīng)創(chuàng)建好了?添加外鍵約束
先增加zr2的列
alter table zr2 add age int;
再為zr2的age列添加外鍵約束
alter table zr2 add foreign key(age(就是要約束外鍵的列名)) references zr3(id);? ?zr3(id)就是父表的id跟字表的age綁定了
聯(lián)合查詢
先找到表和表的關(guān)系,name來(lái)自zr1(父表)杠巡,id來(lái)自zr2(子表),address來(lái)自zr3(父表)
zr1 id ---zr2 r1
zr3 id ---zr2 r3
把上面這三樣顯示到一個(gè)表格里
select zr1.name,zr3.address ,zr2.id from zr2(子表)? ? inner前面不能有逗號(hào)
inner join zr1 on? zr2.r1 = zr1.id
inner join zr3 on? zr2.r3 = z3.id;