SQL基本操作——表操作
建表的過程就是聲明列的過程。
表與字段是密不可分的。
一、新增數據表
create table [if not exists] 表名(
字段名字 數據類型,
字段名字 數據類型 -- 最后一行不需要逗號
)[表選項];if not exists:如果表名不存在,那么就創建,否則不執行創建代碼,起到檢查功能的作用
表選項:控制表的表現字符集:charset/character set 具體字符集; --保證表中數據存儲的字符集校對集:collate 具體校對集; --表采用數據比較的方式存儲引擎:engine 具體的存儲引擎(innodb和myisam)
?舉例:
-- 創建表
create table if not exists student(
name varchar(10),
gender varchar(10),
number varchar(10),
age int
)charset utf8;
?
任何一個表的設計都必須指定數據庫
方案1:顯示的指定表所述的數據庫
crate table 數據庫名.表名;???? --將當前數據表創建到指定的數據庫下
-- 創建表
create table if not exists mydatabase.student( -- 顯示的將student表放到mydatabase數據庫下
name varchar(10),
gender varchar(10),
number varchar(10),
age int
)charset utf8;
方案2:隱式的指定表所屬的數據庫:先進入到某個數據庫環境,然后這樣創建的表自動歸屬到某個指定的數據庫
進入數據庫環境:use 數據庫名字;
-- 先進入數據庫,再創建表
use mydatabase;
create table class(
name varchar(10),
room varchar(10)
)charset utf8;
?
當創建數據表的SQL指令執行之后,到底發生了什么?
- 指定數據庫下已經存在對應的表
- 在數據庫對應的文件夾下,會產生對應表的結構文件(跟存儲引擎有關系)
二、查看數據表
?數據庫能查看的方式,表都可以查看。
-
查看所有表:show tables;
-
查看部分表:模糊匹配???? show tables like 'pattern';? --pattern是匹配模式,? %:表示匹配多個字符, _:表示匹配單個字符
-- 查看以s結尾的表(盡量不要用這種方式查,效率低) show tables like '%s';
-
查看表的創建語句:show create table 表名;
-- 查看表的創建語句 show create table student\g -- \g等價于; show create table student\G -- \G表示將查到的結構旋轉90度變成縱向
-
查看表結構:查看表中的字段信息?????? desc/describe/show columns from 表名;
-- 查看表結構 desc class; describe class; show columns from class;
注:上圖最后一行寫錯了,將form改成from
三、修改數據表
表本身存在,還包括字段,所以表的修改分為兩個部分:修改表本身和修改字段
修改表本身:
表本身可以修改:表名和表選項
修改表名:rename table 老表名 to 新表名;
-- 重命名:student表 -> my_student(取數據庫名字前兩個字母)
rename table student to my_student;
修改表選項:字符集,校對集和存儲引擎 alter table 表名 表選項 [=] 值;
show create table my_student;-- 修改表選項:比如字符集
alter table my_student charset =GBK;show create table my_student;
?
修改字段:
字段操作很多:新增,修改,重名,刪除
-
新增字段??? alter table 表名 add [column] 字段名 數據類型 [列屬性] [位置]
位置:字段名可以存放表中的任意位置,存放方式分為兩類,第一類為first:第一個位置,第二類為after:在哪個字段之后(after 字段名;默認的是在最后一個字段之后)
use mydatabase;
desc my_student;
-- 給學生表增加ID放到第一個位置
alter table my_student
add column id int
first; -- mysql會自動尋找分號作為語句結束符
desc my_student;
?
-
修改字段(通常修改屬性或者數據類型)???????? alter table 表名 modify 字段名 數據類型 [屬性] [位置];
desc my_student;
-- 將學生表中的number學號字段變成固定長度,且放到第二位(id之后)
alter table my_student
modify number char(10)
after id;
desc my_student;
?
-
重名字段? alter table 表名 change 舊字段 新字段名 數據類型 [屬性] [位置];
desc my_student; -- 修改學生表中的gender字段為sex alter table my_student change gender sex varchar(10); desc my_student;
?
-
刪除字段??? alter 表名 drop 字段名;
desc my_student; -- 刪除學生表中的年齡字段(age) alter table my_student drop age; desc my_student;
?
小心:如果表中已經存在數據,那么刪除字段會清空該字段的所有數據(不可逆)
注:varchar
VARCHAR(M)是一種比CHAR更加靈活的數據類型,同樣用于表示字符數據,但是VARCHAR可以保存可變長度的字符串。其中M代表該數據類型所允許保存的字符串的最大長度,只要長度小于該最大值的字符串都可以被保存在該數據類型中。因此,對于那些難以估計確切長度的數據對象來說,使用VARCHAR數據類型更加明智。
四、刪除數據表
drop table 表名1,表名2,...;?? -- 可以一次性刪除多張表(刪除數據庫沒有這種方式;盡量別用這種一次性刪表的方式太危險)
show tables;
-- 刪除數據表
drop table class;
show tables;
當刪除數據表指令執行之后發生了什么?
- 在表空間中,沒有了指定的表(數據也沒有了)
- 在數據對應的文件夾下,表對應的文件(與存儲引擎有關)也會被刪除
刪除數據表指令執行之后:
?
?注意:刪除有危險,操作需謹慎(不可逆)