目錄
- DML 基本介紹
- DML 常見操作
- 添加數據 insert
- 給指定字段添加數據
- 給全部字段添加數據
- 給指定字段批量添加數據
- 給全部字段批量添加數據
- 修改數據 update
- 刪除數據 delete
- 約束基本概念
- 約束操作
- 主鍵約束
- 添加單列主鍵
- 添加多列主鍵(聯合主鍵)
- 修改表結構添加主鍵
- 刪除主鍵約束
- 自增長約束
- 默認自增字段初始值
- 指定自增字段初始值
- 非空約束
- 添加非空約束
- 刪除非空約束
- 唯一約束
- 添加唯一約束
- 刪除唯一約束
- 默認約束
- 添加默認約束
- 刪除默認約束
- 零填充約束
- 添加零填充約束
- 刪除零填充約束
DML 基本介紹
DML(Data Manipulation Language),數據操作語言,用來對數據庫中表的數據記錄進行更新
常見的操作有:
- 添加數據
- 修改數據
- 刪除數據
DML 常見操作
添加數據 insert
- 插入數據時,指定的字段順序需要與值的順序是一一對應的
- 字符串和日期型數據應包含在引號中
- 插入的數據大小應該在字段的規定范圍內
給指定字段添加數據
語法格式:
insert into 表名 (字段名1,字段名2,...) values (值1,值2,...);
代碼示例:
-- 創建學生表student
create table if not exists student(id int comment '學號',name varchar(10) comment '姓名',gender char(1) comment '性別'
);
-- 往student表中添加數據
insert into student (id, name) values (1,'張三');
結果如下:
給全部字段添加數據
語法格式:
insert into 表名 values (值1,值2,...);
代碼示例:
-- 創建學生表student
create table if not exists student(id int comment '學號',name varchar(10) comment '姓名',gender char(1) comment '性別'
);
-- 往student表中添加數據
insert into student values (1,'張三','男');
結果如下:
給指定字段批量添加數據
語法格式:
insert into 表名 (字段名1,字段名2,...) values (值1,值2,...),(值1,值2,...),(值1,值2,...);
代碼示例:
-- 創建學生表student
create table if not exists student(id int comment '學號',name varchar(10) comment '姓名',gender char(1) comment '性別'
);
-- 往student表中添加數據
insert into student (id, name) values (1,'張三'),(2,'李四'),(3,'王五');
結果如下:
給全部字段批量添加數據
語法格式:
insert into 表名 values (值1,值2,...),(值1,值2,...),(值1,值2,...);
代碼示例:
-- 創建學生表student
create table if not exists student(id int comment '學號',name varchar(10) comment '姓名',gender char(1) comment '性別'
);
-- 往student表中添加數據
insert into student values (1,'張三','男'),(2,'李四','男'),(3,'王五','男');
結果如下:
修改數據 update
語法格式:
update 表名 set 字段名=值,字段名=值,... [where 條件];
- where 關鍵字用來篩選條件
- 如果沒有 where 關鍵字,則會修改整張表的數據
代碼示例:
-- 創建學生表student
create table if not exists student(id int comment '學號',name varchar(10) comment '姓名',gender char(1) comment '性別',address varchar(20) comment '地址'
);
-- 往student表中添加數據
insert into student values (1,'張三','男','上海'),(2,'李四','男','重慶'),(3,'王五','男','北京');
-- 將student表中地址address全部改為廣州
update student set address='廣州';
-- 將id為1的地址address改為深圳
update student set address='深圳' where id=1;
結果如下:
刪除數據 delete
語法格式:
-
delete from 表名 [where 條件];
-
trancate table 表名;
注意事項:
- delete 只會刪除表中的內容
- truncate 可以理解為先 drop 表,然后又重新 create 表
代碼示例:
-- 創建學生表student
create table if not exists student(id int comment '學號',name varchar(10) comment '姓名',gender char(1) comment '性別',address varchar(20) comment '地址'
);
-- 往student表中添加數據
insert into student values (1,'張三','男','深圳'),(2,'李四','男','重慶'),(3,'王五','男','北京');
-- 刪除表中信息
delete from student where address='深圳';
結果如下:
約束基本概念
約束(constraint),實際上就是表中數據的約束(限制)條件
作用:表在設計的時候加入約束的目的就是為了保證表中記錄的完整性和有效性,比如用戶有些列的值(手機號)不能為空,有些列的值(身份證號)不能重復
分類:
- 主鍵約束
primary key
PK - 自增長約束
auto_increment
- 非空約束
not null
- 唯一性約束
unique
- 默認約束
default
- 零填充約束
zerofill
- 外鍵約束
foreign key
FK
約束操作
主鍵約束
概念:
- MySQL 主鍵約束是一個列或者多個列的組合,其值能唯一地標識表中的每一行,方便在 RDBMS 中盡快找到某一行
- 主鍵約束相當于 唯一約束 + 非空約束的組合,主鍵約束列不允許重復,也不允許出現空值。
- 每個表最多只允許一個主鍵
- 主鍵約束的關鍵字是:primary key
- 當創建主鍵的約束時,系統默認會在所在的列和列組合上建立對應的唯一索引
操作:
- 添加單列主鍵
- 添加多列聯合主鍵
- 刪除主鍵
添加單列主鍵
創建單列主鍵有兩種方式:
- 在定義字段的同時指定主鍵
- 定義完字段之后指定主鍵
方式 1:在定義字段的同時指定主鍵
語法格式:
create table 表名(......字段名 數據類型 primary key,......
);
代碼示例:
-- 創建學生表student并將學號id設為主鍵
create table student(id int primary key,name varchar(10),gender char(1)
);
-- 查看表結構
desc student;
結果如下:
方式 2:定義完字段之后指定主鍵
語法格式:
create table 表名(......[constraint <約束名>] primary key [字段名]
);
代碼示例:
-- 創建學生表student并將學號id設為主鍵
create table student(id int,name varchar(10),gender char(1),constraint pk_id primary key(id)
);
-- 查看表結構
desc student;
結果如下:
驗證主鍵的作用:
唯一約束:
代碼示例:
-- 創建學生表student并將學號id設為主鍵
create table student(id int,name varchar(10),gender char(1),constraint pk_id primary key(id)
);
-- 添加數據
insert into student values (1,'張三','男'),(1,'李四','男');
執行了添加數據的代碼后,將會得到以下結果:
這段報錯信息告訴我們主鍵不能重復,驗證了約束的唯一性
非空約束:
代碼示例:
-- 創建學生表student并將學號id設為主鍵
create table student(id int,name varchar(10),gender char(1),constraint pk_id primary key(id)
);
-- 添加數據
insert into student values (1,'張三','男'),(null,'李四','男');
執行了添加數據的代碼后,將會得到以下結果:
這段報錯信息告訴我們主鍵不能為空值,驗證了約束的非空性
添加多列主鍵(聯合主鍵)
聯合主鍵就是一個主鍵由表中多個字段組成的
注意事項:
- 當主鍵是由多個字段組成時,不能直接在字段名后面聲明主鍵約束
- 一張表只能有一個主鍵,聯合主鍵雖然由多個字段組成,但也是一個主鍵
語法格式:
create table 表名(......primary key(字段1,字段2,...,字段n)
);
代碼示例:
-- 創建學生表student并將學號id,電話號碼phone_num設為主鍵
create table student(id int,name varchar(10),phone_num int(11),gender char(1),primary key(id,phone_num)
);
結果如下:
注意事項:
- 聯合主鍵的字段值可以有相同的,但不能是構成主鍵的所有字段值相同
- 聯合主鍵的字段值每一個都不能為空值
修改表結構添加主鍵
主鍵約束不僅可以在創建表的同時創建,也可以在修改表時添加
語法格式:
create table 表名(......
);
alter table 表名 add primary key(字段列表);
代碼示例:
-- 創建學生表student
create table student(id int,name varchar(10),phone_num int(11),gender char(1)
);
-- 將學號id,電話號碼phone_num設為主鍵
alter table student add primary key(id,phone_num);
結果如下:
刪除主鍵約束
一個表中不需要主鍵約束時,就需要從表中將其刪除
語法格式:
alter table 表名 drop primary key;
代碼示例:
-- 創建學生表student
create table student(id int,name varchar(10),phone_num int(11),gender char(1)
);
-- 將學號id,電話號碼phone_num設為主鍵
alter table student add primary key(id,phone_num);
-- 將主鍵刪除
alter table student drop primary key;
結果如下:
自增長約束
概念:
-
在 MySQL 中,當主鍵定義為自增長后,這個主鍵的值就不再需要用戶輸入數據了,而由數據庫系統根據定義自動賦值,每增加一條記錄,主鍵會自動以相同的步長進行增長
-
通過給字段添加 auto_increment 屬性來實現主鍵自增長
默認自增字段初始值
語法格式:
字段名 數據類型 auto_increment
代碼示例:
-- 創建學生表student
create table student(id int primary key auto_increment,name varchar(10),phone_num char(11),gender char(1)
);
insert into student values(null,'張三',12345678901,'男'),(null,'李四',12345678902,'男');
insert into student(name) values ('王五');
結果如下:
注意事項:
-
默認情況下,
auto_increment
的初始值是 1,每新增一條記錄,字段值自動加 1 -
一個表中只能有一個字段使用
auto_increment
約束,且該字段必須有唯一索引,以避免序號重復(即為主鍵或主鍵的一部分) -
auto_increment
約束的字段必須具備NOT NULL
屬性。 -
auto_increment
約束的字段只能是整數類型(TINYINT
、SMALLINT
、INT
、BIGINT
等)。 -
auto_increment
約束字段的最大值受該字段的數據類型約束,若達到上限,auto_increment
就會失效。 -
盡量不要混合使用顯示和隱式 id 值,MySQL 在批量插入時會按行數增加
auto_increment
計數器,即使顯式指定的 id 看似“跳過”了自動分配的值,導致后續插入得到的 id 比預期多
代碼示例:
-- 創建學生表student
create table student(id int primary key auto_increment,name varchar(10),phone_num char(11),gender char(1)
);
insert into student values(1,'張三',12345678901,'男'),(null,'李四',12345678902,'男');
insert into student(name) values ('王五');
結果如下:
指定自增字段初始值
如果第一條記錄設置了該字段的初始值,那么新增加的記錄就從這個初始值開始自增,例如:如果表中插入的第一條記錄的 id 值設置為 5,那么再插入記錄時,id 值就會從 5 開始往上增加
方式 1:創建表時指定
語法格式:
create table 表名(......字段名 數據類型 primary key auto_increment,......
)auto_increment=100;
代碼示例:
-- 創建學生表student
create table student(id int primary key auto_increment,name varchar(10),phone_num char(11),gender char(1)
)auto_increment=100;
insert into student values(null,'張三',12345678901,'男'),(null,'李四',12345678902,'男');
insert into student(name) values ('王五');
結果如下:
方式 2:創建表后指定
語法格式:
create table 表名(......字段名 數據類型 primary key auto_increment,......
);
alter table 表名 auto_increment=100;
代碼示例:
-- 創建學生表student
create table student(id int primary key auto_increment,name varchar(10),phone_num char(11),gender char(1)
);
alter table student auto_increment=100;
insert into student values(null,'張三',12345678901,'男'),(null,'李四',12345678902,'男');
insert into student(name) values ('王五');
結果如下:
刪除記錄后自增列的變化:
- delete 數據之后自動增長從斷點開始
- truncate 數據之后自動增長從默認起始值開始
非空約束
概念:MySQL 非空約束(not null)指字段的值不能為空,對于使用了非空約束的字段,如果用戶在添加數據時沒有指定值,數據庫系統就會報錯
添加非空約束
方式 1:創建表時指定
語法格式:
create table 表名(......字段名 數據類型 not null,......
);
代碼示例:
-- 創建學生表student
create table student(id int primary key auto_increment,name varchar(10) not null ,phone_num char(11) not null ,gender char(1)
);
alter table student auto_increment=100;
insert into student values(null,'張三',12345678901,'男'),(null,'李四',12345678902,'男');
結果如下:
方式 2:創建表后指定
語法格式:
create table 表名(......字段名 數據類型,......
);
alter table 表名 modify 字段名 數據類型 not null;
代碼示例:
-- 創建學生表student
create table student(id int primary key auto_increment,name varchar(10),phone_num char(11),gender char(1)
);
alter table student modify name varchar(10) not null;
alter table student modify phone_num char(11) not null;
insert into student values(null,'張三',12345678901,'男'),(null,'李四',12345678902,'男');
結果如下:
刪除非空約束
語法格式:
alter table 表名 modify 字段名 數據類型;
代碼示例:
-- 創建學生表student
create table student(id int primary key auto_increment,name varchar(10) not null ,phone_num char(11) not null ,gender char(1)
);
alter table student modify name varchar(10);
alter table student modify phone_num char(11);
insert into student values(null,null,12345678901,'男'),(null,'李四',null,'男');
結果如下:
唯一約束
概念:唯一約束(unique)是指所有記錄中字段的值不能重復出現,例如:為 id 字段加上唯一性約束后,每條記錄的 id 值都是唯一的,不能出現重復的情況
添加唯一約束
方式 1:創建表時指定
語法格式:
create table 表名(......字段名 數據類型 unique,......
);
代碼示例:
-- 創建學生表student
create table student(id int unique,name varchar(10),gender char(1)
);
insert into student values(1,'張三','男'),(null,'李四','男'),(null,'王五','男');
結果如下:
注意事項:在 MySQL 中 null 值與任意值都不想等包括 null 值
方式 2:創建表后指定
語法格式:
create table 表名(......字段名 數據類型,......
);
alter table 表名 add constraint 約束名 unique(字段名);
代碼示例:
-- 創建學生表student
create table student(id int,name varchar(10),gender char(1)
);
alter table student add constraint id_unique unique(id);
insert into student values(1,'張三','男'),(null,'李四','男'),(null,'王五','男');
結果如下:
刪除唯一約束
語法格式:
alter table 表名 drop index 約束名;
代碼示例:
-- 創建學生表student
create table student(id int,name varchar(10),gender char(1)
);
alter table student add constraint id_unique unique(id);
alter table student drop index id_unique;
insert into student values(1,'張三','男'),(1,'李四','男'),(1,'王五','男');
結果如下:
默認約束
概念:默認約束(default)用來指定某列的默認值
添加默認約束
方式 1:創建表時指定
語法格式:
create table 表名(......字段名 數據類型 default 默認值,......
);
代碼示例:
-- 創建學生表student
create table student(id int,name varchar(10),gender char(1),address varchar(20) default '北京'
);
insert into student(id, name, gender) values (1,'張三','男')
insert into student values(2,'李四','男',null),(3,'王五','男','上海');
結果如下:
方式 2:創建表后指定
語法格式:
create table 表名(......字段名 數據類型,......
);
alter table 表名 modify 字段名 數據類型 default 默認值;
代碼示例:
-- 創建學生表student
create table student(id int,name varchar(10),gender char(1),address varchar(20)
);
alter table student modify address varchar(20) default '北京';
insert into student(id, name, gender) values (1,'張三','男')
insert into student values(2,'李四','男',null),(3,'王五','男','上海');
結果如下:
刪除默認約束
語法格式:
alter table 表名 modify 字段名 數據類型 default null;
代碼示例:
-- 創建學生表student
create table student(id int,name varchar(10),gender char(1),address varchar(20)
);
alter table student modify address varchar(20) default '北京';
alter table student modify address varchar(20) default null;
insert into student(id, name, gender) values (1,'張三','男')
insert into student values(2,'李四','男',null),(3,'王五','男',null);
結果如下:
零填充約束
概念:
- 插入數據時,當該字段的值的長度小于定義的長度時,會在該值的前面補上相應的 0。
zerofill
默認為int(10)
。- 當使用
zerofill
時,默認會自動加unsigned
(無符號)屬性,使用unsigned
屬性后,數值范圍是原值的 2 倍。例如,有符號TINYINT
為 - 128~+127,無符號為 0~256。
添加零填充約束
語法格式:
create table 表名(字段名 數據類型 zerofill,......
);
代碼示例:
-- 創建學生表student
create table student(id int zerofill,name varchar(10)
);
insert into student values (1,'張三'),(2,'李四'),(3,'王五');
結果如下:
刪除零填充約束
語法格式:
alter table 表名 modify 字段名 數據類型;
代碼示例:
-- 創建學生表student
create table student(id int zerofill,name varchar(10)
);
insert into student values (1,'張三'),(2,'李四'),(3,'王五');
alter table student modify id int;
insert into student values (4,'趙六');
結果如下: