關(guān)于MySQL當(dāng)中字段的數(shù)據(jù)類型屏鳍?以下只說常見的
int 整數(shù)型(Java中的int)
bigint 長整型(Java中的long)
float 浮點(diǎn)型(Java中的float double)
char 定長字符串(String)
varchar 可變長字符串(StringBuffer/StringBuilder)
date 日期類型(對應(yīng)Java中的java.sql.Date類型)
BLOB二進(jìn)制大對象(存儲圖片棘劣、視頻等流媒體信息) Binary Large Object (對應(yīng)Java中的object)
CLOB 字符大對象(存儲較大文本,比如秘蛔,可以存儲4G的字符串) Character Large Object (對應(yīng)Java中的Object)
char和varchar怎么選擇凌箕?
在實(shí)際的開發(fā)中枪萄,當(dāng)某個(gè)字段中的數(shù)據(jù)長度不發(fā)生改變的時(shí)候伶选,是定長的史飞,例如:性別尖昏、生日等都是采用char。
當(dāng)一個(gè)字段的數(shù)據(jù)長度不確定构资,例如:簡介抽诉、姓名等都是采用varchar。
1吐绵、新建表
創(chuàng)建表語句:create table 表名(字段名1 數(shù)據(jù)類型迹淌,字段名2 數(shù)據(jù)類型,字段名3 數(shù)據(jù)類型······);
create table t_student(no bigint,
name varchar(255),
sex char(1),
classno varchar(255),
birth char(10));
此時(shí)可以從下表中看出表中各個(gè)字段的默認(rèn)值為NULL
若在建表時(shí)使用default語句
create table t_student(no bigint,
name varchar(255),
sex char(1) default 1,
classno varchar(255),
birth char(10));
再次查詢表結(jié)構(gòu)
結(jié)論:default語句在建表時(shí)使用可以修改該字段的默認(rèn)值
2己单、刪除表
刪除表語句:
drop table if exists 表名;
3唉窃、復(fù)制表
create table 表名 as DQL語句
4、將查詢結(jié)果插入到一張表中纹笼?
insert into 目標(biāo)表 select語句
5句携、修改數(shù)據(jù):update
語法格式:
Update 表名 set 字段名1=值1,字段名2=值2......where條件允乐;
注意:沒有條件整張表格數(shù)據(jù)全部更新。
6削咆、刪除數(shù)據(jù)
語法格式:
delete from 表名 where 條件牍疏;
注意:沒有條件全部刪除。
怎么刪除大表:(重點(diǎn))
truncate table 表名拨齐;//表被截?cái)嗔墼桑豢苫貪L,永久丟失瞻惋。
對于表結(jié)構(gòu)的修改不講厦滤,使用工具完成即可,因?yàn)樵趯?shí)際開發(fā)中表一旦設(shè)計(jì)好之后歼狼,對于表結(jié)構(gòu)的修改使很少的掏导,修改表結(jié)構(gòu)就是對之前的設(shè)計(jì)進(jìn)行了否定,即使需要修改表結(jié)構(gòu)羽峰,我們也可以使用工具操作趟咆。修改表結(jié)構(gòu)的語句不會出現(xiàn)在JAVA代碼中,出現(xiàn)在Java代碼中的sql包括:insert detele update select(對表中數(shù)據(jù)操作)
7梅屉、插入數(shù)據(jù)
語法格式:
insert into 表名(字段名1,字段名2,字段名3···) value(值1,值2,值3···);
約束(Constraint)
在創(chuàng)建表的時(shí)候值纱,可以給表的字段添加相應(yīng)的約束,添加約束的目的是為了保證表中數(shù)據(jù)的合法性坯汤、有效性虐唠、完整性。
常見的約束有哪些惰聂?
非空約束(not null):約束的字段不能為NULL
唯一約束(unique):約束的字段不能重復(fù)
主鍵約束(primary key):約束的字段既不能為NULL疆偿,也不能重復(fù)
外鍵約束(foreign key)
檢查約束(check):注意Oracle數(shù)據(jù)庫有check約束咱筛,但是MySQL沒有,目前MySQL不支持該約束翁脆。
唯一性約束(unique)
唯一約束的字段具有唯一性眷蚓,不能重復(fù)。但可以為NULL反番。
【表級約束】
create table t_user(
in int,
usercode varchar(255),
username varchar(255),
unique(usercode,username)
);
【列級約束】
create table t_user(
in int,
usercode varchar(255) unique,
username varchar(255) unique,
);
注意:以上兩種表達(dá)方式功能不一樣沙热,第一種為聯(lián)合表達(dá)形式,單個(gè)字段可以重復(fù)罢缸,但兩個(gè)字段不能一起重復(fù)篙贸,第二種表達(dá)單個(gè)字段內(nèi)不能重復(fù)。
注意:外鍵值可以為NULL枫疆,外鍵字段引用其他表的某個(gè)字段的時(shí)候爵川,被引用的字段不一定是主鍵,但至少具有unique約束(唯一性)息楔。
主鍵約束
主鍵字段中的數(shù)據(jù)不能為NULL寝贡,也不能重復(fù)。
主鍵相關(guān)的術(shù)語值依?
主鍵約束:primary key
主鍵字段:id字段添加primary key之后圃泡,id叫做主鍵字段
主鍵值:id字段中的每一個(gè)值都是主鍵值。
主鍵有什么用愿险?
表的設(shè)計(jì)三范式中有要求颇蜡,第一范式就要求任何一張表都應(yīng)該有主鍵。
主鍵的作用:主鍵值是這行記錄在這張表當(dāng)中的唯一標(biāo)識辆亏。
主鍵的分類风秤?
按主鍵字段數(shù)量分:
-單一主鍵
-復(fù)合主鍵(多個(gè)字段聯(lián)合起來添加一個(gè)主鍵約束)(復(fù)合主鍵不建議使用,因?yàn)閺?fù)合主鍵違背三范式)
按主鍵性質(zhì)劃分:
-自然主鍵:主鍵值最好就是一個(gè)和業(yè)務(wù)沒有任何關(guān)系的自然數(shù)扮叨。
-業(yè)務(wù)主鍵:主鍵值和系統(tǒng)的業(yè)務(wù)掛鉤缤弦,例如:拿著銀行卡的卡號做主鍵,拿著身份證號碼作為主鍵彻磁。(不推薦用)
最好不要拿著和業(yè)務(wù)掛鉤的字段作為主鍵甸鸟。因?yàn)橐院蟮臉I(yè)務(wù)一旦發(fā)生改變的時(shí)候,主鍵值可能也需要隨著發(fā)生變化兵迅,但有的時(shí)候沒有辦法變化抢韭,因?yàn)樽兓赡軙?dǎo)致主鍵值重復(fù)。
一張表的主鍵約束只能有一個(gè)(復(fù)合主鍵也是一個(gè)主鍵恍箭,不常用)
mysql提供主鍵值自增:
id字段自動維護(hù)一個(gè)自增的數(shù)字刻恭,從1開始,以1遞增
create table t_user(id int primary key auto_increment,username varchar(255));
提示:Oracle當(dāng)中也提供了一個(gè)自增機(jī)制,叫做:序列(sequence)對象
外鍵約束
關(guān)于外鍵約束的相關(guān)術(shù)語:
-外鍵約束:foreign key
-外鍵字段:添加有外鍵約束的字段
-外鍵值:外鍵字段中的每一個(gè)值鳍贾。
t_student中的classno字段引用t_class表中的cno字段鞍匾,此時(shí)t_student表叫做子表。t_class表叫做父表骑科。
順序要求:
刪除數(shù)據(jù)的時(shí)候橡淑,先刪除子表,再刪除父表咆爽。
添加數(shù)據(jù)的時(shí)候梁棠,先添加父表,再添加子表斗埂。
創(chuàng)建表的時(shí)候符糊,先創(chuàng)建父表,再創(chuàng)建子表呛凶。
刪除表的時(shí)候男娄,先刪除子表,再刪除父表漾稀。