文章目錄
- 一、數據庫操作
- 1、創建數據庫
- 2、刪除數據庫
- 二、表操作
- 1、創建表
- (1)主鍵(primary key)屬性
- (2)unique屬性
- (3)主鍵和unique約束的區別
- (4)外鍵
- (5)auto_increment屬性
- (6)列的注釋
- (7)其他
- 2、刪除表
- 3、查看表結構
- 4、查看表創建語句
- 5、修改表名稱
- 6、修改多個表名稱
- 7、增加列
- 8、刪除列
- 9、修改列
- 10、修改列排列位置
一、數據庫操作
1、創建數據庫
create database IF NOT EXISTS db_javaagent_demo;
2、刪除數據庫
drop database IF EXISTS db_javaagent_demo;
二、表操作
1、創建表
create table if not exists tb_student(id int(4) primary key not null auto_increment,number int,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date
) COMMENT '學生基本信息表';insert into tb_student values(10001, 'tom', '10001');
注:
-
char
:定長的字符串; -
varchar
:變長的字符串; -
comment
:表的注釋信息;
(1)主鍵(primary key)屬性
如果主鍵是單列的話,可以直接在該列后面聲明primary key,如下將number設置為主鍵:
create table if not exists tb_student(number int primary key,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date
) COMMENT '學生基本信息表';
我們也可以把主鍵的聲明單獨提取出來,用下面形式聲明:
create table if not exists tb_student(number int,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date,primary key (number)
) COMMENT '學生基本信息表';
對于多個列的組合作為主鍵的話,就必須使用這種單獨聲明的形式:
create table if not exists tb_student(number int,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date,primary key (number, id_number)
) COMMENT '學生基本信息表';
注:主鍵列默認是有not null屬性的。
(2)unique屬性
unique
屬性表明列的值不允許重復。
如果我們想為單個列聲明 unique
屬性,可以直接在該列后填寫 unique
或者 unique key
,例如將 tb_student
表中的 id_number
列聲明為 unique
屬性:
create table if not exists tb_student(number int,name varchar(20),sex char(2),id_number char(18) unique,department varchar(30),major varchar(30),enrollment_time date,primary key (number)
) COMMENT '學生基本信息表';
我們也可以把unique屬性聲明單獨提取出來,用下面形式聲明:
unique [約束名稱] (列名1, 列名2, ...)
unique key [約束名稱] (列名1, 列名2, ...)
當我們為某個列添加了一個unique屬性后,我們插入的記錄的該列的值就不能重復,所以為列添加了一個unique屬性也可以認為是為這個表添加了一個約束,我們就稱之為unique約束。
每個約束都可以有一個名字,像主鍵也算是一個約束,他的名字就是默認的primary,不過一個表中可以為不同的列添加多個unique屬性,也就是添加多個unique約束,每添加一個unique約束,我們就可以給他起個名,這就是上邊的 「約束名稱」 的含義。
不過「約束名稱」是被中括號[]擴起來的,意味著我們寫不寫都可以,如果不寫的話,MySQL會自己幫我們起名。
例如:
create table if not exists tb_student(number int,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date,unique key uk_id_number (id_number, number)
) COMMENT '學生基本信息表';
注:多個列組合具有unique屬性的情況,必須使用這種單獨聲明的形式。
如果表中為某個列或列組合定義了unique屬性的話,MySQL會對我們插入的記錄做校驗,如果新插入的記錄在該列或者列組合的值已經在表中存在了,那就會報錯。
注:組合列定義unique屬性的話,只有組合列的值都相同才會報錯。
(3)主鍵和unique約束的區別
主鍵和unique約束都能保證某個列或者列組合的唯一性,但是:
-
一張表中只能定義一個主鍵,卻可以定義多個unique約束;
-
主鍵列不允許存放null,而聲明了unique屬性的列可以存放null,而且null可以重復的出現在多條記錄中;
注:一個表的某個列聲明了unique屬性,那這個列的值不就不可用重復,那為啥null這么特殊呢?null其實并不是一個值,他代表不確定,我們平常說某個列的值為null,意味著這一列的值還未被設置。
(4)外鍵
插入到學生成績表 tb_student_score中的number
(學號)列中的值必須能在學生基本信息表tb_student
表中 number
列中找到,否則如果一個學號只在成績表里出現,而在基本信息表中找不到相應記錄的話,就相當于插入了不知道哪個學生的成績,這顯然是荒謬的。為了防止這樣的情況出現,MySQL給我們提供了外鍵約束機制。
外鍵定義語法:
constraint [外鍵名稱] foreign key(列1, 列2, ...) references 父表名(父列1, 父列2, ...);
其中「外鍵名稱」也是可選的,一個名字而已,我們自己不命名的話,MySQL自己會幫我們命名。
如果A表中的某個列或者某些列依賴與B表中的某個列或某些列,那么就稱A表為子表,B表為父表。
子表和父表可以使用外鍵來關聯起來,上邊的例子tb_student_score表的number列依賴于tb_student的number列,所以tb_student就是一個父表,tb_student_score就是子表。
我們在tb_student_score建表語句中定義一個外鍵:
create table tb_student_score (number int,subject varchar(30),score tinyint,primary key (number, subject),constraint foreign key(number) references tb_student(number)
);
這樣,在對tb_student_score表插入數據時,MySQL都會為我們檢查一下插入的學號是否能在tb_student表中找到,如果找不到就會報錯。
注:父表中被子表依賴的列或者列組合必須建立索引,如果該列或者列組合已經是主鍵或者有unique屬性,那么他們也就被默認建立了索引。
(5)auto_increment屬性
auto_increment翻譯成中文可以理解為 自動增長
,簡稱自增。
如果一個表中的某個列的數據類型是整數類型或者浮點數類型,那么這個列可以設置auto_increment屬性,當我們把某個列設置了auto_increment屬性之后,如果我們在插入新記錄的時候不指定該列的值,或者將該列的值顯式的指定為NULL或者0,那么新插入的記錄在該列上的值就是當前該列的最大值+1后的值。
# 列名 列的類型 auto_increment
create table if not exists tb_student(id int auto_increment primary key,number int,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date,unique key uk_id_number (id_number, number)
) COMMENT '學生基本信息表';
注:
一個表中最多有一個具有auto_increment屬性的列;
具有auto_increment屬性的列必須建立索引。主鍵或具有unique屬性的列會自動建立索引,具體什么是索引,后面會具體講解;
一般擁有auto_increment屬性的列都是作為主鍵的屬性,來自動生成唯一標識一條記錄的主鍵值;
(6)列的注釋
前面講過,在建表語句的末尾可以添加comment語句來給表添加注釋,其實我們可以在每一個列末尾添加comment語句來為列來添加注釋,例如:
create table if not exists tb_student(id int auto_increment primary key,number int comment '學號',name varchar(20) comment '姓名',sex char(2) comment '性別',id_number char(18) comment '身份證號',unique key uk_id_number (id_number, number)
) COMMENT '學生基本信息表';
(7)其他
每個列可以同時具有多個屬性,屬性聲明的順序無所謂,各個屬性之間用空白隔開就好。
注:有的屬性是沖突的,一個列不能具有兩個沖突的屬性,例如:
一個列不能既聲明為primary key,又聲明為unique;
一個列不能既聲明為default null,又聲明為not null;
2、刪除表
drop table if exists tb_student;
3、查看表結構
describe tb_student;
desc tb_student;
explain tb_student;
show columns from tb_student;
show fields from tb_student;
4、查看表創建語句
# show create table 表名;
show create table tb_student;
5、修改表名稱
# alter table 舊表名 rename to 新表名;
alter table tb_student rename to tb_student_1;
6、修改多個表名稱
# rename table 舊表名1 to 新表名, 舊表名2 to 新表名2, ...;
rename table tb_student to tb_student_1, tb_user to tb_user_1;
7、增加列
# alter table 表名 add column 列名 列的類型 [列的屬性];
alter table tb_student add column nickname varchar(20) not null;
默認情況下列都是加到現有列的最后一行后面,增加列到特定位置:
# 添加到第一列
# alter table 表名 add column 列名 列的類型 [列的屬性] first;
alter table tb_student add column nickname varchar(20) not null first;
8、刪除列
# alter table 表名 drop column 列名;
alter table tb_student drop column nick_name;
9、修改列
# alter table 表名 modify 列名 新數據類型 [新屬性];
alter table tb_student modify nick_name varchar(20) not null;#alter table 表名 change 舊列名 新列名 新數據類型 [新屬性];
alter table tb_student change nick_name nick_name_1 varchar(20) not null;
10、修改列排列位置
# alter table 表名 modify 列名 列的類型 列的屬性 first;
alter table tb_student modify nick_name varchar(20) not null first;# alter table 表名 modify 列名 列的類型 列的屬性 after 指定列名;
alter table tb_student modify nick_name varchar(20) not null after name;