列屬性
是否為空
是否為空
null 表示字段值可以為null
not null字段值不能為空
預設值預設值
如果乙個字段沒有插入值,可以預設插入乙個指定的值
default 關鍵字用來插入預設值
mysql> create table stu19(
-> name varchar(20) not null default '姓名不詳',
-> addr varchar(50) not null default '位址不詳'
# `query ok, 0 rows affected (0.05 sec)`
mysql> insert into stu19(name) values ('tom');
# `query ok, 1 row affected (0.00 sec)`
mysql> insert into stu19 values (default,default);
# `query ok, 1 row affected (0.00 sec)`
mysql> select * from stu19;
| name | addr |
| tom | 位址不詳 |
| 姓名不詳 | 位址不詳 |
# `2 rows in set (0.00 sec)`
自動增長
自動增長
字段值從1開始,每次遞增1,自動增長的值就不會有重複,適合用來生成唯一的id
在mysql中只要是自動增長列必須是主鍵
auto_increment 關鍵字用來設定自動增長
主鍵概念
唯一標識表中的記錄的乙個或一組列稱為主鍵
primary key 關鍵字用來設定主鍵
特點不能重複、不能為空
乙個表只能有乙個主鍵
作用保證資料完整性
加快查詢速度
原則最少性:盡量選擇單個鍵作為主鍵
穩定性:盡量選擇數值更新少的列作為主鍵
比如:學號 姓名 位址 這三個欄位都不重複
選哪個做主鍵?
選學號,因為學號最穩定
應用只要是auto_increment必須是主鍵,但是主鍵不一定是auto_increment
主鍵特點是不能重複不能為空
乙個表只能有乙個主鍵,但是乙個主鍵可以有多個字段組成
自動增長列通過插入null值讓其遞增
自動增長列的資料被刪除,預設不再重複使用。
truncate table刪除資料後(清空**),再次插入從1開始
練習在主鍵列輸入的數值,允許為空嗎? false
乙個表可以有多個主鍵嗎?false
在乙個學校資料庫中,如果乙個學校內允許重名的學員,但是乙個班級內不允許學員重名,可以組合班級和姓名兩個欄位一起來作為主鍵嗎? true
標識列(自動增長列)允許為字元資料型別嗎? false
乙個自動增長列中,插入3行,刪除2行,插入3行,刪除2行,插入3行,刪除2行,再次插入是多少? 10
建立主鍵
mysql> create table stu20(
-> id int auto_increment primary key,
-> name varchar(20)
# `query ok, 0 rows affected (0.04 sec)`
mysql> create table stu21(
-> id int auto_increment,
-> name varchar(20),
-> primary key(id)
# `query ok, 0 rows affected (0.02 sec)`
建立組合主鍵
mysql> create table stu22(
-> classname varchar(20),
-> stuname varchar(20),
-> primary key(classname,stuname)
# `query ok, 0 rows affected (0.00 sec)`
mysql> desc stu22;
| field | type | null | key | default | extra |
| classname | varchar(20) | no | pri | | |
| stuname | varchar(20) | no | pri | | |
# `2 rows in set (0.00 sec)`
更改表新增主鍵
-- 建立表
mysql> create table stu23(
-> id int,
-> name varchar(20)
# `query ok, 0 rows affected (0.05 sec)`
-- 新增主鍵
mysql> alter table stu23 add primary key(id);
# `query ok, 0 rows affected (0.09 sec)`
# `records: 0 duplicates: 0 warnings: 0`
刪除主鍵
mysql> alter table stu23 drop primary key;
# `query ok, 0 rows affected (0.03 sec)`
# `records: 0 duplicates: 0 warnings: 0`
插入資料
mysql> create table stu25(
-> id tinyint unsigned auto_increment primary key,
-> name varchar(20)
# `query ok, 0 rows affected (0.05 sec)`
-- 插入資料
mysql> insert into stu25 values (3,'tom'); -- 可以直接插入數字
# `query ok, 1 row affected (0.06 sec)`
-- 自動增長列可以插入null,讓列的值自動遞增
mysql> insert into stu25 values (null,'berry');
# `query ok, 1 row affected (0.00 sec)`
唯一鍵唯一鍵與主鍵的區別
主鍵不能重複,不能為空
乙個表只能有乙個主鍵
唯一鍵不能重刻,可以為空
乙個表可以有多個唯一鍵
關鍵字unique
unique key
建立唯一鍵
mysql> create table stu26(
-> id int auto_increment primary key,
-> name varchar(20) unique
# `query ok, 0 rows affected (0.05 sec)`
mysql> create table stu27(
-> id int primary key,
-> name varchar(20),
-> unique(name)
# `query ok, 0 rows affected (0.05 sec)`
修改表新增唯一鍵
-- 將name設為唯一鍵
mysql> alter table stu28 add unique(name);
-- 將name,addr設為唯一鍵
mysql> alter table stu28 add unique(name),add unique(addr);
# `query ok, 0 rows affected (0.00 sec)`
# `records: 0 duplicates: 0 warnings: 0`
mysql> desc stu28;
| field | type | null | key | default | extra |
| id | int(11) | no | pri | null | |
| name | varchar(20) | yes | uni | null | |
| addr | varchar(20) | yes | uni | null | |
# `3 rows in set (0.02 sec)`
檢視唯一鍵的名
mysql> show create table stu28\g;
通過唯一鍵的名字刪除唯一鍵
mysql> alter table stu28 drop index name;
# `query ok, 0 rows affected (0.00 sec)`
# `records: 0 duplicates: 0 warnings: 0`
備註備註
說明性文字
備註屬於sql**的一部分
通過關鍵字comment設定
mysql> create table stu29(
-> id int primary key comment '學號',
-> name varchar(20) not null comment '姓名'
# `query ok, 0 rows affected (0.03 sec)`
看MySQL資料庫大小
1 進去指定schema 資料庫 存放了其他的資料庫的資訊 use information schema 2 查詢所有資料的大小 select concat round sum data length 1024 1024 2 mb as data from tables 3 檢視指定資料庫的大小 比...
mysql資料庫屬性 MySQL資料庫的三個屬性
mysql資料庫的三個屬性 閱讀 236 mysql資料庫的三個屬性是什麼?一般大家對mysql的了解可能停留在概念的層面上,而對於mysql資料庫三大屬性的了解相對較少。今天就跟大家聊聊mysql資料庫的三大屬性。1 原子性,要求屬性具有原子性,不可再分解。表 欄位1 欄位2 欄位2.1 欄位2....
手動備份MySQL資料庫 手動備份mysql資料庫
paths 檔案路徑 user 資料庫使用者名稱 pass 資料庫密碼 database 資料庫名 public static boolean backup string paths,string user,string pass,string database outstr sb.tostring...