一,庫的管理
一、創建庫
create database 【if not exists】 庫名【 character set 字符集名】;
二、修改庫
alter database 庫名 character set 字符集名;
三、刪除庫
drop database 【if exists】 庫名;
二,表的管理
一、創建表 ★
create table 【if not exists】 表名(
字段名 字段類型 【約束】,
字段名 字段類型 【約束】,
。。。
字段名 字段類型 【約束】
)
二、修改表
1.添加列
alter table 表名 add column 列名 類型 【first|after 字段名】;
2.修改列的類型或約束
alter table 表名 modify column 列名 新類型 【新約束】;
3.修改列名
alter table 表名 change column 舊列名 新列名 類型;
4 .刪除列
alter table 表名 drop column 列名;
5.修改表名
alter table 表名 rename 【to】 新表名;
三、刪除表
drop table【if exists】 表名;
四、複製表
1、複製表的結構
create table 表名 like 舊錶;
2、複製表的結構+數據
create table 表名
select 查詢列表 from 舊錶【where 篩選】;
三,數據類型
一、數值型
1、整型
tinyint、smallint、mediumint、int/integer、bigint
1 2 3 4 8
特點:
①都可以設置無符號和有符號,默認有符號,通過unsigned設置無符號
②如果超出了範圍,會報out or range異常,插入臨界值
③長度可以不指定,默認會有一個長度
長度代表顯示的最大寬度,如果不夠則左邊用0填充,但需要搭配zerofill,並且默認變爲無符號整型
2、浮點型
定點數:decimal(M,D)
浮點數:
float(M,D) 4
double(M,D) 8
特點:
①M代表整數部位+小數部位的個數,D代表小數部位
②如果超出範圍,則報out or range異常,並且插入臨界值
③M和D都可以省略,但對於定點數,M默認爲10,D默認爲0
④如果精度要求較高,則優先考慮使用定點數
二、字符型
char、varchar、binary、varbinary、enum、set、text、blob
char:固定長度的字符,寫法爲char(M),最大長度不能超過M,其中M可以省略,默認爲1
varchar:可變長度的字符,寫法爲varchar(M),最大長度不能超過M,其中M不可以省略
三、日期型
year年
date日期
time時間
datetime 日期+時間 8
timestamp 日期+時間 4 比較容易受時區、語法模式、版本的影響,更能反映當前時區的真實時間
四,常見約束
一、常見的約束
NOT NULL:非空,該字段的值必填
UNIQUE:唯一,該字段的值不可重複
DEFAULT:默認,該字段的值不用手動插入有默認值
CHECK:檢查,mysql不支持
PRIMARY KEY:主鍵,該字段的值不可重複並且非空 unique+not null
FOREIGN KEY:外鍵,該字段的值引用了另外的表的字段
主鍵和唯一
1、區別:
①、一個表至多有一個主鍵,但可以有多個唯一
②、主鍵不允許爲空,唯一可以爲空
2、相同點
都具有唯一性
都支持組合鍵,但不推薦
外鍵:
1、用於限制兩個表的關係,從表的字段值引用了主表的某字段值
2、外鍵列和主表的被引用列要求類型一致,意義一樣,名稱無要求
3、主表的被引用列要求是一個key(一般就是主鍵)
4、插入數據,先插入主表
刪除數據,先刪除從表
可以通過以下兩種方式來刪除主表的記錄
#方式一:級聯刪除
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE CASCADE;
#方式二:級聯置空
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE SET NULL;
二、創建表時添加約束
create table 表名(
字段名 字段類型 not null,#非空
字段名 字段類型 primary key,#主鍵
字段名 字段類型 unique,#唯一
字段名 字段類型 default 值,#默認
constraint 約束名 foreign key(字段名) references 主表(被引用列)
)
注意:
支持類型 可以起約束名
列級約束 除了外鍵 不可以
表級約束 除了非空和默認 可以,但對主鍵無效
列級約束可以在一個字段上追加多個,中間用空格隔開,沒有順序要求
三、修改表時添加或刪除約束
1、非空
添加非空
alter table 表名 modify column 字段名 字段類型 not null;
刪除非空
alter table 表名 modify column 字段名 字段類型 ;
2、默認
添加默認
alter table 表名 modify column 字段名 字段類型 default 值;
刪除默認
alter table 表名 modify column 字段名 字段類型 ;
3、主鍵
添加主鍵
alter table 表名 add【 constraint 約束名】 primary key(字段名);
刪除主鍵
alter table 表名 drop primary key;
4、唯一
添加唯一
alter table 表名 add【 constraint 約束名】 unique(字段名);
刪除唯一
alter table 表名 drop index 索引名;
5、外鍵
添加外鍵
alter table 表名 add【 constraint 約束名】 foreign key(字段名) references 主表(被引用列);
刪除外鍵
alter table 表名 drop foreign key 約束名;
四、自增長列
特點:
1、不用手動插入值,可以自動提供序列值,默認從1開始,步長爲1
auto_increment_increment
如果要更改起始值:手動插入值
如果要更改步長:更改系統變量
set auto_increment_increment=值;
2、一個表至多有一個自增長列
3、自增長列只能支持數值型
4、自增長列必須爲一個key
一、創建表時設置自增長列
create table 表(
字段名 字段類型 約束 auto_increment
)
二、修改表時設置自增長列
alter table 表 modify column 字段名 字段類型 約束 auto_increment
三、刪除自增長列
alter table 表 modify column 字段名 字段類型 約束