#not null + default
create table t15(
id int,
name char(16) not null, #not null 不能為空
sex enum('male','female','other') not null default "male" #default 關鍵字默認
);
alter table t15 modify name char(16) not null;
insert into t15(id,name) values
(1,'egon1'),
(2,'egon2'),
(3,'egon3');
約束
什么是約束
除了數據類型以外額外添加的約束
為什么要使用約束
為了保證數據的合法性 完整性
分類:
not null 非空約束 數據不能為空
學生表的姓名字段
create table student (id ind,name char(10) not null);
default 默認值約束 可以指定字段的默認值
create table user (id ind,name char(10) not null,sex char(1) default "woman");
美柚的性別字段 默認為女
游戲 注冊成功 送一萬金幣
unique 唯一性約束 該字段的值不能重復
身份證 手機號 學號
unique其實是一種索引
索引是一種數據結構 用於提高查詢效率
可以為空
一張表中可以有多個唯一約束
單列唯一約束
create table t5(idcard char(18) unique);
多列聯合唯一約束
create table t6(idcard char(18),phonenumber char(11),unique(idcard,phonenumber));
意思: 身份證相同 並且 手機號相同 那就叫相同
primary key ******
稱之為主鍵約束
用於唯一標識表中一條記錄
如何能做到唯一標識 該字段 只要是惟一的 並且不為空 即可
也就是說 從約束的角度來看主鍵約束 和 非空 加 唯一約束 沒有區別
那它們之間的區別是什么?
唯一約束 是一種索引 必然存在硬盤上的某個文件中 是物理層面(實實在在存在的數據)
primary key 是一種邏輯意義上的數據 (實際上不存在)
換句話說 主鍵 就是由 唯一約束 和非空約束 組成的約束
就像 一男一女 可以組成夫妻 但是夫妻只是一種稱呼 不實際存在
語法:
create table stu (stuid int primary key,name char(3));
create table t7(id int unique not null,name char(3));
有主鍵 和沒有主鍵的區別?
1.無法區分兩個相同記錄 比如班級里有兩個人名字相同
2.有主鍵則意味有這索引 效率更高
3.可以建立關聯關系
多列聯合主鍵:
create table t8(idcard char(18),phonenumber char(11),primary key(idcard,phonenumber));
要不要主鍵?
必須的 每個表都應該有主鍵 哪怕不用唯一標識 也應該考慮提升效率
主鍵的字段名 幾乎都叫id
同一個表中可以不可以有多個主鍵?
不可以 沒有任何意義
主鍵的類型需要設置為整型,當然別的也行!建議你別這么干!
練習
創建一個員工表 里面存儲 員工信息 員工編號 姓名 年齡 性別
create table employee (id int primary key,name char(10) not null,age int not null,sex char(10) default "man");
插入數據
INSERT INTO employee VALUES(1,"楊總",20),(2,"egon",49),(3,"wxx",28);
問題? 你很可能忘記上一次的id到第幾了 導致你要先查看一下
麻煩影響效率 所以有了auto_increment
auto_increment ******
中文 自動增長
作用 通常搭配主鍵字段使用 可以自動為你的數據分配逐漸
如何分配的?
添加一條就自動加1 計數從1開始
語法: ******
create table t9(id int primary key auto_increment,name char(3));
如果主鍵是自動增長 你可以跳過這個字段 也可以為它插入null 都可以
修改自動增長的起始位置 **
alter table t9 auto_increment = 7;
注意: 自動增長 只能用於整型
foreign key ******